From cbeb1083edcac1aef32afd8d289dacede4532d45 Mon Sep 17 00:00:00 2001 From: DongHun Kwak Date: Thu, 12 Oct 2017 10:06:33 +0900 Subject: [PATCH] Imported Upstream version 1.2.0 Change-Id: Ibf5d43325937d7f901867dfefa453220213c355e Signed-off-by: DongHun Kwak --- .hgignore | 67 + .hgtags | 21 + .travis.yml | 18 + CMakeLists.txt | 13 +- LICENSE | 35 + Makefile.in | 904 -- NEWS.md | 11 + README-snapshot.md | 7 + README.md | 10 +- THANKS | 6 + TODO.md | 28 +- aclocal.m4 | 1158 -- cmake-config.h.in | 5 + compile | 347 - config.guess | 1438 -- config.h.in | 229 - config.sub | 1810 --- configure | 15033 ------------------- configure.ac | 11 +- create-cmake-config.h.in.pl | 77 + depcomp | 791 - docs/aes_coding_tips.txt | 253 + docs/aes_info.txt | 607 + docs/appnote.iz | 3686 +++++ docs/appnote.txt | 3497 +++++ docs/extrafld.txt | 1372 ++ examples/Makefile.in | 600 - install-sh | 301 - lib/CMakeLists.txt | 8 + lib/Makefile.am | 22 +- lib/Makefile.in | 1022 -- lib/compat.h | 6 + lib/gladman-fcrypt.c | 44 + lib/gladman-fcrypt.h | 49 + lib/gladman-fcrypt/Makefile.am | 14 + lib/gladman-fcrypt/aes.h | 128 + lib/gladman-fcrypt/aescrypt.c | 450 + lib/gladman-fcrypt/aeskey.c | 416 + lib/gladman-fcrypt/aesopt.h | 900 ++ lib/gladman-fcrypt/aestab.c | 529 + lib/gladman-fcrypt/fileenc.c | 144 + lib/gladman-fcrypt/fileenc.h | 121 + lib/gladman-fcrypt/hmac.c | 150 + lib/gladman-fcrypt/hmac.h | 81 + lib/gladman-fcrypt/main.c | 291 + lib/gladman-fcrypt/prng.c | 155 + lib/gladman-fcrypt/prng.h | 82 + lib/gladman-fcrypt/pwd2key.c | 159 + lib/gladman-fcrypt/pwd2key.h | 60 + lib/gladman-fcrypt/sha1.c | 287 + lib/gladman-fcrypt/sha1.h | 79 + lib/zip.h | 27 +- lib/zip_add_entry.c | 2 +- lib/zip_buffer.c | 111 +- lib/zip_close.c | 151 +- lib/zip_delete.c | 2 +- lib/zip_dirent.c | 218 +- lib/zip_discard.c | 2 +- lib/zip_err_str.c | 4 +- lib/zip_error.c | 2 +- lib/zip_error_strerror.c | 2 +- lib/zip_error_to_str.c | 2 +- lib/zip_extra_field.c | 2 +- lib/zip_fdopen.c | 2 +- lib/zip_file_get_offset.c | 2 +- lib/zip_file_set_encryption.c | 117 + lib/zip_filerange_crc.c | 2 +- lib/zip_fopen_index.c | 2 +- lib/zip_fopen_index_encrypted.c | 2 +- lib/zip_fseek.c | 54 + lib/zip_ftell.c | 56 + lib/zip_get_compression_implementation.c | 4 +- lib/zip_get_encryption_implementation.c | 20 +- lib/zip_io_util.c | 2 +- lib/zip_name_locate.c | 2 +- lib/zip_new.c | 4 +- lib/zip_open.c | 127 +- lib/zip_random_unix.c | 54 + lib/zip_random_win32.c | 51 + lib/zip_set_default_password.c | 2 +- lib/zip_set_name.c | 2 +- lib/zip_source_error.c | 8 +- lib/zip_source_file.c | 6 +- lib/zip_source_filep.c | 174 +- lib/zip_source_function.c | 3 +- lib/zip_source_open.c | 4 +- lib/zip_source_pkware.c | 2 +- lib/zip_source_read.c | 41 +- lib/zip_source_stat.c | 2 +- lib/zip_source_supports.c | 2 +- lib/zip_source_win32handle.c | 9 +- lib/zip_source_winzip_aes_decode.c | 289 + lib/zip_source_winzip_aes_encode.c | 261 + lib/zip_source_zip_new.c | 9 +- lib/zip_stat_index.c | 15 +- lib/zip_unchange.c | 2 +- lib/zip_unchange_all.c | 2 +- lib/zipint.h | 64 +- ltmain.sh | 9669 ------------ m4/libtool.m4 | 7982 ---------- m4/ltoptions.m4 | 384 - m4/ltsugar.m4 | 123 - m4/ltversion.m4 | 23 - m4/lt~obsolete.m4 | 98 - man/CMakeLists.txt | 5 + man/Makefile.am | 4 + man/Makefile.in | 689 - man/ZIP_SOURCE_GET_ARGS.man | 47 - man/fix-man-links.sh | 6 + man/libzip.man | 108 - man/libzip.mdoc | 11 +- man/make_zip_errors.sh | 113 + man/mkdocset.pl | 216 + man/nih-man.css | 61 + man/zip_add.man | 50 - man/zip_add.mdoc | 8 +- man/zip_add_dir.man | 31 - man/zip_add_dir.mdoc | 2 +- man/zip_close.man | 98 - man/zip_close.mdoc | 5 +- man/zip_delete.man | 42 - man/zip_delete.mdoc | 2 +- man/zip_dir_add.man | 79 - man/zip_dir_add.mdoc | 5 +- man/zip_discard.man | 30 - man/zip_discard.mdoc | 2 +- man/zip_error_clear.man | 40 - man/zip_error_code_system.man | 32 - man/zip_error_code_zip.man | 29 - man/zip_error_fini.man | 29 - man/zip_error_get.man | 87 - man/zip_error_get_sys_type.man | 49 - man/zip_error_init.man | 46 - man/zip_error_set.man | 38 - man/zip_error_strerror.man | 36 - man/zip_error_system_type.man | 46 - man/zip_error_to_data.man | 38 - man/zip_error_to_str.man | 52 - man/zip_errors.man | 100 - man/zip_errors.mdoc | 2 +- man/zip_fclose.man | 33 - man/zip_fclose.mdoc | 7 +- man/zip_fdopen.man | 122 - man/zip_fdopen.mdoc | 2 +- man/zip_file_add.man | 133 - man/zip_file_add.mdoc | 8 +- man/zip_file_extra_field_delete.man | 102 - man/zip_file_extra_field_delete.mdoc | 8 +- man/zip_file_extra_field_get.man | 130 - man/zip_file_extra_field_get.mdoc | 10 +- man/zip_file_extra_field_set.man | 87 - man/zip_file_extra_field_set.mdoc | 7 +- man/zip_file_extra_fields_count.man | 85 - man/zip_file_extra_fields_count.mdoc | 8 +- man/zip_file_get_comment.man | 89 - man/zip_file_get_comment.mdoc | 5 +- man/zip_file_get_error.man | 26 - man/zip_file_get_external_attributes.man | 138 - man/zip_file_get_external_attributes.mdoc | 9 +- man/zip_file_rename.man | 74 - man/zip_file_rename.mdoc | 5 +- man/zip_file_set_comment.man | 86 - man/zip_file_set_comment.mdoc | 5 +- man/zip_file_set_encryption.mdoc | 111 + man/zip_file_set_external_attributes.man | 59 - man/zip_file_set_external_attributes.mdoc | 9 +- man/zip_file_set_mtime.man | 55 - man/zip_file_set_mtime.mdoc | 7 +- man/zip_file_strerror.man | 56 - man/zip_file_strerror.mdoc | 2 +- man/zip_fopen.man | 126 - man/zip_fopen.mdoc | 5 +- man/zip_fopen_encrypted.man | 87 - man/zip_fopen_encrypted.mdoc | 2 +- man/zip_fread.man | 36 - man/zip_fread.mdoc | 5 +- man/zip_fseek.mdoc | 72 + man/zip_ftell.mdoc | 67 + man/zip_get_archive_comment.man | 72 - man/zip_get_archive_comment.mdoc | 2 +- man/zip_get_archive_flag.man | 50 - man/zip_get_error.man | 29 - man/zip_get_file_comment.man | 33 - man/zip_get_file_comment.mdoc | 2 +- man/zip_get_name.man | 92 - man/zip_get_name.mdoc | 2 +- man/zip_get_num_entries.man | 41 - man/zip_get_num_entries.mdoc | 2 +- man/zip_get_num_files.man | 41 - man/zip_get_num_files.mdoc | 2 +- man/zip_name_locate.man | 84 - man/zip_name_locate.mdoc | 2 +- man/zip_open.man | 153 - man/zip_register_progress_callback.mdoc | 66 + man/zip_rename.man | 30 - man/zip_rename.mdoc | 2 +- man/zip_set_archive_comment.man | 56 - man/zip_set_archive_comment.mdoc | 5 +- man/zip_set_archive_flag.man | 37 - man/zip_set_default_password.man | 51 - man/zip_set_default_password.mdoc | 2 +- man/zip_set_file_comment.man | 39 - man/zip_set_file_comment.mdoc | 5 +- man/zip_set_file_compression.man | 79 - man/zip_set_file_compression.mdoc | 5 +- man/zip_source.man | 57 - man/zip_source.mdoc | 2 +- man/zip_source_begin_write.man | 40 - man/zip_source_buffer.man | 72 - man/zip_source_buffer.mdoc | 8 +- man/zip_source_close.man | 36 - man/zip_source_commit_write.man | 39 - man/zip_source_error.man | 29 - man/zip_source_error.mdoc | 6 +- man/zip_source_file.man | 83 - man/zip_source_file.mdoc | 11 +- man/zip_source_filep.man | 75 - man/zip_source_filep.mdoc | 11 +- man/zip_source_free.man | 45 - man/zip_source_function.man | 271 - man/zip_source_function.mdoc | 6 +- man/zip_source_is_deleted.man | 31 - man/zip_source_keep.man | 29 - man/zip_source_make_command_bitmap.man | 31 - man/zip_source_open.man | 39 - man/zip_source_read.man | 46 - man/zip_source_read.mdoc | 5 +- man/zip_source_rollback_write.man | 42 - man/zip_source_rollback_write.mdoc | 6 +- man/zip_source_seek.man | 53 - man/zip_source_seek_compute_offset.man | 49 - man/zip_source_seek_compute_offset.mdoc | 2 +- man/zip_source_seek_write.man | 56 - man/zip_source_stat.man | 108 - man/zip_source_tell.man | 43 - man/zip_source_tell_write.man | 46 - man/zip_source_win32a.man | 86 - man/zip_source_win32a.mdoc | 11 +- man/zip_source_win32handle.man | 86 - man/zip_source_win32handle.mdoc | 11 +- man/zip_source_win32w.man | 86 - man/zip_source_win32w.mdoc | 11 +- man/zip_source_write.man | 49 - man/zip_source_zip.man | 93 - man/zip_source_zip.mdoc | 5 +- man/zip_stat.man | 145 - man/zip_stat.mdoc | 6 +- man/zip_stat_init.man | 45 - man/zip_stat_init.mdoc | 2 +- man/zip_unchange.man | 44 - man/zip_unchange.mdoc | 4 +- man/zip_unchange_all.man | 33 - man/zip_unchange_all.mdoc | 2 +- man/zip_unchange_archive.man | 33 - man/zip_unchange_archive.mdoc | 2 +- man/zipcmp.man | 61 - man/zipmerge.man | 60 - man/ziptool.man | 346 - man/ziptool.mdoc | 37 +- missing | 215 - regress/CMakeLists.txt | 20 +- regress/Makefile.am | 85 +- regress/Makefile.in | 1259 -- regress/NiHTest.pm | 10 +- regress/cm-default.test | 5 + regress/decrypt-aes-correct-password.test | 5 - regress/decrypt-aes-wrong-password.test | 5 - regress/decrypt-correct-password-aes128.test | 5 + regress/decrypt-correct-password-aes192.test | 5 + regress/decrypt-correct-password-aes256.test | 5 + ...d.test => decrypt-correct-password-pkware.test} | 0 regress/decrypt-no-password-aes256.test | 5 + regress/decrypt-wrong-password-aes128.test | 5 + regress/decrypt-wrong-password-aes192.test | 5 + regress/decrypt-wrong-password-aes256.test | 5 + ...ord.test => decrypt-wrong-password-pkware.test} | 0 regress/encrypt-aes.zip | Bin 336 -> 0 bytes regress/encrypt-aes128-noentropy.zip | Bin 0 -> 260 bytes regress/encrypt-aes128.zip | Bin 0 -> 260 bytes regress/encrypt-aes192-noentropy.zip | Bin 0 -> 264 bytes regress/encrypt-aes192.zip | Bin 0 -> 316 bytes regress/encrypt-aes256-noentropy.zip | Bin 0 -> 268 bytes regress/encrypt-aes256.zip | Bin 0 -> 320 bytes regress/encrypt-none.zip | Bin 0 -> 218 bytes regress/encryption-nonrandom-aes128.test | 5 + regress/encryption-nonrandom-aes192.test | 5 + regress/encryption-nonrandom-aes256.test | 5 + regress/encryption-remove.test | 4 + regress/fseek.c | 98 + regress/fseek_deflated.test | 6 + regress/fseek_fail.test | 6 + regress/fseek_ok.test | 6 + regress/incons-central-file-comment-shorter.zip | Bin 127 -> 258 bytes regress/junk-at-end.zip | Bin 0 -> 416 bytes regress/junk-at-start.zip | Bin 0 -> 416 bytes regress/junk_at_end.test | 5 + regress/junk_at_start.test | 5 + regress/manyfiles-zip.zip | Bin 424991 -> 3434201 bytes regress/nonrandomopen.c | 81 + regress/open_file_count.test | 4 +- regress/open_many_fail.test | 11 + regress/open_many_ok.test | 10 +- regress/progress.test | 10 + regress/rename_deleted.test | 2 +- regress/rename_fail.test | 2 +- regress/set_compression_unknown.test | 2 +- regress/set_mtime.test | 4 + src/Makefile.in | 672 - src/hole.c | 2 +- src/zipcmp.c | 7 +- src/ziptool.c | 206 +- test-driver | 148 - vstudio/readme.txt | 77 + vstudio/vsbuild.cmd | 193 + vstudio/zlib/unpack_zlib_here.txt | 1 + xcode/config.h | 4 +- xcode/libzip.xcodeproj/project.pbxproj | 64 +- xcode/mkconfig-h.sh | 12 + 318 files changed, 17264 insertions(+), 51501 deletions(-) create mode 100644 .hgignore create mode 100644 .hgtags create mode 100644 .travis.yml delete mode 100644 Makefile.in create mode 100644 README-snapshot.md delete mode 100644 aclocal.m4 delete mode 100755 compile delete mode 100755 config.guess delete mode 100644 config.h.in delete mode 100755 config.sub delete mode 100755 configure create mode 100755 create-cmake-config.h.in.pl delete mode 100755 depcomp create mode 100644 docs/aes_coding_tips.txt create mode 100644 docs/aes_info.txt create mode 100644 docs/appnote.iz create mode 100644 docs/appnote.txt create mode 100644 docs/extrafld.txt delete mode 100644 examples/Makefile.in delete mode 100755 install-sh delete mode 100644 lib/Makefile.in create mode 100644 lib/gladman-fcrypt.c create mode 100644 lib/gladman-fcrypt.h create mode 100644 lib/gladman-fcrypt/Makefile.am create mode 100644 lib/gladman-fcrypt/aes.h create mode 100644 lib/gladman-fcrypt/aescrypt.c create mode 100644 lib/gladman-fcrypt/aeskey.c create mode 100644 lib/gladman-fcrypt/aesopt.h create mode 100644 lib/gladman-fcrypt/aestab.c create mode 100644 lib/gladman-fcrypt/fileenc.c create mode 100644 lib/gladman-fcrypt/fileenc.h create mode 100644 lib/gladman-fcrypt/hmac.c create mode 100644 lib/gladman-fcrypt/hmac.h create mode 100644 lib/gladman-fcrypt/main.c create mode 100644 lib/gladman-fcrypt/prng.c create mode 100644 lib/gladman-fcrypt/prng.h create mode 100644 lib/gladman-fcrypt/pwd2key.c create mode 100644 lib/gladman-fcrypt/pwd2key.h create mode 100644 lib/gladman-fcrypt/sha1.c create mode 100644 lib/gladman-fcrypt/sha1.h create mode 100644 lib/zip_file_set_encryption.c create mode 100644 lib/zip_fseek.c create mode 100644 lib/zip_ftell.c create mode 100644 lib/zip_random_unix.c create mode 100644 lib/zip_random_win32.c create mode 100644 lib/zip_source_winzip_aes_decode.c create mode 100644 lib/zip_source_winzip_aes_encode.c delete mode 100644 ltmain.sh delete mode 100644 m4/libtool.m4 delete mode 100644 m4/ltoptions.m4 delete mode 100644 m4/ltsugar.m4 delete mode 100644 m4/ltversion.m4 delete mode 100644 m4/lt~obsolete.m4 delete mode 100644 man/Makefile.in delete mode 100644 man/ZIP_SOURCE_GET_ARGS.man create mode 100755 man/fix-man-links.sh delete mode 100644 man/libzip.man create mode 100644 man/make_zip_errors.sh create mode 100755 man/mkdocset.pl create mode 100644 man/nih-man.css delete mode 100644 man/zip_add.man delete mode 100644 man/zip_add_dir.man delete mode 100644 man/zip_close.man delete mode 100644 man/zip_delete.man delete mode 100644 man/zip_dir_add.man delete mode 100644 man/zip_discard.man delete mode 100644 man/zip_error_clear.man delete mode 100644 man/zip_error_code_system.man delete mode 100644 man/zip_error_code_zip.man delete mode 100644 man/zip_error_fini.man delete mode 100644 man/zip_error_get.man delete mode 100644 man/zip_error_get_sys_type.man delete mode 100644 man/zip_error_init.man delete mode 100644 man/zip_error_set.man delete mode 100644 man/zip_error_strerror.man delete mode 100644 man/zip_error_system_type.man delete mode 100644 man/zip_error_to_data.man delete mode 100644 man/zip_error_to_str.man delete mode 100644 man/zip_errors.man delete mode 100644 man/zip_fclose.man delete mode 100644 man/zip_fdopen.man delete mode 100644 man/zip_file_add.man delete mode 100644 man/zip_file_extra_field_delete.man delete mode 100644 man/zip_file_extra_field_get.man delete mode 100644 man/zip_file_extra_field_set.man delete mode 100644 man/zip_file_extra_fields_count.man delete mode 100644 man/zip_file_get_comment.man delete mode 100644 man/zip_file_get_error.man delete mode 100644 man/zip_file_get_external_attributes.man delete mode 100644 man/zip_file_rename.man delete mode 100644 man/zip_file_set_comment.man create mode 100644 man/zip_file_set_encryption.mdoc delete mode 100644 man/zip_file_set_external_attributes.man delete mode 100644 man/zip_file_set_mtime.man delete mode 100644 man/zip_file_strerror.man delete mode 100644 man/zip_fopen.man delete mode 100644 man/zip_fopen_encrypted.man delete mode 100644 man/zip_fread.man create mode 100644 man/zip_fseek.mdoc create mode 100644 man/zip_ftell.mdoc delete mode 100644 man/zip_get_archive_comment.man delete mode 100644 man/zip_get_archive_flag.man delete mode 100644 man/zip_get_error.man delete mode 100644 man/zip_get_file_comment.man delete mode 100644 man/zip_get_name.man delete mode 100644 man/zip_get_num_entries.man delete mode 100644 man/zip_get_num_files.man delete mode 100644 man/zip_name_locate.man delete mode 100644 man/zip_open.man create mode 100644 man/zip_register_progress_callback.mdoc delete mode 100644 man/zip_rename.man delete mode 100644 man/zip_set_archive_comment.man delete mode 100644 man/zip_set_archive_flag.man delete mode 100644 man/zip_set_default_password.man delete mode 100644 man/zip_set_file_comment.man delete mode 100644 man/zip_set_file_compression.man delete mode 100644 man/zip_source.man delete mode 100644 man/zip_source_begin_write.man delete mode 100644 man/zip_source_buffer.man delete mode 100644 man/zip_source_close.man delete mode 100644 man/zip_source_commit_write.man delete mode 100644 man/zip_source_error.man delete mode 100644 man/zip_source_file.man delete mode 100644 man/zip_source_filep.man delete mode 100644 man/zip_source_free.man delete mode 100644 man/zip_source_function.man delete mode 100644 man/zip_source_is_deleted.man delete mode 100644 man/zip_source_keep.man delete mode 100644 man/zip_source_make_command_bitmap.man delete mode 100644 man/zip_source_open.man delete mode 100644 man/zip_source_read.man delete mode 100644 man/zip_source_rollback_write.man delete mode 100644 man/zip_source_seek.man delete mode 100644 man/zip_source_seek_compute_offset.man delete mode 100644 man/zip_source_seek_write.man delete mode 100644 man/zip_source_stat.man delete mode 100644 man/zip_source_tell.man delete mode 100644 man/zip_source_tell_write.man delete mode 100644 man/zip_source_win32a.man delete mode 100644 man/zip_source_win32handle.man delete mode 100644 man/zip_source_win32w.man delete mode 100644 man/zip_source_write.man delete mode 100644 man/zip_source_zip.man delete mode 100644 man/zip_stat.man delete mode 100644 man/zip_stat_init.man delete mode 100644 man/zip_unchange.man delete mode 100644 man/zip_unchange_all.man delete mode 100644 man/zip_unchange_archive.man delete mode 100644 man/zipcmp.man delete mode 100644 man/zipmerge.man delete mode 100644 man/ziptool.man delete mode 100755 missing delete mode 100644 regress/Makefile.in create mode 100644 regress/cm-default.test delete mode 100644 regress/decrypt-aes-correct-password.test delete mode 100644 regress/decrypt-aes-wrong-password.test create mode 100644 regress/decrypt-correct-password-aes128.test create mode 100644 regress/decrypt-correct-password-aes192.test create mode 100644 regress/decrypt-correct-password-aes256.test rename regress/{decrypt-correct-password.test => decrypt-correct-password-pkware.test} (100%) create mode 100644 regress/decrypt-no-password-aes256.test create mode 100644 regress/decrypt-wrong-password-aes128.test create mode 100644 regress/decrypt-wrong-password-aes192.test create mode 100644 regress/decrypt-wrong-password-aes256.test rename regress/{decrypt-wrong-password.test => decrypt-wrong-password-pkware.test} (100%) delete mode 100644 regress/encrypt-aes.zip create mode 100644 regress/encrypt-aes128-noentropy.zip create mode 100644 regress/encrypt-aes128.zip create mode 100644 regress/encrypt-aes192-noentropy.zip create mode 100644 regress/encrypt-aes192.zip create mode 100644 regress/encrypt-aes256-noentropy.zip create mode 100644 regress/encrypt-aes256.zip create mode 100644 regress/encrypt-none.zip create mode 100644 regress/encryption-nonrandom-aes128.test create mode 100644 regress/encryption-nonrandom-aes192.test create mode 100644 regress/encryption-nonrandom-aes256.test create mode 100644 regress/encryption-remove.test create mode 100644 regress/fseek.c create mode 100644 regress/fseek_deflated.test create mode 100644 regress/fseek_fail.test create mode 100644 regress/fseek_ok.test create mode 100644 regress/junk-at-end.zip create mode 100644 regress/junk-at-start.zip create mode 100644 regress/junk_at_end.test create mode 100644 regress/junk_at_start.test create mode 100644 regress/nonrandomopen.c create mode 100644 regress/open_many_fail.test create mode 100644 regress/progress.test create mode 100644 regress/set_mtime.test delete mode 100644 src/Makefile.in delete mode 100755 test-driver create mode 100644 vstudio/readme.txt create mode 100644 vstudio/vsbuild.cmd create mode 100644 vstudio/zlib/unpack_zlib_here.txt create mode 100755 xcode/mkconfig-h.sh diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000..4a9fd2e --- /dev/null +++ b/.hgignore @@ -0,0 +1,67 @@ +(^|/)Makefile$ +(^|/)Makefile.in$ +/.deps/ +/.libs/ +\.DS_Store$ +\.la$ +\.lo$ +\.o$ +\.pc$ +^GPATH$ +^GRTAGS$ +^GTAGS$ +^aclocal.m4$ +^autom4te\.cache/ +^build +^compile$ +^config\.(guess|h|h\.in|log|status|sub)$ +^configure$ +^cov-int$ +^depcomp$ +^examples/in-memory$ +^install-sh$ +^lib/zip_err_str\.c$ +^lib/zipconf\.h$ +^libtool$ +^ltmain.sh$ +^m4/libtool.m4$ +^m4/ltoptions.m4$ +^m4/ltsugar.m4$ +^m4/ltversion.m4$ +^m4/lt~obsolete.m4$ +^man/.*\.html$ +^man/.*\.man$ +^man/at\.nih\.libzip\.docset/ +^man/at.nih.libzip-.*\.xar$ +^man/at.nih.libzip.*\.atom$ +^missing$ +^regress/.*log$ +^regress/.*trs$ +^regress/add_from_filep$ +^regress/bigzero.zip$ +^regress/fopen_unchanged$ +^regress/fread$ +^regress/fseek$ +^regress/manyfiles.zip$ +^regress/manyfiles-133000.zip$ +^regress/manyfiles-65536.zip$ +^regress/manyfiles-fewer.zip$ +^regress/manyfiles-more.zip$ +^regress/manyfiles-zip64-modulo.zip$ +^regress/manyfiles-zip64.zip$ +^regress/runtest$ +^regress/tryopen$ +^src/hole$ +^src/zipcmp$ +^src/zipmerge$ +^src/ziptool$ +^stamp-h1$ +^test-driver$ +^xcode/libzip\.xcodeproj/project\.xcworkspace/xcuserdata +^xcode/libzip\.xcodeproj/xcuserdata/ +~$ +^.git +^.gitignore +.tar.bz2$ +.tar.gz$ +.tar.xz$ diff --git a/.hgtags b/.hgtags new file mode 100644 index 0000000..0f2335e --- /dev/null +++ b/.hgtags @@ -0,0 +1,21 @@ +e5ac19fb4c5bea4a42ca62c10f6499b7f25538bc rel-0-8 +1c04fdb0f57bbb8e3823eb52b541ca2d8a348fde rel-0-9 +305c067cba3a04d11e95c7cd1e0ae55d662620ee rel-0-9-1 +a523a1da577163bb4255d0f670444964bbf9d43e rel-0-9-2 +a3023e707845ef0d87b9cb33cb3c330afbb5a3c3 rel-0-9-3 +70e00fa4feefae33235b72c072c30c90f76b8204 rel-0-10 +cb69d6146a09acd15af55d27eb7fe910b59dbe60 rel-0-10-1 +20242e19f6b57bdcbdceb98b422e81aef5611db4 rel-0-11 +6aa6fa05cd0bd9adfee8fab32dbacafa687a513b rel-0-11-1 +7ce71a0ca2b3bcd5fbdbef31f2523834d1d697ca rel-0-11-2 +c9d841a87266e0699f19ed2c91a9289e4a999b6e rel-1-0-beta1 +4a0158ebd70ab4f64bf8ec6f351a1c2019f4fb23 rel-1-0 +19018f1628ab3932385b91d20e99d1368a04da3a rel-1-0-1 +b0b4673045e1560293826ab56d8c7e3aa27dbb7a rel-1-1 +ddc1d1fb3194ceed50ca1d8db2cf6f1291ac5629 rel-1-1-1 +8ca6b46cc7510d849000d0058f6c4021d4f15ed1 rel-1-1-2 +61b0bc44c60b904afc594d58348a3c0936528026 rel-1-1-3 +bdc57015a9a903b1ec935295d77e54cb90800b3f brian-gladman-fcrypt-2008-11-18 +aefb3263e2449b0b62095b2e50e9010d073fb670 s +aefb3263e2449b0b62095b2e50e9010d073fb670 s +0000000000000000000000000000000000000000 s diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..bbcbe14 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +language: c +compiler: + - clang + - gcc +os: + - linux + - osx +before_install: + - if [ "$TRAVIS_OS_NAME" != "linux" ]; then + brew update; + brew uninstall libtool; + brew install libtool; + fi +script: + - autoreconf -fiv + - ./configure + - make + - make check diff --git a/CMakeLists.txt b/CMakeLists.txt index d5a23fe..d443757 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,12 +15,13 @@ INCLUDE(CheckTypeSize) INCLUDE(CheckCSourceRuns) INCLUDE(CheckCSourceCompiles) INCLUDE(CheckStructHasMember) +INCLUDE(TestBigEndian) SET(PACKAGE "libzip") SET(PACKAGE_NAME ${PACKAGE}) SET(PACKAGE_VERSION_MAJOR "1") -SET(PACKAGE_VERSION_MINOR "1") -SET(PACKAGE_VERSION_PATCH "3") +SET(PACKAGE_VERSION_MINOR "2") +SET(PACKAGE_VERSION_PATCH "0") #SET(VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}") SET(VERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}") SET(PACKAGE_VERSION ${VERSION}) @@ -37,6 +38,10 @@ CHECK_FUNCTION_EXISTS(_setmode HAVE__SETMODE) CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF) CHECK_FUNCTION_EXISTS(_strdup HAVE__STRDUP) CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP) +CHECK_FUNCTION_EXISTS(_strtoi64 HAVE__STRTOI64) +CHECK_FUNCTION_EXISTS(_strtoui64 HAVE__STRTOUI64) +CHECK_FUNCTION_EXISTS(explict_bzero HAVE_EXPLICIT_BZERO) +CHECK_FUNCTION_EXISTS(explicit_memset HAVE_EXPLICIT_MEMSET) CHECK_FUNCTION_EXISTS(fileno HAVE_FILENO) CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO) CHECK_FUNCTION_EXISTS(ftello HAVE_FTELLO) @@ -48,6 +53,8 @@ CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF) CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP) CHECK_FUNCTION_EXISTS(strdup HAVE_STRDUP) CHECK_FUNCTION_EXISTS(stricmp HAVE_STRICMP) +CHECK_FUNCTION_EXISTS(strtoll HAVE_STRTOLL) +CHECK_FUNCTION_EXISTS(strtoull HAVE_STRTOULL) CHECK_INCLUDE_FILES(fts.h HAVE_FTS_H) CHECK_INCLUDE_FILES(stdbool.h HAVE_STDBOOL_H) @@ -82,6 +89,8 @@ CHECK_TYPE_SIZE("off_t" SIZEOF_OFF_T) CHECK_TYPE_SIZE("size_t" SIZE_T_LIBZIP) CHECK_TYPE_SIZE("ssize_t" SSIZE_T_LIBZIP) +TEST_BIG_ENDIAN(WORDS_BIGENDIAN) + FIND_PACKAGE(ZLIB REQUIRED) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR}) diff --git a/LICENSE b/LICENSE index 8e3a62c..1c2e86b 100644 --- a/LICENSE +++ b/LICENSE @@ -29,3 +29,38 @@ 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. + + + +For AES encryption support, files under the following license are used: + +--------------------------------------------------------------------------- +Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. +All rights reserved. + +LICENSE TERMS + +The free distribution and use of this software in both source and binary +form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + +ALTERNATIVELY, provided that this notice is retained in full, this product +may be distributed under the terms of the GNU General Public License (GPL), +in which case the provisions of the GPL apply INSTEAD OF those given above. + +DISCLAIMER + +This software is provided 'as is' with no explicit or implied warranties +in respect of its properties, including, but not limited to, correctness +and/or fitness for purpose. +--------------------------------------------------------------------------- +Issue Date: 18th November 2008 diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 0911e38..0000000 --- a/Makefile.in +++ /dev/null @@ -1,904 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 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@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -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@ -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ - $(am__configure_deps) $(am__DIST_COMMON) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = libzip.pc libzip-uninstalled.pc -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ - ctags-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 \ - tags-recursive uninstall-recursive -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -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__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(pkgconfigdir)" -DATA = $(pkgconfig_DATA) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -am__recursive_targets = \ - $(RECURSIVE_TARGETS) \ - $(RECURSIVE_CLEAN_TARGETS) \ - $(am__extra_recursive_targets) -AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope distdir dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(srcdir)/libzip-uninstalled.pc.in $(srcdir)/libzip.pc.in \ - AUTHORS INSTALL THANKS compile config.guess config.sub depcomp \ - install-sh ltmain.sh missing -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_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 $(distdir).tar.xz -GZIP_ENV = --best -DIST_TARGETS = dist-xz dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -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@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANFMT = @MANFMT@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -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@ -PKG_CONFIG_RPATH = @PKG_CONFIG_RPATH@ -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_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -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@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -# not GPL, thus no COPYING -AUTOMAKE_OPTIONS = dist-xz foreign -ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = lib man src regress examples -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libzip.pc -EXTRA_DIST = API-CHANGES \ - CMakeLists.txt \ - LICENSE \ - NEWS.md \ - README.md \ - TODO.md \ - cmake-config.h.in \ - cmake-zipconf.h.in \ - libzip-uninstalled.pc.in \ - libzip.pc.in \ - m4 - -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: Makefile - @: -$(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 -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): - -config.h: stamp-h1 - @test -f $@ || rm -f stamp-h1 - @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -libzip.pc: $(top_builddir)/config.status $(srcdir)/libzip.pc.in - cd $(top_builddir) && $(SHELL) ./config.status $@ -libzip-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/libzip-uninstalled.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 -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ - fi; \ - 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_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) - -# 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. -$(am__recursive_targets): - @fail=; \ - if $(am__make_keepgoing); then \ - failcom='fail=yes'; \ - else \ - failcom='exit 1'; \ - fi; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - 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" - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-recursive -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - 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; \ - $(am__define_uniq_tagged_files); \ - 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-recursive - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - 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" -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) -clean-cscope: - -rm -f cscope.files -cscope.files: clean-cscope cscopelist -cscopelist: cscopelist-recursive - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -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 \ - $(am__make_dryrun) \ - || test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - 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 - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -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__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - @echo WARNING: "Support for distribution archives compressed with" \ - "legacy program 'compress' is deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - @echo WARNING: "Support for shar distribution archives is" \ - "deprecated." >&2 - @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_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.lz*) \ - lzip -dc $(distdir).tar.lz | $(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 u+w $(distdir) - mkdir $(distdir)/_build $(distdir)/_build/sub $(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/sub \ - && ../../configure \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - --srcdir=../.. --prefix="$$dc_install_base" \ - && $(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__post_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: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { 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 $(DATA) config.h -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -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: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -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 $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: install-pkgconfigDATA - -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: uninstall-pkgconfigDATA - -.MAKE: $(am__recursive_targets) all install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ - am--refresh check check-am clean clean-cscope clean-generic \ - clean-libtool cscope cscopelist-am ctags ctags-am dist \ - dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ - dist-tarZ dist-xz dist-zip distcheck distclean \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck 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-pkgconfigDATA 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-am uninstall uninstall-am \ - uninstall-pkgconfigDATA - -.PRECIOUS: Makefile - - -dist-hook: - mkdir $(distdir)/xcode - mkdir $(distdir)/xcode/libzip.xcodeproj - mkdir $(distdir)/xcode/libzip.xcodeproj/project.xcworkspace - cp -p $(srcdir)/xcode/Info.plist \ - $(srcdir)/xcode/config.h \ - $(srcdir)/xcode/extract-version.sh \ - $(srcdir)/xcode/zipconf.h $(distdir)/xcode - cp -p $(srcdir)/xcode/libzip.xcodeproj/project.pbxproj $(distdir)/xcode/libzip.xcodeproj - cp -p $(srcdir)/xcode/libzip.xcodeproj/project.xcworkspace/contents.xcworkspacedata \ - $(distdir)/xcode/libzip.xcodeproj/project.xcworkspace - -# 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/NEWS.md b/NEWS.md index c915ce6..97bf2de 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,14 @@ +1.2.0 [2017-02-19] +================== + +* Support for AES encryption (Winzip version), both encryption + and decryption. +* Support legacy zip files with >64k entries. +* Fix seeking in zip_source_file if start > 0. +* Add zip_fseek() for seeking in uncompressed data. +* Add zip_ftell() for telling position in uncompressed data. +* Add zip_register_progress_callback() for UI updates during zip_close() + 1.1.3 [2016-05-28] ================== diff --git a/README-snapshot.md b/README-snapshot.md new file mode 100644 index 0000000..f38d66c --- /dev/null +++ b/README-snapshot.md @@ -0,0 +1,7 @@ +To build libzip from the repository using autotools, you need to +install autoconf, automake, and libtool; then run +> autoreconf -fi + +Afterwards you can run configure as usual. + +Alternatively, use cmake. diff --git a/README.md b/README.md index cc527f5..e5bb5d8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ This is libzip, a C library for reading, creating, and modifying zip -archives. Files can be added from data buffers, files, or compressed -data copied directly from other zip archives. Changes made without -closing the archive can be reverted. The API is documented by man -pages. +archives. Files can be added from data buffers, files, or compressed +data copied directly from other zip archives. Changes made without +closing the archive can be reverted. Decryption and encryption of +Winzip AES and decryption of legacy PKware encrypted files is +supported. The API is documented by man pages. For more information, take a look at the included man pages. You can start with [libzip(3)](http://nih.at/libzip/libzip.html), which lists @@ -37,3 +38,4 @@ to libzip-discuss at nih.at. Use this for bug reports or questions. If you want to reach the authors in private, use . ![Travis Build Status](https://api.travis-ci.org/nih-at/libzip.svg?branch=master) +![Coverity Status](https://scan.coverity.com/projects/127/badge.svg?flat=1) diff --git a/THANKS b/THANKS index 10b237a..be0cca9 100644 --- a/THANKS +++ b/THANKS @@ -9,6 +9,7 @@ Andrew Brampton Andrew Molyneux Ankur Kothari BALATON Zoltan +Benjamin Gilbert Boaz Stolk Bogdan Chris Nehren @@ -19,8 +20,11 @@ Del Merritt Dmytro Rybachenko François Simon Frederik Ramm +Hanno Böck Heiko Hund +Info-ZIP group Jan Weiß +Jay Freeman (saurik) Joel Ebrahimi Jono Spiro Keith Jones @@ -29,6 +33,7 @@ Leith Bade Lubomir I. Ivanov Martin Buchholz Martin Szulecki +Michael Beck Michal Vyskocil Mikhail Gusarov . Oliver Kaiser @@ -44,6 +49,7 @@ Rick Carback Robert Norris Roberto Tirabassi Roland Ortloff +Sergei Ozerov Simon Talbot Stephen Bryant Tarmo Pikaro diff --git a/TODO.md b/TODO.md index 3fe55e1..5cdb79c 100644 --- a/TODO.md +++ b/TODO.md @@ -1,13 +1,5 @@ # API Plans -## Encryption - -````c -struct zip *zip_open_encrypted(const char *path, int flags, const char *password, int *errorp); -int zip_set_encryption(struct zip *archive, zip_uint64_t idx, zip_uint16_t method, const char *password); -void zip_set_archive_encryption(struct zip *archive, zip_uint16_t method, const char *password); -```` - ## Prefixes For example for adding extractors for self-extracting zip archives. @@ -16,15 +8,6 @@ zip_set_archive_prefix(struct zip *za, const zip_uint8_t *data, zip_uint64_t len const zip_uint8_t *zip_get_archive_prefix(struct zip *za, zip_uint64_t *lengthp); ```` -## Progress Callback - -Register callback; will be called from `zip_close()` after each file has been processed. - -````c -typedef void (*zip_progress_callback_t)(double); -void zip_register_progress_callback(zip_t *, zip_progress_callback_t); -```` - # API Issues * `zip_get_archive_comment` has `int *lenp` argument. Cleaner would be `zip_uint32_t *`. @@ -36,6 +19,14 @@ void zip_register_progress_callback(zip_t *, zip_progress_callback_t); # Features +* Winzip AES support + * test cases decryption: <=20, >20, stat for both + * test cases encryption: no password, default password, file-specific password, 128/192/256, <=20, >20 + * support testing on Linux + * support testing on macOS +* xz support +* consistently use `_zip_crypto_clear()` for passwords +* implement compression flags for `zip_set_file_compression()` * support setting extra fields from zip_source * introduce layers of extra fields: * original @@ -87,7 +78,6 @@ void zip_register_progress_callback(zip_t *, zip_progress_callback_t); * use bool * use `ZIP_SOURCE_SUPPORTS_{READABLE,SEEKABLE,WRITABLE}` * use `zip_source_seek_compute_offset()` -* move compat refs from `zipint.h` to own file, and include that in `zipint.h` and `src` * get rid of `zip_get_{compression,encryption}_implementation()` * use `zip_*int*_t` internally @@ -160,8 +150,6 @@ void zip_register_progress_callback(zip_t *, zip_progress_callback_t); * `zip_source_file()`: don't allow write if start/len specify a part of the file * script to check if all exported symbols are marked with `ZIP_EXTERN`, add to make distcheck -* re-implement fix for OS X sandboxing (`zip_archive_set_tempdir()`). - * document: `zip_source_write()`: length can't be > `ZIP_INT64_MAX` * document: `ZIP_SOURCE_CLOSE` implementation can't return error * keep error codes in man pages in sync diff --git a/aclocal.m4 b/aclocal.m4 deleted file mode 100644 index cc09712..0000000 --- a/aclocal.m4 +++ /dev/null @@ -1,1158 +0,0 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- - -# Copyright (C) 1996-2014 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. -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'.])]) - -# Copyright (C) 2002-2014 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.15' -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.15], [], - [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.15])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-2014 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], -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2014 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_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$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-2014 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. - - -# 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", "OBJC", "OBJCXX", "UPC", or "GJC". -# 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 - -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" 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". - rm -rf conftest.dir - 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 10 /bin/sh. - echo '/* dummy */' > 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 - ;; - msvc7 | msvc7msys | 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], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -AC_SUBST([am__nodep])dnl -_AM_SUBST_NOTMAKE([am__nodep])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999-2014 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_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Older Autoconf 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"` - # 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'`; 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-2014 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 macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. -m4_define([AC_PROG_CC], -m4_defn([AC_PROG_CC]) -[_AM_PROG_CC_C_O -]) - -# 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.65])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], -[AC_DIAGNOSE([obsolete], - [$0: two- and three-arguments forms are deprecated.]) -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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, - [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([AC_PROG_MKDIR_P])dnl -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -AC_SUBST([mkdir_p], ['$(MKDIR_P)']) -# We need awk for the "check" target (and possibly the TAP driver). 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])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl -]) -AC_REQUIRE([AM_SILENT_RULES])dnl -dnl The testsuite driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This -dnl macro 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 - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) - fi -fi -dnl The trailing newline in this macro's definition is deliberate, for -dnl backward compatibility and to allow trailing 'dnl'-style comments -dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. -]) - -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-2014 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+set}" != 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-2014 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. - -# 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-2014 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_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-2014 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_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 is modern enough. -# If it is, 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 --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) -fi -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2014 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_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])]) - -# Copyright (C) 1999-2014 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_CC_C_O -# --------------- -# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC -# to automatically call this. -AC_DEFUN([_AM_PROG_CC_C_O], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([compile])dnl -AC_LANG_PUSH([C])dnl -AC_CACHE_CHECK( - [whether $CC understands -c and -o together], - [am_cv_prog_cc_c_o], - [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i]) -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -fi -AC_LANG_POP([C])]) - -# For backward compatibility. -AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) - -# Copyright (C) 2001-2014 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_RUN_LOG(COMMAND) -# ------------------- -# Run COMMAND, save the exit status in ac_status, and log it. -# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) -AC_DEFUN([AM_RUN_LOG], -[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD - ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - (exit $ac_status); }]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996-2014 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_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# 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 ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - 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 - 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 - if test "$[2]" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - 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]) -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) - -# Copyright (C) 2009-2014 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_SILENT_RULES([DEFAULT]) -# -------------------------- -# Enable less verbose build rules; with the default set to DEFAULT -# ("yes" being less verbose, "no" or empty being verbose). -AC_DEFUN([AM_SILENT_RULES], -[AC_ARG_ENABLE([silent-rules], [dnl -AS_HELP_STRING( - [--enable-silent-rules], - [less verbose build output (undo: "make V=1")]) -AS_HELP_STRING( - [--disable-silent-rules], - [verbose build output (undo: "make V=0")])dnl -]) -case $enable_silent_rules in @%:@ ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; -esac -dnl -dnl A few 'make' implementations (e.g., NonStop OS and NextStep) -dnl do not support nested variable expansions. -dnl See automake bug#9928 and bug#10237. -am_make=${MAKE-make} -AC_CACHE_CHECK([whether $am_make supports nested variables], - [am_cv_make_support_nested_variables], - [if AS_ECHO([['TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi]) -if test $am_cv_make_support_nested_variables = yes; then - dnl Using '$V' instead of '$(V)' breaks IRIX make. - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AC_SUBST([AM_V])dnl -AM_SUBST_NOTMAKE([AM_V])dnl -AC_SUBST([AM_DEFAULT_V])dnl -AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl -AC_SUBST([AM_DEFAULT_VERBOSITY])dnl -AM_BACKSLASH='\' -AC_SUBST([AM_BACKSLASH])dnl -_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl -]) - -# Copyright (C) 2001-2014 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-2014 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_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-2014 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_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. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AC_SUBST([AMTAR], ['$${TAR-tar}']) - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' - -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - - [m4_case([$1], - [ustar], - [# The POSIX 1988 'ustar' format is defined with fixed-size fields. - # There is notably a 21 bits limit for the UID and the GID. In fact, - # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 - # and bug#13588). - am_max_uid=2097151 # 2^21 - 1 - am_max_gid=$am_max_uid - # The $UID and $GID variables are not portable, so we need to resort - # to the POSIX-mandated id(1) utility. Errors in the 'id' calls - # below are definitely unexpected, so allow the users to see them - # (that is, avoid stderr redirection). - am_uid=`id -u || echo unknown` - am_gid=`id -g || echo unknown` - AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) - if test $am_uid -le $am_max_uid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi - AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) - if test $am_gid -le $am_max_gid; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - _am_tools=none - fi], - - [pax], - [], - - [m4_fatal([Unknown tar format])]) - - AC_MSG_CHECKING([how to create a $1 tar archive]) - - # Go ahead even if we have the value already cached. We do so because we - # need to set the values for the 'am__tar' and 'am__untar' variables. - _am_tools=${am_cv_prog_tar_$1-$_am_tools} - - 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 - -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) -m4_include([m4/visibility.m4]) diff --git a/cmake-config.h.in b/cmake-config.h.in index a01be5d..2260362 100644 --- a/cmake-config.h.in +++ b/cmake-config.h.in @@ -14,6 +14,8 @@ #cmakedefine HAVE__SNPRINTF #cmakedefine HAVE__STRDUP #cmakedefine HAVE__STRICMP +#cmakedefine HAVE__STRTOI64 +#cmakedefine HAVE__STRTOUI64 #cmakedefine HAVE_FILENO #cmakedefine HAVE_FSEEKO #cmakedefine HAVE_FTELLO @@ -26,6 +28,8 @@ #cmakedefine HAVE_STRCASECMP #cmakedefine HAVE_STRDUP #cmakedefine HAVE_STRICMP +#cmakedefine HAVE_STRTOLL +#cmakedefine HAVE_STRTOULL #cmakedefine HAVE_STRUCT_TM_TM_ZONE #cmakedefine HAVE_STDBOOL_H #cmakedefine HAVE_STRINGS_H @@ -49,6 +53,7 @@ #cmakedefine HAVE_NDIR_H #cmakedefine HAVE_SYS_DIR_H #cmakedefine HAVE_SYS_NDIR_H +#cmakedefine WORDS_BIGENDIAN /* END DEFINES */ #define PACKAGE "@PACKAGE@" #define VERSION "@VERSION@" diff --git a/compile b/compile deleted file mode 100755 index a85b723..0000000 --- a/compile +++ /dev/null @@ -1,347 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand '-c -o'. - -scriptversion=2012-10-14.11; # UTC - -# Copyright (C) 1999-2014 Free Software Foundation, Inc. -# Written by Tom Tromey . -# -# 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. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' - -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent tools from complaining about whitespace usage. -IFS=" "" $nl" - -file_conv= - -# func_file_conv build_file lazy -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. If the determined conversion -# type is listed in (the comma separated) LAZY, no conversion will -# take place. -func_file_conv () -{ - file=$1 - case $file in - / | /[!/]*) # absolute file, and not a UNC file - if test -z "$file_conv"; then - # lazily determine how to convert abs files - case `uname -s` in - MINGW*) - file_conv=mingw - ;; - CYGWIN*) - file_conv=cygwin - ;; - *) - file_conv=wine - ;; - esac - fi - case $file_conv/,$2, in - *,$file_conv,*) - ;; - mingw/*) - file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` - ;; - cygwin/*) - file=`cygpath -m "$file" || echo "$file"` - ;; - wine/*) - file=`winepath -w "$file" || echo "$file"` - ;; - esac - ;; - esac -} - -# func_cl_dashL linkdir -# Make cl look for libraries in LINKDIR -func_cl_dashL () -{ - func_file_conv "$1" - if test -z "$lib_path"; then - lib_path=$file - else - lib_path="$lib_path;$file" - fi - linker_opts="$linker_opts -LIBPATH:$file" -} - -# func_cl_dashl library -# Do a library search-path lookup for cl -func_cl_dashl () -{ - lib=$1 - found=no - save_IFS=$IFS - IFS=';' - for dir in $lib_path $LIB - do - IFS=$save_IFS - if $shared && test -f "$dir/$lib.dll.lib"; then - found=yes - lib=$dir/$lib.dll.lib - break - fi - if test -f "$dir/$lib.lib"; then - found=yes - lib=$dir/$lib.lib - break - fi - if test -f "$dir/lib$lib.a"; then - found=yes - lib=$dir/lib$lib.a - break - fi - done - IFS=$save_IFS - - if test "$found" != yes; then - lib=$lib.lib - fi -} - -# func_cl_wrapper cl arg... -# Adjust compile command to suit cl -func_cl_wrapper () -{ - # Assume a capable shell - lib_path= - shared=: - linker_opts= - for arg - do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - eat=1 - case $2 in - *.o | *.[oO][bB][jJ]) - func_file_conv "$2" - set x "$@" -Fo"$file" - shift - ;; - *) - func_file_conv "$2" - set x "$@" -Fe"$file" - shift - ;; - esac - ;; - -I) - eat=1 - func_file_conv "$2" mingw - set x "$@" -I"$file" - shift - ;; - -I*) - func_file_conv "${1#-I}" mingw - set x "$@" -I"$file" - shift - ;; - -l) - eat=1 - func_cl_dashl "$2" - set x "$@" "$lib" - shift - ;; - -l*) - func_cl_dashl "${1#-l}" - set x "$@" "$lib" - shift - ;; - -L) - eat=1 - func_cl_dashL "$2" - ;; - -L*) - func_cl_dashL "${1#-L}" - ;; - -static) - shared=false - ;; - -Wl,*) - arg=${1#-Wl,} - save_ifs="$IFS"; IFS=',' - for flag in $arg; do - IFS="$save_ifs" - linker_opts="$linker_opts $flag" - done - IFS="$save_ifs" - ;; - -Xlinker) - eat=1 - linker_opts="$linker_opts $2" - ;; - -*) - set x "$@" "$1" - shift - ;; - *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) - func_file_conv "$1" - set x "$@" -Tp"$file" - shift - ;; - *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) - func_file_conv "$1" mingw - set x "$@" "$file" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift - done - if test -n "$linker_opts"; then - linker_opts="-link$linker_opts" - fi - exec "$@" $linker_opts - exit 1 -} - -eat= - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand '-c -o'. -Remove '-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file 'INSTALL'. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "compile $scriptversion" - exit $? - ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) - func_cl_wrapper "$@" # Doesn't return... - ;; -esac - -ofile= -cfile= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - # So we strip '-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no '-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # '.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` - -# Create the lock directory. -# Note: use '[/\\:.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - test "$cofile" = "$ofile" || mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# 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/config.guess b/config.guess deleted file mode 100755 index f7eb141..0000000 --- a/config.guess +++ /dev/null @@ -1,1438 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright 1992-2015 Free Software Foundation, Inc. - -timestamp='2015-03-04' - -# 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 3 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, 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. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). -# -# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. -# -# 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 -# -# Please send patches to . - - -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 1992-2015 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 - -case "${UNAME_SYSTEM}" in -Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu - - eval $set_cc_for_build - cat <<-EOF > $dummy.c - #include - #if defined(__UCLIBC__) - LIBC=uclibc - #elif defined(__dietlibc__) - LIBC=dietlibc - #else - LIBC=gnu - #endif - EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` - ;; -esac - -# 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 tuples: *-*-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=`(uname -p 2>/dev/null || \ - /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 ;; - earmv*) - arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` - machine=${arch}${endian}-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*|earm*|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 - # Determine ABI tags. - case "${UNAME_MACHINE_ARCH}" in - earm*) - expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` - ;; - 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}${abi}" - exit ;; - *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - 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:*:[4567]) - 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/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | - awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` - 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:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - 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-${LIBC}`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/[-(].*//'`-${LIBC} - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - aarch64_be:Linux:*:*) - UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - 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="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${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-${LIBC} - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi - else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - e2k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - 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-${LIBC}"; exit; } - ;; - openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} - exit ;; - or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} - 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-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} - exit ;; - ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} - exit ;; - ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} - exit ;; - x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - 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 ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-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 - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc - fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - 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 - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - fi - elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 - fi - 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 ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - 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 ;; - x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - exit ;; -esac - -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/config.h.in b/config.h.in deleted file mode 100644 index 87661aa..0000000 --- a/config.h.in +++ /dev/null @@ -1,229 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. - */ -#undef HAVE_DECL_TZNAME - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the `fileno' function. */ -#undef HAVE_FILENO - -/* Define to 1 if you have the `fseeko' function. */ -#undef HAVE_FSEEKO - -/* Define to 1 if you have the `ftello' function. */ -#undef HAVE_FTELLO - -/* Define to 1 if you have the header file. */ -#undef HAVE_FTS_H - -/* Define to 1 if you have the `getopt' function. */ -#undef HAVE_GETOPT - -/* Define to 1 if you have the `getprogname' function. */ -#undef HAVE_GETPROGNAME - -/* Define to 1 if the system has the type `int16_t'. */ -#undef HAVE_INT16_T - -/* Define to 1 if the system has the type `int32_t'. */ -#undef HAVE_INT32_T - -/* Define to 1 if the system has the type `int64_t'. */ -#undef HAVE_INT64_T - -/* Define to 1 if the system has the type `int8_t'. */ -#undef HAVE_INT8_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `z' library (-lz). */ -#undef HAVE_LIBZ - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the `mkstemp' function. */ -#undef HAVE_MKSTEMP - -/* Define to 1 if you have the `open' function. */ -#undef HAVE_OPEN - -/* Define to 1 if you have the `setmode' function. */ -#undef HAVE_SETMODE - -/* Define to 1 if you have the `snprintf' function. */ -#undef HAVE_SNPRINTF - -/* Define to 1 if the system has the type `ssize_t'. */ -#undef HAVE_SSIZE_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDBOOL_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 `strcasecmp' function. */ -#undef HAVE_STRCASECMP - -/* Define to 1 if you have the `strdup' function. */ -#undef HAVE_STRDUP - -/* Define to 1 if you have the `stricmp' function. */ -#undef HAVE_STRICMP - -/* 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 `tm_zone' is a member of `struct tm'. */ -#undef HAVE_STRUCT_TM_TM_ZONE - -/* 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 your `struct tm' has `tm_zone'. Deprecated, use - `HAVE_STRUCT_TM_TM_ZONE' instead. */ -#undef HAVE_TM_ZONE - -/* Define to 1 if you don't have `tm_zone' but do have the external array - `tzname'. */ -#undef HAVE_TZNAME - -/* Define to 1 if the system has the type `uint16_t'. */ -#undef HAVE_UINT16_T - -/* Define to 1 if the system has the type `uint32_t'. */ -#undef HAVE_UINT32_T - -/* Define to 1 if the system has the type `uint64_t'. */ -#undef HAVE_UINT64_T - -/* Define to 1 if the system has the type `uint8_t'. */ -#undef HAVE_UINT8_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 or 0, depending whether the compiler supports simple visibility - declarations. */ -#undef HAVE_VISIBILITY - -/* Define to 1 if you have the `_close' function. */ -#undef HAVE__CLOSE - -/* Define to 1 if you have the `_dup' function. */ -#undef HAVE__DUP - -/* Define to 1 if you have the `_fdopen' function. */ -#undef HAVE__FDOPEN - -/* Define to 1 if you have the `_fileno' function. */ -#undef HAVE__FILENO - -/* Define to 1 if you have the `_open' function. */ -#undef HAVE__OPEN - -/* Define to 1 if you have the `_setmode' function. */ -#undef HAVE__SETMODE - -/* Define to 1 if you have the `_snprintf' function. */ -#undef HAVE__SNPRINTF - -/* Define to 1 if you have the `_strdup' function. */ -#undef HAVE__STRDUP - -/* Define to 1 if you have the `_stricmp' function. */ -#undef HAVE__STRICMP - -/* Define if libc defines __progname */ -#undef HAVE___PROGNAME - -/* 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 - -/* The size of `int', as computed by sizeof. */ -#undef SIZEOF_INT - -/* The size of `long', as computed by sizeof. */ -#undef SIZEOF_LONG - -/* The size of `long long', as computed by sizeof. */ -#undef SIZEOF_LONG_LONG - -/* The size of `off_t', as computed by sizeof. */ -#undef SIZEOF_OFF_T - -/* The size of `short', as computed by sizeof. */ -#undef SIZEOF_SHORT - -/* The size of `size_t', as computed by sizeof. */ -#undef SIZEOF_SIZE_T - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define to 1 if your declares `struct tm'. */ -#undef TM_IN_SYS_TIME - -/* Version number of package */ -#undef VERSION - -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES - - -#ifndef HAVE_SSIZE_T -# if SIZEOF_SIZE_T == SIZEOF_INT -typedef int ssize_t; -# elif SIZEOF_SIZE_T == SIZEOF_LONG -typedef long ssize_t; -# elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG -typedef long long ssize_t; -# else -#error no suitable type for ssize_t found -# endif -#endif - diff --git a/config.sub b/config.sub deleted file mode 100755 index 8f1229c..0000000 --- a/config.sub +++ /dev/null @@ -1,1810 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright 1992-2015 Free Software Foundation, Inc. - -timestamp='2015-03-08' - -# 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 3 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, 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. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). - - -# Please send patches to . -# -# 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 1992-2015 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-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - 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*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -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 \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | 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 \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | 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 \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-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-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | 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-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | rl78-* | 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-* | sv1-* | sx?-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | 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 - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - 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 - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - 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 | 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*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 - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` - ;; - 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 - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-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 - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - 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 - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - 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 | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - 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 | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - 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 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - 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 - ;; - tile*) - basic_machine=$basic_machine-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 - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - 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* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* | -cloudabi* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -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* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -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* | -tirtos*) - # 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 - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -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 - ;; - c8051-*) - os=-elf - ;; - hexagon-*) - os=-elf - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - 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 - ;; - 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/configure b/configure deleted file mode 100755 index d784df7..0000000 --- a/configure +++ /dev/null @@ -1,15033 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libzip 1.1.3. -# -# Report bugs to . -# -# -# Copyright (C) 1992-1996, 1998-2012 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 - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # 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 -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+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -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 -test -x / || 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 -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 -test \$(( 1 + 1 )) = 2 || 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 : - export CONFIG_SHELL - # 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 -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+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -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 libzip@nih.at -$0: about your system, including any error possibly output -$0: before this message. Then install a modern shell, or -$0: manually run the script under such a shell if you do -$0: 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_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_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; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # 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 -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -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 - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# 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='libzip' -PACKAGE_TARNAME='libzip' -PACKAGE_VERSION='1.1.3' -PACKAGE_STRING='libzip 1.1.3' -PACKAGE_BUGREPORT='libzip@nih.at' -PACKAGE_URL='' - -ac_unique_file="lib/zip_add.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 -HAVE_VISIBILITY -CFLAG_VISIBILITY -MANFMT -WIN32_HOST_FALSE -WIN32_HOST_TRUE -LIBOBJS -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -ac_ct_AR -AR -DLLTOOL -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -LIBTOOL -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -PKG_CONFIG_RPATH -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -AM_BACKSLASH -AM_DEFAULT_VERBOSITY -AM_DEFAULT_V -AM_V -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_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_silent_rules -enable_dependency_tracking -enable_largefile -with_zlib -enable_shared -enable_static -with_pic -enable_fast_install -with_gnu_ld -with_sysroot -enable_libtool_lock -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# 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 - 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 libzip 1.1.3 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/libzip] - --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] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of libzip 1.1.3:";; - 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] - --enable-silent-rules less verbose build output (undo: "make V=1") - --disable-silent-rules verbose build output (undo: "make V=0") - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --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) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-zlib=PREFIX specify prefix for ZLIB library - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). - -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 - CPP 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 . -_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 -libzip configure 1.1.3 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 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_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 || - 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_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 libzip@nih.at ## -## ---------------------------- ##" - ) | 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 - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - 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 - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=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 -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_type - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main () -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$4=yes" -else - eval "$4=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 -eval ac_res=\$$4 - { $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_member - -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_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_decl -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 libzip $as_me 1.1.3, which was -generated by GNU Autoconf 2.69. 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 config.h" - - -am__api_version='1.15' - -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. - - -# 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 as_fn_executable_p "$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; } -# 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 ( - am_has_slept=no - for am_try in 1 2; do - echo "timestamp, slept: $am_has_slept" > conftest.file - 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 - 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 - if test "$2" = conftest.file || test $am_try -eq 2; then - break - fi - # Just in case. - sleep 1 - am_has_slept=yes - done - 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; } -# If we didn't sleep, we still need to ensure time stamps of config.status and -# generated files are strictly newer. -am_sleep_pid= -if grep 'slept: no' conftest.file >/dev/null 2>&1; then - ( sleep 1 ) & - am_sleep_pid=$! -fi - -rm -f conftest.file - -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 --is-lightweight"; then - am_missing_run="$MISSING " -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+set}" != 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 as_fn_executable_p "$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 as_fn_executable_p "$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 - as_fn_executable_p "$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; } - -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 as_fn_executable_p "$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 - -# Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : - enableval=$enable_silent_rules; -fi - -case $enable_silent_rules in # ((( - yes) AM_DEFAULT_VERBOSITY=0;; - no) AM_DEFAULT_VERBOSITY=1;; - *) AM_DEFAULT_VERBOSITY=1;; -esac -am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) -BAR0=false -BAR1=true -V=1 -am__doit: - @$(TRUE) -.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then - am_cv_make_support_nested_variables=yes -else - am_cv_make_support_nested_variables=no -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } -if test $am_cv_make_support_nested_variables = yes; then - AM_V='$(V)' - AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' -else - AM_V=$AM_DEFAULT_VERBOSITY - AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY -fi -AM_BACKSLASH='\' - -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='libzip' - VERSION='1.1.3' - - -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"} - -# For better backward compatibility. To be removed once Automake 1.9.x -# dies out for good. For more background, see: -# -# -mkdir_p='$(MKDIR_P)' - -# We need awk for the "check" target (and possibly the TAP driver). The -# system "awk" is bad on some platforms. -# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AMTAR='$${TAR-tar}' - - -# We'll loop over all known methods to create a tar archive until one works. -_am_tools='gnutar pax cpio none' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' - - - - - - -# POSIX will say in a future version that running "rm -f" with no argument -# is OK; and we want to be able to make that assumption in our Makefile -# recipes. So use an aggressive probe to check that the usage we want is -# actually supported "in the wild" to an acceptable degree. -# See automake bug#10828. -# To make any issue more visible, cause the running configure to be aborted -# by default if the 'rm' program in use doesn't match our expectations; the -# user can still override this though. -if rm -f && rm -fr && rm -rf; then : OK; else - cat >&2 <<'END' -Oops! - -Your 'rm' program seems unable to run without file operands specified -on the command line, even when the '-f' option is present. This is contrary -to the behaviour of most rm programs out there, and not conforming with -the upcoming POSIX standard: - -Please tell bug-automake@gnu.org about your system, including the value -of your $PATH and any error possibly output before this message. This -can help us improve future automake versions. - -END - if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then - echo 'Configuration will proceed anyway, since you have set the' >&2 - echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 - echo >&2 - else - cat >&2 <<'END' -Aborting the configuration process, to ensure you take notice of the issue. - -You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . - -If you want to complete the configuration process using your problematic -'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM -to "yes", and re-run configure. - -END - as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 - fi -fi - - -# 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 - - -case $host_os in - *bsd*) - PKG_CONFIG_RPATH=-Wl,-R\${libdir};; - *) - PKG_CONFIG_RPATH=;; -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 -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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 -struct stat; -/* 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 - -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 whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF - # Make sure it works both with $CC and with simple cc. - # Following AC_PROG_CC_C_O, we do the test twice because some - # compilers refuse to overwrite an existing .o file with -o, - # though they will create one. - am_cv_prog_cc_c_o=yes - for am_i in 1 2; do - if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 - ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } \ - && test -f conftest2.$ac_objext; then - : OK - else - am_cv_prog_cc_c_o=no - break - fi - done - rm -f core conftest* - unset am_i -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } -if test "$am_cv_prog_cc_c_o" != yes; then - # Losing compiler, so override with the script. - # FIXME: It is wrong to rewrite CC. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__CC in this case, - # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" - CC="$am_aux_dir/compile $CC" -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='\' - am__nodep='_no' -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". - rm -rf conftest.dir - 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 10 /bin/sh. - echo '/* dummy */' > 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 - ;; - msvc7 | msvc7msys | 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 - - - -# 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 - - - - -# Check whether --with-zlib was given. -if test "${with_zlib+set}" = set; then : - withval=$with_zlib; -else - with_zlib=yes -fi - - -if test "$with_zlib" != "yes" -then - if test -f "$with_zlib"/zlib.h - then - # PREFIX is to uninstalled version in distribution directory - CFLAGS="$CFLAGS -I$with_zlib" - LDFLAGS="$LDFLAGS -L$with_zlib" - else if test -f "$with_zlib"/include/zlib.h - then - # PREFIX is installation prefix - CFLAGS="$CFLAGS -I$with_zlib/include" - LDFLAGS="$LDFLAGS -L$with_zlib/lib" - fi - fi -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lz" >&5 -$as_echo_n "checking for main in -lz... " >&6; } -if ${ac_cv_lib_z_main+:} 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. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_z_main=yes -else - ac_cv_lib_z_main=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_main" >&5 -$as_echo "$ac_cv_lib_z_main" >&6; } -if test "x$ac_cv_lib_z_main" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBZ 1 -_ACEOF - - LIBS="-lz $LIBS" - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking new ZLIB version" >&5 -$as_echo_n "checking new ZLIB version... " >&6; } -if ${id_cv_lib_zlib_ok+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -extern ZEXPORT int unzOpen (const char *path); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - id_cv_lib_zlib_ok=yes -else - id_cv_lib_zlib_ok=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $id_cv_lib_zlib_ok" >&5 -$as_echo "$id_cv_lib_zlib_ok" >&6; } -if test "$id_cv_lib_zlib_ok" = "no" -then - as_fn_error $? "ZLIB version too old, please install at least v1.1.2" "$LINENO" 5 -fi - - - -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.4.2' -macro_revision='1.3337' - - - - - - - - - - - - - -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" - as_fn_executable_p "$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" - as_fn_executable_p "$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" - as_fn_executable_p "$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" - as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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; } - -{ $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 - -# 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 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - 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"`env 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%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && 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 how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $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 - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - 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 as_fn_executable_p "$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 as_fn_executable_p "$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 glibc/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_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -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}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 as_fn_executable_p "$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 as_fn_executable_p "$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 - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - 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_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$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 -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 - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -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_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$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_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 - - - test -n "$ac_ct_AR" && break -done - - 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 -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_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};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /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 - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # 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 -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#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. */ -LT_DLSYM_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_globsym_save_LIBS=$LIBS - lt_globsym_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_globsym_save_LIBS - CFLAGS=$lt_globsym_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 - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - -# 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 - ;; -*-*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*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - 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" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; 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_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $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 -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; 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_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - 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 - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi - - - - - - - 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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 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 -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; 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 - - - enable_win32_dll=no - - - # 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 - - - - - - - - - - # 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; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -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* - - -## 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... -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= - - - 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 ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - 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' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - 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\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # 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\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - 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}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# 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_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/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - 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=' $pic_flag' - 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='${wl}-rpath ${wl}$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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $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. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - } - }' - lt_cv_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 "$lt_cv_aix_libpath_"; then - lt_cv_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 "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -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. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - } - }' - lt_cv_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 "$lt_cv_aix_libpath_"; then - lt_cv_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 "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -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. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - 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' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - 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 - ;; - - # 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 $pic_flag -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 $pic_flag ${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 $pic_flag ${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_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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag ${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 $pic_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' - # 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. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=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_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_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 ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - 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} $pic_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 $pic_flag ${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 $pic_flag ${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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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,$cc_basename in - yes,*) - # gcc - 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 - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # 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' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # 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 # correct to gnu/linux during the next big refactor - 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 - ;; - -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[23].*) 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 # correct to gnu/linux during the next big refactor - 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 - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 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)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 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" - - - - - - - - - - - - - - - - ac_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - - -for ac_func in _close _dup _fdopen _fileno _open _setmode _snprintf _strdup _stricmp fileno fseeko ftello getopt getprogname open setmode snprintf strcasecmp strdup stricmp -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -for ac_func in mkstemp -do : - ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" -if test "x$ac_cv_func_mkstemp" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MKSTEMP 1 -_ACEOF - -else - case " $LIBOBJS " in - *" mkstemp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" - ;; -esac - -fi -done - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if libc defines __progname" >&5 -$as_echo_n "checking if libc defines __progname... " >&6; } -if ${ac_cv_libc_defines___progname+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - extern char *__progname; printf("%s", __progname); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_libc_defines___progname="yes" -else - ac_cv_libc_defines___progname="no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libc_defines___progname" >&5 -$as_echo "$ac_cv_libc_defines___progname" >&6; } -if test "x$ac_cv_libc_defines___progname" = "xyes" ; then - -$as_echo "#define HAVE___PROGNAME 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are building for a Win32 host" >&5 -$as_echo_n "checking whether we are building for a Win32 host... " >&6; } -if ${ac_cv_win32_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef _WIN32 - choke me - #endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_win32_host=no -else - ac_cv_win32_host=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_win32_host" >&5 -$as_echo "$ac_cv_win32_host" >&6; } - if test "x$ac_cv_win32_host" = "xyes"; then - WIN32_HOST_TRUE= - WIN32_HOST_FALSE='#' -else - WIN32_HOST_TRUE='#' - WIN32_HOST_FALSE= -fi - - -for ac_header in fts.h stdbool.h strings.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$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 - - -ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" -if test "x$ac_cv_type_int8_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INT8_T 1 -_ACEOF - - -fi - -ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default" -if test "x$ac_cv_type_int16_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INT16_T 1 -_ACEOF - - -fi - -ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default" -if test "x$ac_cv_type_int32_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INT32_T 1 -_ACEOF - - -fi - -ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default" -if test "x$ac_cv_type_int64_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_INT64_T 1 -_ACEOF - - -fi - -ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" -if test "x$ac_cv_type_uint8_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_UINT8_T 1 -_ACEOF - - -fi - -ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" -if test "x$ac_cv_type_uint16_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_UINT16_T 1 -_ACEOF - - -fi - -ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" -if test "x$ac_cv_type_uint32_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_UINT32_T 1 -_ACEOF - - -fi - -ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default" -if test "x$ac_cv_type_uint64_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_UINT64_T 1 -_ACEOF - - -fi - -ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_SSIZE_T 1 -_ACEOF - - -fi - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 -$as_echo_n "checking size of short... " >&6; } -if ${ac_cv_sizeof_short+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_short" = yes; then - { { $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 "cannot compute sizeof (short) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_short=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 -$as_echo "$ac_cv_sizeof_short" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SHORT $ac_cv_sizeof_short -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -$as_echo_n "checking size of int... " >&6; } -if ${ac_cv_sizeof_int+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_int" = yes; then - { { $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 "cannot compute sizeof (int) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_int=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -$as_echo "$ac_cv_sizeof_int" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -$as_echo_n "checking size of long... " >&6; } -if ${ac_cv_sizeof_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long" = yes; then - { { $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 "cannot compute sizeof (long) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -$as_echo "$ac_cv_sizeof_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -$as_echo_n "checking size of long long... " >&6; } -if ${ac_cv_sizeof_long_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long_long" = yes; then - { { $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 "cannot compute sizeof (long long) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_long_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -$as_echo "$ac_cv_sizeof_long_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 -$as_echo_n "checking size of off_t... " >&6; } -if ${ac_cv_sizeof_off_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_off_t" = yes; then - { { $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 "cannot compute sizeof (off_t) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_off_t=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 -$as_echo "$ac_cv_sizeof_off_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_OFF_T $ac_cv_sizeof_off_t -_ACEOF - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 -$as_echo_n "checking size of size_t... " >&6; } -if ${ac_cv_sizeof_size_t+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_size_t" = yes; then - { { $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 "cannot compute sizeof (size_t) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_size_t=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 -$as_echo "$ac_cv_sizeof_size_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t -_ACEOF - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 -$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } -if ${ac_cv_struct_tm+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include - -int -main () -{ -struct tm tm; - int *p = &tm.tm_sec; - return !p; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_struct_tm=time.h -else - ac_cv_struct_tm=sys/time.h -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 -$as_echo "$ac_cv_struct_tm" >&6; } -if test $ac_cv_struct_tm = sys/time.h; then - -$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h - -fi - -ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include -#include <$ac_cv_struct_tm> - -" -if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_TM_TM_ZONE 1 -_ACEOF - - -fi - -if test "$ac_cv_member_struct_tm_tm_zone" = yes; then - -$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h - -else - ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include -" -if test "x$ac_cv_have_decl_tzname" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_TZNAME $ac_have_decl -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 -$as_echo_n "checking for tzname... " >&6; } -if ${ac_cv_var_tzname+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#if !HAVE_DECL_TZNAME -extern char *tzname[]; -#endif - -int -main () -{ -return tzname[0][0]; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_var_tzname=yes -else - ac_cv_var_tzname=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 -$as_echo "$ac_cv_var_tzname" >&6; } - if test $ac_cv_var_tzname = yes; then - -$as_echo "#define HAVE_TZNAME 1" >>confdefs.h - - fi -fi - - -case $host_os -in - *bsd*) MANFMT=mdoc;; - *) MANFMT=man;; -esac - - - - - - - CFLAG_VISIBILITY= - HAVE_VISIBILITY=0 - if test -n "$GCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 -$as_echo_n "checking for simple visibility declarations... " >&6; } - if ${gl_cv_cc_visibility+:} false; then : - $as_echo_n "(cached) " >&6 -else - - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fvisibility=hidden" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -extern __attribute__((__visibility__("hidden"))) int hiddenvar; - extern __attribute__((__visibility__("default"))) int exportedvar; - extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); - extern __attribute__((__visibility__("default"))) int exportedfunc (void); -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - gl_cv_cc_visibility=yes -else - gl_cv_cc_visibility=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$gl_save_CFLAGS" -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 -$as_echo "$gl_cv_cc_visibility" >&6; } - if test $gl_cv_cc_visibility = yes; then - CFLAG_VISIBILITY="-fvisibility=hidden" - HAVE_VISIBILITY=1 - fi - fi - - - -cat >>confdefs.h <<_ACEOF -#define HAVE_VISIBILITY $HAVE_VISIBILITY -_ACEOF - - - -ac_config_files="$ac_config_files Makefile libzip.pc libzip-uninstalled.pc examples/Makefile man/Makefile lib/Makefile regress/Makefile src/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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } - 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 "${WIN32_HOST_TRUE}" && test -z "${WIN32_HOST_FALSE}"; then - as_fn_error $? "conditional \"WIN32_HOST\" 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 -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -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 - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# 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 libzip $as_me 1.1.3, which was -generated by GNU Autoconf 2.69. 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 ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -libzip config.status 1.1.3 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 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' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $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"`' -PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $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"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $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"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $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"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $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"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $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_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $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"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $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_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"`' -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"`' -postlink_cmds='`$ECHO "$postlink_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"`' - -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 SHELL \ -ECHO \ -PATH_SEPARATOR \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -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 \ -nm_file_list_spec \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -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_separator \ -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; 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 \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec; 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 - "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "libzip.pc") CONFIG_FILES="$CONFIG_FILES libzip.pc" ;; - "libzip-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES libzip-uninstalled.pc" ;; - "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; - "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; - "regress/Makefile") CONFIG_FILES="$CONFIG_FILES regress/Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/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"" || { - # Older Autoconf 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"` - # 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'`; 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, 2011 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="" - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# 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 PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# 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 - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# 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 - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# 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 - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and in which our libraries should be installed. -lt_sysroot=$lt_sysroot - -# 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 - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# 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 - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# 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 - -# 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 - -# 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 - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_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 - -# ### 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 '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -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}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - ;; - - 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 - diff --git a/configure.ac b/configure.ac index 0a8920a..6acd1e3 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.60]) -AC_INIT([libzip],[1.1.3],[libzip@nih.at]) +AC_INIT([libzip],[1.2.0],[libzip@nih.at]) AC_CONFIG_SRCDIR([lib/zip_add.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) @@ -19,6 +19,7 @@ AC_SUBST(PKG_CONFIG_RPATH) AC_PROG_CC AC_SYS_LARGEFILE AM_PROG_CC_C_O +AC_C_BIGENDIAN AC_ARG_WITH(zlib, [ --with-zlib=PREFIX specify prefix for ZLIB library],, @@ -52,9 +53,14 @@ AC_EXEEXT LT_INIT -AC_CHECK_FUNCS([_close _dup _fdopen _fileno _open _setmode _snprintf _strdup _stricmp fileno fseeko ftello getopt getprogname open setmode snprintf strcasecmp strdup stricmp]) +AC_CHECK_FUNCS([_close _dup _fdopen _fileno _open _setmode _snprintf _strdup _stricmp _strtoi64 _strtoui64 explicit_bzero explicit_memset fileno fseeko ftello getopt getprogname open setmode snprintf strcasecmp strdup stricmp strtoll strtoull]) AC_CHECK_FUNCS([mkstemp], [], [AC_LIBOBJ(mkstemp)]) +dnl assume dlsym in libc, but check in libdl +DLSYM_LIB= +AC_CHECK_LIB([dl], [dlsym], [DLSYM_LIB="-ldl"]) +AC_SUBST([DLSYM_LIB]) + AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ extern char *__progname; printf("%s", __progname); ]])], @@ -123,6 +129,7 @@ AC_CONFIG_FILES([Makefile examples/Makefile man/Makefile lib/Makefile + lib/gladman-fcrypt/Makefile regress/Makefile src/Makefile]) AC_OUTPUT diff --git a/create-cmake-config.h.in.pl b/create-cmake-config.h.in.pl new file mode 100755 index 0000000..9e06ceb --- /dev/null +++ b/create-cmake-config.h.in.pl @@ -0,0 +1,77 @@ +#!/usr/bin/env perl +# Haiku OS: we don't care! + +use strict; + +my $in = 'cmake-config.h.in'; +my $out = "$in.$$"; + +my ($fin, $fout); +open $fin, "< $in" or die "can't open $in: $!"; +open $fout, "> $out" or die "can't create $out: $!"; + +my $zipconf_defines = read_zipconf_defines(); + +my $in_defines = 0; +while (my $line = <$fin>) { + if ($in_defines) { + if ($line =~ m,/* END DEFINES,) { + $in_defines = 0; + } + else { + next; + } + } + print $fout $line; + if ($line =~ m,/\* BEGIN DEFINES,) { + $in_defines = 1; + add_defines($fout, $zipconf_defines); + } +} + +close $fin; +close $fout; + +rename($out, $in); + +sub add_defines { + my ($fout, $zipconf_defines) = @_; + + my $fin; + open $fin, "< CMakeLists.txt" or die "can't open CMakeLists.txt: $!"; + + while (my $line = <$fin>) { + my ($key, $value); + + if ($line =~ m/CHECK_TYPE_SIZE\(.* (\S*)\)/) { + $key = $1; + $value = "\${$1}"; + } + elsif ($line =~ m/CHECK_\S*\(.* (\S*)\)/) { + $key = $1; + } + + if (defined($key) && !defined($zipconf_defines->{$key})) { + print $fout "#cmakedefine $key" . ($value ? " $value" : "") . "\n"; + } + } + + close $fin; +} + +sub read_zipconf_defines { + my %zipconf_defines = (); + + my $fin; + open $fin, "< cmake-zipconf.h.in" or die "can't open cmake-zipconf.h.in: $!"; + + while (my $line = <$fin>) { + if ($line =~ m/#cmakedefine\s+(\S+)/) { + $zipconf_defines{$1} = 1; + } + } + + close $fin; + + return \%zipconf_defines; +} diff --git a/depcomp b/depcomp deleted file mode 100755 index fc98710..0000000 --- a/depcomp +++ /dev/null @@ -1,791 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2013-05-30.07; # UTC - -# Copyright (C) 1999-2014 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 outputting dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -# Get the directory component of the given path, and save it in the -# global variables '$dir'. Note that this directory component will -# be either empty or ending with a '/' character. This is deliberate. -set_dir_from () -{ - case $1 in - */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; - *) dir=;; - esac -} - -# Get the suffix-stripped basename of the given path, and save it the -# global variable '$base'. -set_base_from () -{ - base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` -} - -# If no dependency file was actually created by the compiler invocation, -# we still have to create a dummy depfile, to avoid errors with the -# Makefile "include basename.Plo" scheme. -make_dummy_depfile () -{ - echo "#dummy" > "$depfile" -} - -# Factor out some common post-processing of the generated depfile. -# Requires the auxiliary global variable '$tmpdepfile' to be set. -aix_post_process_depfile () -{ - # If the compiler actually managed to produce a dependency file, - # post-process it. - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependency.h'. - # Do two passes, one to just change these to - # $object: dependency.h - # and one to simply output - # dependency.h: - # which is needed to avoid the deleted-header problem. - { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" - sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" - } > "$depfile" - rm -f "$tmpdepfile" - else - make_dummy_depfile - fi -} - -# A tabulation character. -tab=' ' -# A newline character. -nl=' -' -# Character ranges might be problematic outside the C locale. -# These definitions help. -upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ -lower=abcdefghijklmnopqrstuvwxyz -digits=0123456789 -alpha=${upper}${lower} - -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" - -# Avoid interferences from the environment. -gccflag= dashmflag= - -# 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 - -if test "$depmode" = msvc7msys; then - # This is just like msvc7 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=msvc7 -fi - -if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. - gccflag=-qmakedep=gcc,-MF - depmode=gcc -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 -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. -## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. -## (see the conditional assignment to $gccflag above). -## 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). Also, it might not be -## supported by the other compilers which use the 'gcc' depmode. -## - 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 -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # 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. -## 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. hp depmode also adds that space, but also prefixes the VPATH -## to the object. Take care to not repeat it in the output. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -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 -ne 0; then - 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 ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ - | tr "$nl" ' ' >> "$depfile" - echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" - ;; - -xlc) - # 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 - ;; - -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. - set_dir_from "$object" - set_base_from "$object" - 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 -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - aix_post_process_depfile - ;; - -tcc) - # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 - # FIXME: That version still under development at the moment of writing. - # Make that this statement remains true also for stable, released - # versions. - # It will wrap lines (doesn't matter whether long or short) with a - # trailing '\', as in: - # - # foo.o : \ - # foo.c \ - # foo.h \ - # - # It will put a trailing '\' even on the last line, and will use leading - # spaces rather than leading tabs (at least since its commit 0394caf7 - # "Emit spaces for -MD"). - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. - # We have to change lines of the first kind to '$object: \'. - sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" - # And for each line of the second kind, we have to emit a 'dep.h:' - # dummy dependency, to avoid the deleted-header problem. - sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" - rm -f "$tmpdepfile" - ;; - -## The order of this option in the case statement is important, since the -## shell code in configure will try each of these formats in the order -## listed in this file. A plain '-MD' option would be understood by many -## compilers, so we must ensure this comes after the gcc and icc options. -pgcc) - # Portland's C compiler understands '-MD'. - # Will always output deps to 'file.d' where file is the root name of the - # source file under compilation, even if file resides in a subdirectory. - # The object file name does not affect the name of the '.d' file. - # pgcc 10.2 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\' : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - set_dir_from "$object" - # Use the source, not the object, to determine the base name, since - # that's sadly what pgcc will do too. - set_base_from "$source" - tmpdepfile=$base.d - - # For projects that build the same source file twice into different object - # files, the pgcc approach of using the *source* file root name can cause - # problems in parallel builds. Use a locking strategy to avoid stomping on - # the same $tmpdepfile. - lockdir=$base.d-lock - trap " - echo '$0: caught signal, cleaning up...' >&2 - rmdir '$lockdir' - exit 1 - " 1 2 13 15 - numtries=100 - i=$numtries - while test $i -gt 0; do - # mkdir is a portable test-and-set. - if mkdir "$lockdir" 2>/dev/null; then - # This process acquired the lock. - "$@" -MD - stat=$? - # Release the lock. - rmdir "$lockdir" - break - else - # If the lock is being held by a different process, wait - # until the winning process is done or we timeout. - while test -d "$lockdir" && test $i -gt 0; do - sleep 1 - i=`expr $i - 1` - done - fi - i=`expr $i - 1` - done - trap - 1 2 13 15 - if test $i -le 0; then - echo "$0: failed to acquire lock after $numtries attempts" >&2 - echo "$0: check lockdir '$lockdir'" >&2 - exit 1 - fi - - if test $stat -ne 0; then - 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. - set_dir_from "$object" - set_base_from "$object" - 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 -ne 0; then - 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,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" - # Add 'dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - make_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. - set_dir_from "$object" - set_base_from "$object" - - if test "$libtool" = yes; then - # Libtool 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$base.o.d # libtool 1.5 - tmpdepfile2=$dir.libs/$base.o.d # Likewise. - tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - # Same post-processing that is required for AIX mode. - aix_post_process_depfile - ;; - -msvc7) - if test "$libtool" = yes; then - showIncludes=-Wc,-showIncludes - else - showIncludes=-showIncludes - fi - "$@" $showIncludes > "$tmpdepfile" - stat=$? - grep -v '^Note: including file: ' "$tmpdepfile" - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The first sed program below extracts the file names and escapes - # backslashes for cygpath. The second sed program outputs the file - # name when reading, but also accumulates all include files in the - # hold buffer in order to output them again at the end. This only - # works with sed implementations that can handle large buffers. - sed < "$tmpdepfile" -n ' -/^Note: including file: *\(.*\)/ { - s//\1/ - s/\\/\\\\/g - p -}' | $cygpath_u | sort -u | sed -n ' -s/ /\\ /g -s/\(.*\)/'"$tab"'\1 \\/p -s/.\(.*\) \\/\1:/ -H -$ { - s/.*/'"$tab"'/ - G - p -}' >> "$depfile" - echo >> "$depfile" # make sure the fragment doesn't end with a backslash - rm -f "$tmpdepfile" - ;; - -msvc7msys) - # 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 - ;; - -#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|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this sed invocation - # correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | 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" - # makedepend may prepend the VPATH from the source file name to the object. - # No need to regex-escape $object, excess matching of '.' is harmless. - sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process the last invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed '1,2d' "$tmpdepfile" \ - | tr ' ' "$nl" \ - | 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::'"$tab"'\1 \\:p' >> "$depfile" - echo "$tab" >> "$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/docs/aes_coding_tips.txt b/docs/aes_coding_tips.txt new file mode 100644 index 0000000..052864a --- /dev/null +++ b/docs/aes_coding_tips.txt @@ -0,0 +1,253 @@ +AES Coding Tips for Developers + +NOTE: WinZip^(R) users do not need to read or understand the information +contained on this page. It is intended for developers of Zip file utilities. + +This document contains information that may be helpful to developers and other +interested parties who wish to support the AE-1 and AE-2 AES encryption formats +in their own Zip file utilities. WinZip Computing makes no warranties regarding +the information provided in this document. In particular, WinZip Computing does +not represent or warrant that the information provided here is free from errors +or is suitable for any particular use, or that the file formats described here +will be supported in future versions of WinZip. You should test and validate +all code and techniques in accordance with good programming practice. + +This information supplements the basic encryption specification document found +here. + +This document assumes that you are using Dr. Brian Gladman's AES encryption +package. Dr. Gladman has generously made public a sample application that +demonstrates the use of his encryption/decryption and other routines, and the +code samples shown below are derived from this sample application. Dr. +Gladman's AES library and the sample application are available from the AES +project page on Dr. Gladman's web site. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Generating a salt value + +Please read the discussion of salt values in the encryption specification. + +Dr. Gladman has provided a pseudo-random number generator in the files PRNG.C +and PRNG.H. You may find this suitable for generating salt values. These files +are included in the sample package available through the AES project page on +Dr. Gladman's web site. + +Here are guidelines for using Dr. Gladman's generator. Note that the generator +is used rather like an I/O stream: it is opened (initialized), used, and +finally closed. To obtain the best results, it is recommended that you +initialize the generator when your application starts and close it when your +application closes. (If you are coding in C++, you may wish to wrap these +actions in a C++ class that initializes the generator on construction and +closes it on destruction.) + + 1. You will need to provide an entropy function in your code for + initialization of the generator. The entropy function need not be + particularly sophisticated for this use. Here is one possibility for such a + function, based primarily upon the Windows performance counter: + + int entropy_fun( + unsigned char buf[], + unsigned int len) + { + unsigned __int64 pentium_tsc[1]; + unsigned int i; + static unsigned int num = 0; + // this sample code returns the following sequence of entropy information + // - the current 8-byte Windows performance counter value + // - an 8-byte representation of the current date/time + // - an 8-byte value built from the current process ID and thread ID + // - all subsequent calls return the then-current 8-byte performance + // counter value + switch (num) + { + case 1: + ++num; + // use a value that is unlikely to repeat across system reboots + GetSystemTimeAsFileTime((FILETIME *)pentium_tsc); + break; + case 2: + ++num; + { + // use a value that distinguishes between different instances of this + // code that might be running on different processors at the same time + unsigned __int32 processtest = GetCurrentProcessId(); + unsigned __int32 threadtest = GetCurrentThreadId(); + pentium_tsc[0] = processtest; + pentium_tsc[0] = (pentium_tsc[0] << 32) + threadtest; + } + break; + case 0: + ++num; + // fall through to default case + default: + // use a rapidly-changing value + // Note: check QueryPerformanceFrequency() first to + // ensure that QueryPerformanceCounter() will work. + QueryPerformanceCounter((LARGE_INTEGER *)pentium_tsc); + break; + } + for(i = 0; i < 8 && i < len; ++i) + buf[i] = ((unsigned char*)pentium_tsc)[i]; + return i; + } + + Note: the required prototype for the entropy function is defined in PRNG.H. + + 2. Initialize the generator by calling prng_init(), providing the addresses of + your entropy function and of an instance of a prng_ctx structure (defined + in PRNG.H). The prng_ctx variable maintains a context for the generator and + is used as a parameter for the other generator functions. Therefore, the + variable's state must be maintained until the generator is closed. + + prng_ctx ctx; + prng_init(entropy_fun, &ctx); + + You only need to do this once per application session (as long as you keep + the "stream" open). + + 3. To obtain a sequence of random bytes of arbitrary size, use prng_rand(). + This code obtains 16 random bytes, suitable for use as a salt value for + 256-bit AES encryption: + + unsigned char buffer[16]; + prng_rand(buffer, sizeof(buffer), &ctx); + + Note that the ctx parameter is the same prng_ctx variable that was used in + the initialization call. + + 4. When you are done with the generator (this would normally be when your + application closes), close it by calling prng_end: + + prng_end(&ctx); + + Again, the ctx parameter is the same prng_ctx variable that was used in the + initialization call. + +Encryption and decryption + +The actual encryption and decryption of data are handled quite similarly, and +again are rather stream-like: a stream is "opened", data is passed to it for +encryption or decryption, and then it is closed. The password verifier is +returned when the stream is opened, and the authentication code is returned +when the stream is closed. + +Here is the basic technique: + + 1. Initialize the "stream" for encryption or decryption and obtain the + password verification value. + + There is no difference in the initialization, regardless of whether you are + encrypting or decrypting: + + fcrypt_ctx zctx; // the encryption context + int rc = fcrypt_init( + KeySize, // extra data value indicating key size + pszPassword, // the password + strlen(pszPassword), // number of bytes in password + achSALT, // the salt + achPswdVerifier, // on return contains password verifier + &zctx); // encryption context + + The return value is 0 if the initialization was successful; non-zero values + indicate errors. Note that passwords are null-terminated ANSI strings; + embedded nulls must not be used. (To avoid incompatibilities between the + various character sets in use, especially in different versions of Windows, + users should be encouraged to use passwords containing only the "standard" + characters in the range 32-127.) + + The function returns the password verification value in achPswdVerifier, + which must be a 2-byte buffer. If you are encrypting, store this value in + the Zip file as indicated by the encryption specification. If you are + decrypting, compare this returned value to the value stored in the Zip + file. If they are different, then either the password provided by your user + was incorrect or the encrypted file has been altered in some way since it + was encrypted. (Note that if they match, there is still a 1 in 65,536 + chance that an incorrect password was provided.) + + The initialized encryption context (zctx) is used as a parameter to the + encryption/decryption functions. Therefore, its state must be maintained + until the "stream" is closed. + + 2. Encrypt or decrypt the data. + + To encrypt: + + fcrypt_encrypt( + pchData, // pointer to the data to encrypt + cb, // how many bytes to encrypt + &zctx); // encryption context + + To decrypt: + + fcrypt_decrypt( + pchData, // pointer to the data to decrypt + cb, // how many bytes to decrypt + &zctx); // decryption context + + You may need to call the encrypt or decrypt function multiple times, + passing in successive chunks of data in the buffer. For AE-1 and AE-2 + compatibility, the buffer size must be a multiple of 16 bytes except for + the last buffer, which may be smaller. For efficiency, a larger buffer size + such as 32,768 would generally be used. + + Note: to encrypt zero-length files, simply skip this step. You will still + obtain and use the password verifier (step 1) and authentication code (step + 3). + + 3. Close the "stream" and obtain the authentication code. + + When encryption/decryption is complete, close the "stream" as follows: + + int rc = fcrypt_end( + achMAC, // on return contains the authentication code + &zctx); // encryption context + + The return value is the size of the authentication code, which will always + be 10 for AE-1 and AE-2. The authentication code itself is returned in your + buffer at achMAC, which is an array of char, sized to hold at least 10 + characters. If you are encrypting, store this value in the Zip file as + indicated by the encryption specification; if you are decrypting, compare + this value to the value stored in the Zip file. If the values are + different, either the password is incorrect or the encrypted data has been + altered subsequent to storage. + + Note that decryption can fail even if the encrypted data is unaltered and + the password verifier was correct in step 1. The password verifier is + useful as a quick way to detect most incorrect passwords, but it is not + perfect and on rare occasions (1 out of 65,536) it will fail to detect an + incorrect password. It is therefore important for you to check the + authentication code on completion even though the password verifier was + correct. + +Notes + + • Dr. Gladman's AES code depends on the byte order (little-endian or + big-endian) used by the computing platform the code will run on. This is + determined by a C preprocessor constant called PLATFORM_BYTE_ORDER, which + is defined in the file AESOPT.H. You should be sure that + PLATFORM_BYTE_ORDER gets the proper value for your platform; if it does + not, you will need to define it yourself to the correct value. When using + the Microsoft compiler on Intel platforms it does get the proper value, + which on these platforms is AES_LITTLE_ENDIAN. We have, however, had a + report that it does not default properly when Borland C++ Builder is used, + and that manual assignment is necessary. For additional information on this + topic, refer to the comments within AESOPT.H. + +Change history + +Changes made in document version 1.04, July, 2008: + + A. Sample Entropy Function + + The sample entropy function was changed to include information near the + very beginning of the entropy stream that's unique to the day and to the + process and thread. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Document version: 1.04 +Last modified: July 21, 2008 + +Copyright(C) 2003-2016 WinZip International LLC. +All Rights Reserved diff --git a/docs/aes_info.txt b/docs/aes_info.txt new file mode 100644 index 0000000..c7995d5 --- /dev/null +++ b/docs/aes_info.txt @@ -0,0 +1,607 @@ +AES Encryption Information: +Encryption Specification AE-1 and AE-2 + +Document version: 1.04 +Last modified: January 30, 2009 + +NOTE: WinZip^(R) users do not need to read or understand the information +contained on this page. It is intended for developers of Zip file utilities. + +Changes since the original version of this document are summarized in the +Change History section below. + +This document describes the file format that WinZip uses to create +AES-encrypted Zip files. The AE-1 encryption specification was introduced in +WinZip 9.0 Beta 1, released in May 2003. The AE-2 encryption specification, a +minor variant of the original AE-1 specification differing only in how the CRC +is handled, was introduced in WinZip 9.0 Beta 3, released in January, 2004. +Note that as of WinZip 11, WinZip itself encrypts most files using the AE-1 +format and encrypts others using the AE-2 format. + +From time to time we may update the information provided here, for example to +document any changes to the file formats, or to add additional notes or +implementation tips. If you would like to receive e-mail announcements of any +substantive changes we make to this document, you can sign up below for our +Developer Information mailing list. + +Without compromising the basic Zip file format, WinZip Computing has extended +the format specification to support AES encryption, and this document fully +describes the format extension. Additionally, we are providing information +about a no-cost third-party source for the actual AES encryption code--the same +code that is used by WinZip. We believe that use of the free encryption code +and of this specification will make it easy for all developers to add +compatible advanced encryption to their Zip file utilities. + +This document is not a tutorial on encryption or Zip file structure. While we +have attempted to provide the necessary details of the current WinZip AES +encryption format, developers and other interested third parties will need to +have or obtain an understanding of basic encryption concepts, Zip file format, +etc. + +Developers should also review AES Coding Tips page. + +WinZip Computing makes no warranties regarding the information provided in this +document. In particular, WinZip Computing does not represent or warrant that +the information provided here is free from errors or is suitable for any +particular use, or that the file formats described here will be supported in +future versions of WinZip. You should test and validate all code and techniques +in accordance with good programming practice. + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Contents + + I. Encryption services +II. Zip file format + A. Base format reference + B. Compression method and encryption flag + C. CRC value + D. AES extra data field +III. Encrypted file storage format + A. File format + B. Salt value + C. Password verification value + D. Encrypted file data + E. Authentication code +IV. Changes in WinZip 11 + V. Notes + A. Non-files and zero-length files + B. "Mixed" Zip files + C. Key generation +VI. FAQs +VII. Change history +VIII. Mailing list signup + + +I. Encryption services + +To perform AES encryption and decryption, WinZip uses AES functions written by +Dr. Brian Gladman. The source code for these functions is available in C/C++ +and Pentium family assembler for anyone to use under an open source BSD or GPL +license from the AES project page on Dr. Gladman's web site. The AES Coding +Tips page also has some information on the use of these functions. WinZip +Computing thanks Dr. Gladman for making his AES functions available to anyone +under liberal license terms. + +Dr. Gladman's encryption functions are portable to a number of operating +systems and can be static linked into your applications, so there are no +operating system version or library dependencies. In particular, the functions +do not require Microsoft's Cryptography API. + +General information on the AES standard and the encryption algorithm (also +known as Rijndael) is readily available on the Internet. A good place to start +is http://www.nist.gov/public_affairs/releases/g00-176.htm. + +II. Zip file format + + A. Base format reference + + AES-encrypted files are stored within the guidelines of the standard Zip + file format using only a new "extra data" field, a new compression method + code, and a value in the CRC field dependant on the encryption version, + AE-1 or AE-2. The basic Zip file format is otherwise unchanged. + + WinZip sets the version needed to extract and version made by fields in the + local and central headers to the same values it would use if the file were + not encrypted. + + The basic Zip file format specification used by WinZip is available via FTP + from the Info-ZIP group at ftp://ftp.info-zip.org/pub/infozip/doc/ + appnote-iz-latest.zip. + + B. Compression method and encryption flag + + As for any encrypted file, bit 0 of the "general purpose bit flags" field + must be set to 1 in each AES-encrypted file's local header and central + directory entry. + + Additionally, the presence of an AES-encrypted file in a Zip file is + indicated by a new compression method code (decimal 99) in the file's local + header and central directory entry, used along with the AES extra data + field described below. There is no change in either the version made by or + version needed to extract codes. + + The code for the actual compression method is stored in the AES extra data + field (see below). + + C. CRC value + + For files encrypted using the AE-2 method, the standard Zip CRC value is + not used, and a 0 must be stored in this field. Corruption of encrypted + data within a Zip file is instead detected via the authentication code + field. + + Files encrypted using the AE-1 method do include the standard Zip CRC + value. This, along with the fact that the vendor version stored in the AES + extra data field is 0x0001 for AE-1 and 0x0002 for AE-2, is the only + difference between the AE-1 and AE-2 formats. + + NOTE: Zip utilities that support the AE-2 format are required to be able to + read files that were created in the AE-1 format, and during decryption/ + extraction of files in AE-1 format should verify that the file's CRC + matches the value stored in the CRC field. + + D. AES extra data field + 1. A file encrypted with AES encryption will have a special "extra data" + field associated with it. This extra data field is stored in both the + local header and central directory entry for the file. + + Note: see the Zip file format document referenced above for general + information on the format and use of extra data fields. + + 2. The extra data header ID for AES encryption is 0x9901. The fields are + all stored in Intel low-byte/high-byte order. The extra data field + currently has a length of 11: seven data bytes plus two bytes for the + header ID and two bytes for the data size. Therefore, the extra data + overhead for each file in the archive is 22 bytes (11 bytes in the + central header plus 11 bytes in the local header). + 3. The format of the data in the AES extra data field is as follows. See + the notes below for additional information. + + Offset Size(bytes) Content + + 0 2 Extra field header ID (0x9901) + + 2 2 Data size (currently 7, but subject + to possible increase in the future) + + 4 2 Integer version number specific to + the zip vendor + + 6 2 2-character vendor ID + + 8 1 Integer mode value indicating AES + encryption strength + + 9 2 The actual compression method used to + compress the file + + 4. Notes + ☆ Data size: this value is currently 7, but because it is possible + that this specification will be modified in the future to store + additional data in this extra field, vendors should not assume that + it will always remain 7. + ☆ Vendor ID: the vendor ID field should always be set to the two + ASCII characters "AE". + ☆ Vendor version: the vendor version for AE-1 is 0x0001. The vendor + version for AE-2 is 0x0002. + + Zip utilities that support AE-2 must also be able to process files + that are encrypted in AE-1 format. The handling of the CRC value is + the only difference between the AE-1 and AE-2 formats. + + ☆ Encryption strength: the mode values (encryption strength) for AE-1 + and AE-2 are: + + Value Strength + + 0x01 128-bit encryption key + + 0x02 192-bit encryption key + + 0x03 256-bit encryption key + + The encryption specification supports only 128-, 192-, and 256-bit + encryption keys. No other key lengths are permitted. + + (Note: the current version of WinZip does not support encrypting + files using 192-bit keys. This specification, however, does provide + for the use of 192-bit keys, and WinZip is able to decrypt such + files.) + + ☆ Compression method: the compression method is the one that would + otherwise have been stored in the local and central headers for the + file. For example, if the file is imploded, this field will contain + the compression code 6. This is needed because a compression method + of 99 is used to indicate the presence of an AES-encrypted file + (see above). + +III. Encrypted file storage format + + A. File format + + Additional overhead data required for decryption is stored with the + encrypted file itself (i.e., not in the headers). The actual format of the + stored file is as follows; additional information about these fields is + below. All fields are byte-aligned. + + Size Content + (bytes) + + Variable Salt value + + 2 Password verification value + + Variable Encrypted file data + + 10 Authentication code + + Note that the value in the "compressed size" fields of the local file + header and the central directory entry is the total size of all the items + listed above. In other words, it is the total size of the salt value, + password verification value, encrypted data, and authentication code. + + B. Salt value + + The "salt" or "salt value" is a random or pseudo-random sequence of bytes + that is combined with the encryption password to create encryption and + authentication keys. The salt is generated by the encrypting application + and is stored unencrypted with the file data. The addition of salt values + to passwords provides a number of security benefits and makes dictionary + attacks based on precomputed keys much more difficult. + + Good cryptographic practice requires that a different salt value be used + for each of multiple files encrypted with the same password. If two files + are encrypted with the same password and salt, they can leak information + about each other. For example, it is possible to determine whether two + files encrypted with the same password and salt are identical, and an + attacker who somehow already knows the contents of one of two files + encrypted with the same password and salt can determine some or all of the + contents of the other file. Therefore, you should make every effort to use + a unique salt value for each file. + + The size of the salt value depends on the length of the encryption key, as + follows: + + Key size Salt size + + 128 bits 8 bytes + + 192 bits 12 bytes + + 256 bits 16 bytes + + C. Password verification value + + This two-byte value is produced as part of the process that derives the + encryption and decryption keys from the password. When encrypting, a + verification value is derived from the encryption password and stored with + the encrypted file. Before decrypting, a verification value can be derived + from the decryption password and compared to the value stored with the + file, serving as a quick check that will detect most, but not all, + incorrect passwords. There is a 1 in 65,536 chance that an incorrect + password will yield a matching verification value; therefore, a matching + verification value cannot be absolutely relied on to indicate a correct + password. + + Information on how to obtain the password verification value from Dr. + Gladman's encryption library can be found on the coding tips page. + + This value is stored unencrypted. + + D. Encrypted file data + + Encryption is applied only to the content of files. It is performed after + compression, and not to any other associated data. The file data is + encrypted byte-for-byte using the AES encryption algorithm operating in + "CTR" mode, which means that the lengths of the compressed data and the + compressed, encrypted data are the same. + + It is important for implementors to note that, although the data is + encrypted byte-for-byte, it is presented to the encryption and decryption + functions in blocks. The block size used for encryption and decryption must + be the same. To be compatible with the encryption specification, this block + size must be 16 bytes (although the last block may be smaller). + + E. Authentication code + + Authentication provides a high quality check that the contents of an + encrypted file have not been inadvertently changed or deliberately tampered + with since they were first encrypted. In effect, this is a super-CRC check + on the data in the file after compression and encryption. (Additionally, + authentication is essential when using CTR mode encryption because this + mode is vulnerable to several trivial attacks in its absence.) + + The authentication code is derived from the output of the encryption + process. Dr. Gladman's AES code provides this service, and information + about how to obtain it is in the coding tips. + + The authentication code is stored unencrypted. It is byte-aligned and + immediately follows the last byte of encrypted data. + + For more discussion about authentication, see the authentication code FAQ + below. + +IV. Changes in WinZip 11 + +Beginning with WinZip 11, WinZip makes a change in its use of the AE-1 and AE-2 +file formats. The file formats themselves have not changed, and AES-encrypted +files created by WinZip 11 are completely compatible with version 1.02 the +WinZip AES encryption specification, which was published in January 2004. + +WinZip 9.0 and WinZip 10.0 stored all AES-encrypted files using the AE-2 file +format, which does not store the encrypted file's CRC. WinZip 11 instead uses +the AE-1 file format, which does store the CRC, for most files. This provides +an extra integrity check against the possibility of hardware or software errors +that occur during the actual process of file compression/encryption or +decryption/decompression. For more information on this point, see the +discussion of the CRC below. + +Because for some very small files the CRC can be used to determine the exact +contents of a file, regardless of the encryption method used, WinZip 11 +continues to use the AE-2 file format, with no CRC stored, for files with an +uncompressed size of less than 20 bytes. WinZip 11 also uses the AE-2 file +format for files compressed in BZIP2 format, because the BZIP2 format contains +its own integrity checks equivalent to those provided by the Zip format's CRC. + +Other vendors who support WinZip's AES encryption specification may want to +consider making a similar change to their own implementations of the +specification, to get the benefit of the extra integrity check that it +provides. + +Note that the January 2004 version of the WinZip AE-2 specification, version +1.0.2, already required that all utilities that implemented the AE-2 format +also be able to process files in AE-1 format, and should check on decryption/ +extraction of those files that the CRC was correct. + +V. Notes + + A. Non-files and zero-length files + + To reduce Zip file size, it is recommended that non-file entries such as + folder/directory entries not be encrypted. This, however, is only a + recommendation; it is permissible to encrypt or not encrypt these entries, + as you prefer. + + On the other hand, it is recommended that you do encrypt zero-length files. + The presence of both encrypted and unencrypted files in a Zip file may + trigger user warnings in some Zip file utilities, so the user experience + may be improved if all files (including zero-length files) are encrypted. + + If zero-length files are encrypted, the encrypted data portion of the file + storage (see above) will be empty, but the remainder of the encryption + overhead data must be present, both in the file storage area and in the + local and central headers. + + B. "Mixed" Zip files + + There is no requirement that all files in a Zip file be encrypted or that + all files that are encrypted use the same encryption method or the same + password. + + A Zip file can contain any combination of unencrypted files and files + encrypted with any of the four currently defined encryption methods (Zip + 2.0, AES-128, AES-192, AES-256). Encrypted files may use the same password + or different passwords. + + C. Key Generation + + Key derivation, as used by AE-1 and AE-2 and as implemented in Dr. + Gladman's library, is done according to the PBKDF2 algorithm, which is + described in the RFC2898 guidelines. An iteration count of 1000 is used. An + appropriate number of bits from the resulting hash value are used to + compose three output values: an encryption key, an authentication key, and + a password verification value. The first n bits become the encryption key, + the next m bits become the authentication key, and the last 16 bits (two + bytes) become the password verification value. + + As part of the process outlined in RFC 2898 a pseudo-random function must + be called; AE-2 uses the HMAC-SHA1 function, since it is a well-respected + algorithm that has been in wide use for this purpose for several years. + + Note that, when used in connection with 192- or 256-bit AES encryption, the + fact that HMAC-SHA1 produces a 160-bit result means that, regardless of the + password that you specify, the search space for the encryption key is + unlikely to reach the theoretical 192- or 256-bit maximum, and cannot be + guaranteed to exceed 160 bits. This is discussed in section B.1.1 of the + RFC2898 specification. + +VI. FAQs + + • Why is the compression method field used to indicate AES encryption? + + As opposed to using new version made by and version needed to extract + values to signal AES encryption for a file, the new compression method is + more likely to be handled gracefully by older versions of existing Zip file + utilities. Zip file utilities typically do not attempt to extract files + compressed with unknown methods, presumably notifying the user with an + appropriate message. + + • How can I guarantee that the salt value is unique? + + In principle, the value of the salt should be different whenever the same + password is used more than once, for the reasons described above, but this + is difficult to guarantee. + + In practice, the number of bytes in the salt (as specified by AE-1 and + AE-2) is such that using a pseudo-random value will ensure that the + probability of duplicated salt values is very low and can be safely + ignored. + + There is one exception to this: With the 8-byte salt values used with + WinZip's 128-bit encryption it is likely that, if approximately 4 billion + files are encrypted with the same password, two of the files will have the + same salt, so it is advisable to stay well below this limit. Because of + this, when using the same password to encrypt very large numbers of files + in WinZip's AES encryption format (that is, files totalling in the + millions, for example 2000 Zip files, each containing 1000 encrypted + files), we recommend the use of 192-bit or 256-bit AES keys, with their 12- + and 16-byte salt values, rather than 128-bit AES keys, with their 8-byte + salt values. + + Although salt values do not need to be truly random, it is important that + they be generated in a way that the probability of duplicated salt values + is not significantly higher than that which would be expected if truly + random values were being used. + + One technique for generating salt values is presented in the coding tips + page. + + • Why is there an authentication code? + + The purpose of the authentication code is to insure that, once a file's + data has been compressed and encrypted, any accidental corruption of the + encrypted data, and any deliberate attempts to modify the encrypted data by + an attacker who does not know the password, can be detected. + + The current consensus in the cryptographic community is that associating a + message authentication code (or MAC) with encrypted data has strong + security value because it makes a number of attacks more difficult to + engineer. For AES CTR mode encryption in particular, a MAC is especially + important because a number of trivial attacks are possible in its absence. + The MAC used with WinZip's AES encryption is based on HMAC-SHA1-80, a + mature and widely respected authentication algorithm. + + The MAC is calculated after the file data has been compressed and + encrypted. This order of calculation is referred to as Encrypt-then-MAC, + and is preferred by many cryptographers to the alternative order of + MAC-then-Encrypt because Encrypt-then-MAC is immune to some known attacks + on MAC-then-Encrypt. + + • What is the role of the CRC in WinZip 11? + + Within the Zip format, the primary use of the CRC value is to detect + accidental corruption of data that has been stored in the Zip file. With + files encrypted according to the Zip 2.0 encryption specification, it also + functions to some extent as a method of detecting deliberate attempts to + modify the encrypted data, but not one that can be considered + cryptographically strong. The CRC is not needed for these purposes with the + WinZip AES encryption specification, where the HMAC-SHA1-based + authentication code instead serves these roles. + + The CRC has a drawback in that for very small files, such as files with + four or fewer bytes, the CRC can be used, independent of the encryption + algorithm, to determine the unencrypted contents of the file. And, in + general, it is preferable to store as little information as possible about + the encrypted file in the unencrypted Zip headers. + + The CRC does serve one purpose that the authentication code does not. The + CRC is computed based on the original uncompressed, unencrypted contents of + the file, and it is checked after the file has been decrypted and + decompressed. In contrast, the authentication code used with WinZip AES + encryption is computed after compression/encryption and it is checked + before decryption/decompression. In the very rare event of a hardware or + software error that corrupts data during compression and encryption, or + during decryption and decompression, the CRC will catch the error, but the + authentication code will not. + + WinZip 9.0 and WinZip 10.0 used AE-2 for all files that they created, and + did not store the CRC. As of WinZip 11, WinZip instead uses AE-1 for most + files, storing the CRC as an additional integrity check against hardware or + software errors occurring during the actual compression/encryption or + decryption/decompression processes. WinZip 11 will continue to use AE-2, + with no CRC, for very small files of less than 20 bytes. It will also use + AE-2 for files compressed in BZIP2 format, because this format has internal + integrity checks equivalent to a CRC check built in. + + Note that the AES-encrypted files created by WinZip 11 are fully compatible + with January 2004's version 1.0.2 of the WinZip AES encryption + specification, in which both the AE-1 and AE-2 variants of the file format + were already defined. + +VII. Change history + +Changes made in document version 1.04, January, 2009: Minor clarification +regarding the algorithm used to generate the authentication code. + +Changes made in document version 1.03, November, 2006: Minor editorial and +clarifying changes have been made throughout the document. The following +substantive technical changes have been made: + + A. WinZip 11 Usage of AE-1 and AE-2 + + WinZip's AES encryption specification defines two formats, known as AE-1 + and AE-2, which differ in whether the CRC of the encrypted file is stored + in the Zip headers. While the file formats themselves remain unchanged, + WinZip's usage of them is changing. Beginning with WinZip 11, WinZip uses + the AE-1 format, which includes the CRC of the encrypted file, for many + encrypted files, in order to provide an additional integrity check against + hardware or software errors occurring during the compression/encryption or + decryption/decompression processes. Note that AES-encrypted files created + by WinZip 11 are completely compatible with the previous version of the + WinZip encryption specification, January 2004's version 1.0.2. + + B. The discussion of salt values mentions a limitation that applies to the + uniqueness of salt values when very large numbers of files are encrypted + with 128-bit encryption. + C. Older versions of this specification suggested that other vendors might + want to use their own vendor IDs to create their own unique encryption + formats. We no longer suggest that vendor-specific alternative encryption + methods be created in this way. + +Changes made in document version 1.02, January, 2004: The introductory text at +the start of the document has been rewritten, and minor editorial and +clarifying changes have been made throughout the document. Two substantive +technical changes have been made: + + A. AE-2 Specification + + Standard Zip files store the CRC of each file's unencrypted data. This + value is used to help detect damage or other alterations to Zip files. + However, storing the CRC value has a drawback in that, for a very small + file, such as a file of four or fewer bytes, the CRC value can be used, + independent of the encryption algorithm, to help determine the unencrypted + contents of the file. + + Because of this, files encrypted with the new AE-2 method store a 0 in the + CRC field of the Zip header, and use the authentication code instead of the + CRC value to verify that encrypted data within the Zip file has not been + corrupted. + + The only differences between the AE-1 and AE-2 methods are the storage in + AE-2 of 0 instead of the CRC in the Zip file header,and the use in the AES + extra data field of 0x0002 for AE-2 instead of 0x0001 for AE-1 as the + vendor version. + + Zip utilities that support the AE-2 format are required to be able to read + files that were created in the AE-1 format, and during decryption/ + extraction of files in AE-1 format should verify that the file's CRC + matches the value stored in the CRC field. + + B. Key Generation and HMAC-SHA1 + + The description of the key generation mechanism has been updated to point + out a limitation arising from its use of HMAC-SHA1 as the pseudo-random + function: When used in connection with 192- or 256-bit AES encryption, the + fact that HMAC-SHA1 produces a 160-bit result means that, regardless of the + password that you specify, the search space for the encryption key is + unlikely to reach the theoretical 192- or 256-bit maximum, and cannot be + guaranteed to exceed 160 bits. This is discussed in section B.1.1 of the + RFC2898 specification. + +VII. Developer Information Mailing List Signup + +We plan to use this mailing list to notify subscribers of any substantive +changes made to the Developer Information pages on the WinZip web site. + + + + If you enter your e-mail address above, you will receive a message + asking you to confirm your wish to be added to the mailing list. If you + don't reply to the confirmation message, you will not be added to the + list. + + By subscribing to this complimentary mailing list service, you + acknowledge and agree that WinZip Computing makes no representations + regarding the completeness or accuracy of the information provided + through the service, and that this service may be discontinued, in whole + or in part, with respect to any or all subscribers at any time. + * E-mail Address: + [ ] [Submit to Support] [Clear Form] +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Document version: 1.04 +Last modified: January 30, 2009 + +Copyright(C) 2003-2015 WinZip International LLC. +All Rights Reserved diff --git a/docs/appnote.iz b/docs/appnote.iz new file mode 100644 index 0000000..eed5663 --- /dev/null +++ b/docs/appnote.iz @@ -0,0 +1,3686 @@ +[Info-ZIP note, 20040528: this file is based on PKWARE's appnote.txt of + 15 February 1996, taking into account PKWARE's revised appnote.txt + version 6.2.0 of 26 April 2004. It has been unofficially corrected + and extended by Info-ZIP without explicit permission by PKWARE. + Although Info-ZIP believes the information to be accurate and complete, + it is provided under a disclaimer similar to the PKWARE disclaimer below, + differing only in the substitution of "Info-ZIP" for "PKWARE". In other + words, use this information at your own risk, but we think it's correct. + + Specification info from PKWARE that was obviously wrong has been corrected + silently (e.g. missing structure fields, wrong numbers). + As of PKZIPW 2.50, two new incompatibilities have been introduced by PKWARE; + they are noted below. Note that the "NTFS tag" conflict is currently not + real; PKZIPW 2.50 actually tags NTFS files as having come from a FAT + file system, too.] + +File: APPNOTE.TXT - .ZIP File Format Specification +Version: 6.2.0 - NOTIFICATION OF CHANGE +Revised: 04/26/2004 [2004-05-28 Info-ZIP] +Copyright (c) 1989 - 2004 PKWARE Inc., All Rights Reserved. + +I. Purpose +---------- + +This specification is intended to define a cross-platform, +interoperable file format. Since its first publication +in 1989, PKWARE has remained committed to ensuring the +interoperability of the .ZIP file format through this +specification. We trust that all .ZIP compatible vendors +and application developers that have adopted this format +will share and support this commitment. + + +II. Disclaimer +-------------- + +Although PKWARE will attempt to supply current and accurate +information relating to its file formats, algorithms, and the +subject programs, the possibility of error or omission can not +be eliminated. PKWARE therefore expressly disclaims any warranty +that the information contained in the associated materials relating +to the subject programs and/or the format of the files created or +accessed by the subject programs and/or the algorithms used by +the subject programs, or any other matter, is current, correct or +accurate as delivered. Any risk of damage due to any possible +inaccurate information is assumed by the user of the information. +Furthermore, the information relating to the subject programs +and/or the file formats created or accessed by the subject +programs and/or the algorithms used by the subject programs is +subject to change without notice. + +If the version of this file is marked as a NOTIFICATION OF CHANGE, +the content defines an Early Feature Specification (EFS) change +to the .ZIP file format that may be subject to modification prior +to publication of the Final Feature Specification (FFS). This +document may also contain information on Planned Feature +Specifications (PFS) defining recognized future extensions. + + +III. Change Log +--------------- + +Version Change Description Date +------- ------------------ ---------- +5.2 -Single Password Symmetric Encryption 06/02/2003 + storage + +6.1.0 -Smart Card compatibility 01/20/2004 + -Documentation on certificate storage + +6.2.0 -Introduction of Central Directory 04/26/2004 + Encryption for encrypting metadata + -Added OS/X to Version Made By values + + +IV. General Format of a .ZIP file +--------------------------------- + + Files stored in arbitrary order. Large .ZIP files can span multiple + diskette media or be split into user-defined segment sizes. [The + minimum user-defined segment size for a split .ZIP file is 64K. + (removed by PKWare 2003-06-01)] + + Overall .ZIP file format: + + [local file header 1] + [file data 1] + [data descriptor 1] + . + . + . + [local file header n] + [file data n] + [data descriptor n] + [archive decryption header] (EFS) + [archive extra data record] (EFS) + [central directory] + [zip64 end of central directory record] + [zip64 end of central directory locator] + [end of central directory record] + + + A. Local file header: + + local file header signature 4 bytes (0x04034b50) + version needed to extract 2 bytes + general purpose bit flag 2 bytes + compression method 2 bytes + last mod file time 2 bytes + last mod file date 2 bytes + crc-32 4 bytes + compressed size 4 bytes + uncompressed size 4 bytes + file name length 2 bytes + extra field length 2 bytes + + file name (variable size) + extra field (variable size) + + + B. File data + + Immediately following the local header for a file + is the compressed or stored data for the file. + The series of [local file header][file data][data + descriptor] repeats for each file in the .ZIP archive. + + + C. Data descriptor: + + [Info-ZIP discrepancy: + The Info-ZIP zip program starts the data descriptor with a 4-byte + PK-style signature. Despite the specification, none of the PKWARE + programs supports the data descriptor. PKZIP 4.0 -fix function + (and PKZIPFIX 2.04) ignores the data descriptor info even when bit 3 + of the general purpose bit flag is set. + data descriptor signature 4 bytes (0x08074b50) + ] + crc-32 4 bytes + compressed size 4 bytes + uncompressed size 4 bytes + + This descriptor exists only if bit 3 of the general + purpose bit flag is set (see below). It is byte aligned + and immediately follows the last byte of compressed data. + This descriptor is used only when it was not possible to + seek in the output .ZIP file, e.g., when the output .ZIP file + was standard output or a non seekable device. For Zip64 format + archives, the compressed and uncompressed sizes are 8 bytes each. + + + D. Archive decryption header: (EFS) + + The Archive Decryption Header is introduced in version 6.2 + of the ZIP format specification. This record exists in support + of the Central Directory Encryption Feature implemented as part of + the Strong Encryption Specification as described in this document. + When the Central Directory Structure is encrypted, this decryption + header will precede the encrypted data segment. The encrypted + data segment will consist of the Archive extra data record (if + present) and the encrypted Central Directory Structure data. + The format of this data record is identical to the Decryption + header record preceding compressed file data. If the central + directory structure is encrypted, the location of the start of + this data record is determined using the Start of Central Directory + field in the Zip64 End of Central Directory record. Refer to the + section on the Strong Encryption Specification for information + on the fields used in the Archive Decryption Header record. + + + E. Archive extra data record: (EFS) + + archive extra data signature 4 bytes (0x08064b50) + extra field length 4 bytes + extra field data (variable size) + + The Archive Extra Data Record is introduced in version 6.2 + of the ZIP format specification. This record exists in support + of the Central Directory Encryption Feature implemented as part of + the Strong Encryption Specification as described in this document. + When present, this record immediately precedes the central + directory data structure. The size of this data record will be + included in the Size of the Central Directory field in the + End of Central Directory record. If the central directory structure + is compressed, but not encrypted, the location of the start of + this data record is determined using the Start of Central Directory + field in the Zip64 End of Central Directory record. + + + F. Central directory structure: + + [file header 1] + . + . + . + [file header n] + [digital signature] + + File header: + + central file header signature 4 bytes (0x02014b50) + version made by 2 bytes + version needed to extract 2 bytes + general purpose bit flag 2 bytes + compression method 2 bytes + last mod file time 2 bytes + last mod file date 2 bytes + crc-32 4 bytes + compressed size 4 bytes + uncompressed size 4 bytes + file name length 2 bytes + extra field length 2 bytes + file comment length 2 bytes + disk number start 2 bytes + internal file attributes 2 bytes + external file attributes 4 bytes + relative offset of local header 4 bytes + + file name (variable size) + extra field (variable size) + file comment (variable size) + + Digital signature: + + header signature 4 bytes (0x05054b50) + size of data 2 bytes + signature data (variable size) + + With the introduction of the Central Directory Encryption + feature in version 6.2 of this specification, the Central + Directory Structure may be stored both compressed and encrypted. + Although not required, it is assumed when encrypting the + Central Directory Structure, that it will be compressed + for greater storage efficiency. Information on the + Central Directory Encryption feature can be found in the section + describing the Strong Encryption Specification. The Digital + Signature record will be neither compressed nor encrypted. + + + G. Zip64 end of central directory record + + zip64 end of central dir + signature 4 bytes (0x06064b50) + size of zip64 end of central + directory record 8 bytes + version made by 2 bytes + version needed to extract 2 bytes + number of this disk 4 bytes + number of the disk with the + start of the central directory 4 bytes + total number of entries in the + central directory on this disk 8 bytes + total number of entries in the + central directory 8 bytes + size of the central directory 8 bytes + offset of start of central + directory with respect to + the starting disk number 8 bytes + zip64 extensible data sector (variable size) + + The above record structure defines Version 1 of the + Zip64 end of central directory record. Version 1 was + implemented in versions of this specification preceding + 6.2 in support of the ZIP64(tm) large file feature. The + introduction of the Central Directory Encryption feature + implemented in version 6.2 as part of the Strong Encryption + Specification defines Version 2 of this record structure. + Refer to the section describing the Strong Encryption + Specification for details on the version 2 format for + this record. + + + H. Zip64 end of central directory locator + + zip64 end of central dir locator + signature 4 bytes (0x07064b50) + number of the disk with the + start of the zip64 end of + central directory 4 bytes + relative offset of the zip64 + end of central directory record 8 bytes + total number of disks 4 bytes + + + I. End of central directory record: + + end of central dir signature 4 bytes (0x06054b50) + number of this disk 2 bytes + number of the disk with the + start of the central directory 2 bytes + total number of entries in the + central directory on this disk 2 bytes + total number of entries in + the central directory 2 bytes + size of the central directory 4 bytes + offset of start of central + directory with respect to + the starting disk number 4 bytes + .ZIP file comment length 2 bytes + .ZIP file comment (variable size) + + + J. Explanation of fields: + + version made by (2 bytes) + + [PKWARE describes "OS made by" now (since 1998) as follows: + The upper byte indicates the compatibility of the file + attribute information. If the external file attributes + are compatible with MS-DOS and can be read by PKZIP for + DOS version 2.04g then this value will be zero. If these + attributes are not compatible, then this value will + identify the host system on which the attributes are + compatible.] + The upper byte indicates the host system (OS) for the + file. Software can use this information to determine + the line record format for text files etc. The current + mappings are: + + 0 - FAT file system (DOS, OS/2, NT) + PKWARE 2.50+ VFAT, NTFS + 1 - Amiga + 2 - OpenVMS + 3 - Unix + 4 - VM/CMS + 5 - Atari ST + 6 - HPFS file system (OS/2, NT 3.x) + 7 - Macintosh + 8 - Z-System + 9 - CP/M + --------------------------------------------------------------------- + PKWARE assignment | Info-ZIP assignment + -----------------------------------|--------------------------------- + 10 - Windows NTFS | TOPS-20 + (since PKZIPW 2.50, but | (assigned Oct-1992, + not used by any PKWARE prog) | no longer used) + 11 - MVS | NTFS file system (WinNT) + | (actively used by Info-ZIP's + | Zip for NT since Sep-1993) + 12 - VSE | SMS/QDOS + --------------------------------------------------------------------- + 13 - Acorn RISC OS + 14 - VFAT file system (Win95, NT) [Info-ZIP reservation, unused] + 15 - MVS [PKWARE describes this assignment as "alternate MVS"] + 16 - BeOS (BeBox or PowerMac) + 17 - Tandem + 18 - OS/400 (IBM) | THEOS + 19 - OS/X (Darwin) + 20 thru 29 - unused + 30 - AtheOS/Syllable + 31 thru 255 - unused + + The lower byte indicates the ZIP specification version + (the version of this document) supported by the software + used to encode the file. The value/10 indicates the major + version number, and the value mod 10 is the minor version + number. + + version needed to extract (2 bytes) + + The minimum supported ZIP specification version needed to + extract the file, mapped as above. This value is based on + the specific format features a ZIP program must support to + be able to extract the file. If multiple features are + applied to a file, the minimum version should be set to the + feature having the highest value. New features or feature + changes affecting the published format specification will be + implemented using higher version numbers than the last + published value to avoid conflict. + + Current minimum feature versions are as defined below: + + 1.0 - Default value + 1.1 - File is a volume label + 2.0 - File is a folder (directory) + 2.0 - File is compressed using Deflate compression + 2.0 - File is encrypted using traditional PKWARE encryption + 2.1 - File is compressed using Deflate64(tm) + 2.5 - File is compressed using PKWARE DCL Implode + 2.7 - File is a patch data set + 4.5 - File uses ZIP64 format extensions + 4.6 - File is compressed using BZIP2 compression* + 5.0 - File is encrypted using DES + 5.0 - File is encrypted using 3DES + 5.0 - File is encrypted using original RC2 encryption + 5.0 - File is encrypted using RC4 encryption + 5.1 - File is encrypted using AES encryption + 5.1 - File is encrypted using corrected RC2 encryption** + 5.2 - File is encrypted using corrected RC2-64 encryption** + 6.1 - File is encrypted using non-OAEP key wrapping*** + 6.2 - Central directory encryption + + + * Early 7.x (pre-7.2) versions of PKZIP incorrectly set the + version needed to extract for BZIP2 compression to be 50 + when it should have been 46. + + ** Refer to the section on Strong Encryption Specification + for additional information regarding RC2 corrections. + + *** Certificate encryption using non-OAEP key wrapping is the + intended mode of operation for all versions beginning with 6.1. + Support for OAEP key wrapping should only be used for + backward compatibility when sending ZIP files to be opened by + versions of PKZIP older than 6.1 (5.0 or 6.0). + + When using ZIP64 extensions, the corresponding value in the + Zip64 end of central directory record should also be set. + This field currently supports only the value 45 to indicate + ZIP64 extensions are present. + + general purpose bit flag: (2 bytes) + + Bit 0: If set, indicates that the file is encrypted. + + (For Method 6 - Imploding) + Bit 1: If the compression method used was type 6, + Imploding, then this bit, if set, indicates + an 8K sliding dictionary was used. If clear, + then a 4K sliding dictionary was used. + Bit 2: If the compression method used was type 6, + Imploding, then this bit, if set, indicates + 3 Shannon-Fano trees were used to encode the + sliding dictionary output. If clear, then 2 + Shannon-Fano trees were used. + + (For Methods 8 and 9 - Deflating) + Bit 2 Bit 1 + 0 0 Normal (-en) compression option was used. + 0 1 Maximum (-exx/-ex) compression option was used. + 1 0 Fast (-ef) compression option was used. + 1 1 Super Fast (-es) compression option was used. + + Note: Bits 1 and 2 are undefined if the compression + method is any other. + + Bit 3: If this bit is set, the fields crc-32, compressed + size and uncompressed size are set to zero in the + local header. The correct values are put in the + data descriptor immediately following the compressed + data. (Note: PKZIP version 2.04g for DOS only + recognizes this bit for method 8 compression, newer + versions of PKZIP recognize this bit for any + compression method.) + [Info-ZIP note: This bit was introduced by PKZIP 2.04 for + DOS. In general, this feature can only be reliably used + together with compression methods that allow intrinsic + detection of the "end-of-compressed-data" condition. From + the set of compression methods described in this Zip archive + specification, only "deflate" and "bzip2" fulfill this + requirement. + Especially, the method STORED does not work! + The Info-ZIP tools recognize this bit regardless of the + compression method; but, they rely on correctly set + "compressed size" information in the central directory entry.] + + Bit 4: Reserved for use with method 8, for enhanced + deflating. + + Bit 5: If this bit is set, this indicates that the file is + compressed patched data. (Note: Requires PKZIP + version 2.70 or greater) + + Bit 6: Strong encryption. If this bit is set, you should + set the version needed to extract value to at least + 50 and you must also set bit 0. If AES encryption + is used, the version needed to extract value must + be at least 51. + + Bit 7: Currently unused. + + Bit 8: Currently unused. + + Bit 9: Currently unused. + + Bit 10: Currently unused. + + Bit 11: Currently unused. + + Bit 12: Reserved by PKWARE for enhanced compression. + + Bit 13: Used when encrypting the Central Directory to indicate + selected data values in the Local Header are masked to + hide their actual values. See the section describing + the Strong Encryption Specification for details. + + Bit 14: Reserved by PKWARE. + + Bit 15: Reserved by PKWARE. + + compression method: (2 bytes) + + (see accompanying documentation for algorithm + descriptions) + + 0 - The file is stored (no compression) + 1 - The file is Shrunk + 2 - The file is Reduced with compression factor 1 + 3 - The file is Reduced with compression factor 2 + 4 - The file is Reduced with compression factor 3 + 5 - The file is Reduced with compression factor 4 + 6 - The file is Imploded + 7 - Reserved for Tokenizing compression algorithm + 8 - The file is Deflated + 9 - Enhanced Deflating using Deflate64(tm) + 10 - PKWARE Data Compression Library Imploding + 11 - Reserved by PKWARE + 12 - File is compressed using BZIP2 algorithm + + date and time fields: (2 bytes each) + + The date and time are encoded in standard MS-DOS format. + If input came from standard input, the date and time are + those at which compression was started for this data. + If encrypting the central directory and general purpose bit + flag 13 is set indicating masking, the value stored in the + Local Header will be zero. + + CRC-32: (4 bytes) + + The CRC-32 algorithm was generously contributed by + David Schwaderer and can be found in his excellent + book "C Programmers Guide to NetBIOS" published by + Howard W. Sams & Co. Inc. The 'magic number' for + the CRC is 0xdebb20e3. The proper CRC pre and post + conditioning is used, meaning that the CRC register + is pre-conditioned with all ones (a starting value + of 0xffffffff) and the value is post-conditioned by + taking the one's complement of the CRC residual. + If bit 3 of the general purpose flag is set, this + field is set to zero in the local header and the correct + value is put in the data descriptor and in the central + directory. If encrypting the central directory and general + purpose bit flag 13 is set indicating masking, the value + stored in the Local Header will be zero. + + compressed size: (4 bytes) + uncompressed size: (4 bytes) + + The size of the file compressed and uncompressed, + respectively. If bit 3 of the general purpose bit flag + is set, these fields are set to zero in the local header + and the correct values are put in the data descriptor and + in the central directory. If an archive is in zip64 format + and the value in this field is 0xFFFFFFFF, the size will be + in the corresponding 8 byte zip64 extended information + extra field. If encrypting the central directory and general + purpose bit flag 13 is set indicating masking, the value stored + for the uncompressed size in the Local Header will be zero. + + file name length: (2 bytes) + extra field length: (2 bytes) + file comment length: (2 bytes) + + The length of the file name, extra field, and comment + fields respectively. The combined length of any + directory record and these three fields should not + generally exceed 65,535 bytes. If input came from standard + input, the file name length is set to zero. + + [Info-ZIP note: + This feature is not yet supported by any PKWARE version of ZIP + (at least not in PKZIP for DOS and PKZIP for Windows/WinNT). + The Info-ZIP programs handle standard input differently: + If input came from standard input, the filename is set to "-" + (length one).] + + + disk number start: (2 bytes) + + The number of the disk on which this file begins. If an + archive is in zip64 format and the value in this field is + 0xFFFF, the size will be in the corresponding 4 byte zip64 + extended information extra field. + + internal file attributes: (2 bytes) + + Bits 1 and 2 are reserved for use by PKWARE. + + The lowest bit of this field indicates, if set, that + the file is apparently an ASCII or text file. If not + set, that the file apparently contains binary data. + The remaining bits are unused in version 1.0. + + The 0x0002 bit of this field indicates, if set, that a + 4 byte variable record length control field precedes each + logical record indicating the length of the record. This + flag is independent of text control characters, and if used + in conjunction with text data, includes any control + characters in the total length of the record. This value is + provided for mainframe data transfer support. + + external file attributes: (4 bytes) + + The mapping of the external attributes is + host-system dependent (see 'version made by'). For + MS-DOS, the low order byte is the MS-DOS directory + attribute byte. If input came from standard input, this + field is set to zero. + + relative offset of local header: (4 bytes) + + This is the offset from the start of the first disk on + which this file appears, to where the local header should + be found. If an archive is in zip64 format and the value + in this field is 0xFFFFFFFF, the size will be in the + corresponding 8 byte zip64 extended information extra field. + + file name: (Variable) + + The name of the file, with optional relative path. + The path stored should not contain a drive or + device letter, or a leading slash. All slashes + should be forward slashes '/' as opposed to + backwards slashes '\' for compatibility with Amiga + and Unix file systems etc. If input came from standard + input, there is no file name field. If encrypting + the central directory and general purpose bit flag 13 is set + indicating masking, the file name stored in the Local Header + will not be the actual file name. A masking value consisting + of a unique hexadecimal value will be stored. This value will + be sequentially incremented for each file in the archive. See + the section on the Strong Encryption Specification for details + on retrieving the encrypted file name. + [Info-ZIP discrepancy: + If input came from standard input, the file name is set + to "-" (without the quotes). + As far as we know, the PKWARE specification for "input from + stdin" is not supported by PKZIP/PKUNZIP for DOS, OS/2, Windows + Windows NT.] + + extra field: (Variable) + + This is for expansion. If additional information + needs to be stored for special needs or for specific + platforms, it should be stored here. Earlier versions + of the software can then safely skip this file, and + find the next file or header. This field will be 0 + length in version 1.0. + + In order to allow different programs and different types + of information to be stored in the 'extra' field in .ZIP + files, the following structure should be used for all + programs storing data in this field: + + header1+data1 + header2+data2 . . . + + Each header should consist of: + + Header ID - 2 bytes + Data Size - 2 bytes + + Note: all fields stored in Intel low-byte/high-byte order. + + The Header ID field indicates the type of data that is in + the following data block. + + Header ID's of 0 thru 31 are reserved for use by PKWARE. + The remaining ID's can be used by third party vendors for + proprietary usage. + + The current Header ID mappings defined by PKWARE are: + + 0x0001 ZIP64 extended information extra field + 0x0007 AV Info + 0x0008 Reserved for future Unicode file name data (PFS) + 0x0009 OS/2 extended attributes (also Info-ZIP) + 0x000a NTFS (Win9x/WinNT FileTimes) + 0x000c OpenVMS (also Info-ZIP) + 0x000d Unix + 0x000e Reserved for file stream and fork descriptors + 0x000f Patch Descriptor + 0x0014 PKCS#7 Store for X.509 Certificates + 0x0015 X.509 Certificate ID and Signature for + individual file + 0x0016 X.509 Certificate ID for Central Directory + 0x0017 Strong Encryption Header + 0x0018 Record Management Controls + 0x0019 PKCS#7 Encryption Recipient Certificate List + 0x0065 IBM S/390 (Z390), AS/400 (I400) attributes + - uncompressed + 0x0066 Reserved for IBM S/390 (Z390), AS/400 (I400) + attributes - compressed + + The Header ID mappings defined by Info-ZIP and third parties are: + + 0x07c8 Info-ZIP Macintosh (old, J. Lee) + 0x2605 ZipIt Macintosh (first version) + 0x2705 ZipIt Macintosh v 1.3.5 and newer (w/o full filename) + 0x2805 ZipIt Macintosh 1.3.5+ + 0x334d Info-ZIP Macintosh (new, D. Haase's 'Mac3' field) + 0x4154 Tandem NSK + 0x4341 Acorn/SparkFS (David Pilling) + 0x4453 Windows NT security descriptor (binary ACL) + 0x4704 VM/CMS + 0x470f MVS + 0x4854 Theos, old inofficial port + 0x4b46 FWKCS MD5 (see below) + 0x4c41 OS/2 access control list (text ACL) + 0x4d49 Info-ZIP OpenVMS (obsolete) + 0x4d63 Macintosh SmartZIP, by Macro Bambini + 0x4f4c Xceed original location extra field + 0x5356 AOS/VS (binary ACL) + 0x5455 extended timestamp + 0x554e Xceed unicode extra field + 0x5855 Info-ZIP Unix (original; also OS/2, NT, etc.) + 0x6542 BeOS (BeBox, PowerMac, etc.) + 0x6854 Theos + 0x7441 AtheOS (AtheOS/Syllable attributes) + 0x756e ASi Unix + 0x7855 Info-ZIP Unix (new) + 0xfb4a SMS/QDOS + + Detailed descriptions of Extra Fields defined by third + party mappings will be documented as information on + these data structures is made available to PKWARE. + PKWARE does not guarantee the accuracy of any published + third party data. + + The Data Size field indicates the size of the following + data block. Programs can use this value to skip to the + next header block, passing over any data blocks that are + not of interest. + + Note: As stated above, the size of the entire .ZIP file + header, including the file name, comment, and extra + field should not exceed 64K in size. + + In case two different programs should appropriate the same + Header ID value, it is strongly recommended that each + program place a unique signature of at least two bytes in + size (and preferably 4 bytes or bigger) at the start of + each data area. Every program should verify that its + unique signature is present, in addition to the Header ID + value being correct, before assuming that it is a block of + known type. + + In the following descriptions, note that "Short" means two bytes, + "Long" means four bytes, and "Long-Long" means eight bytes, + regardless of their native sizes. Unless specifically noted, all + integer fields should be interpreted as unsigned (non-negative) + numbers. + + + -ZIP64 Extended Information Extra Field (0x0001): + =============================================== + + The following is the layout of the ZIP64 extended + information "extra" block. If one of the size or + offset fields in the Local or Central directory + record is too small to hold the required data, + a ZIP64 extended information record is created. + The order of the fields in the ZIP64 extended + information record is fixed, but the fields will + only appear if the corresponding Local or Central + directory record field is set to 0xFFFF or 0xFFFFFFFF. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (ZIP64) 0x0001 2 bytes Tag for this "extra" block type + Size 2 bytes Size of this "extra" block + Original + Size 8 bytes Original uncompressed file size + Compressed + Size 8 bytes Size of compressed data + Relative Header + Offset 8 bytes Offset of local header record + Disk Start + Number 4 bytes Number of the disk on which + this file starts + + This entry in the Local header must include BOTH original + and compressed file sizes. + + + -OS/2 Extended Attributes Extra Field (0x0009): + ============================================= + + The following is the layout of the OS/2 extended attributes "extra" + block. (Last Revision 19960922) + + Note: all fields stored in Intel low-byte/high-byte order. + + Local-header version: + + Value Size Description + ----- ---- ----------- + (OS/2) 0x0009 Short tag for this extra block type + TSize Short total data size for this block + BSize Long uncompressed EA data size + CType Short compression type + EACRC Long CRC value for uncompressed EA data + (var.) variable compressed EA data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (OS/2) 0x0009 Short tag for this extra block type + TSize Short total data size for this block (4) + BSize Long size of uncompressed local EA data + + The value of CType is interpreted according to the "compression + method" section above; i.e., 0 for stored, 8 for deflated, etc. + + The OS/2 extended attribute structure (FEA2LIST) is + compressed and then stored in its entirety within this + structure. There will only ever be one "block" of data in + the variable-length field. + + + -OS/2 Access Control List Extra Field: + ==================================== + + The following is the layout of the OS/2 ACL extra block. + (Last Revision 19960922) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (ACL) 0x4c41 Short tag for this extra block type ("AL") + TSize Short total data size for this block + BSize Long uncompressed ACL data size + CType Short compression type + EACRC Long CRC value for uncompressed ACL data + (var.) variable compressed ACL data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (ACL) 0x4c41 Short tag for this extra block type ("AL") + TSize Short total data size for this block (4) + BSize Long size of uncompressed local ACL data + + The value of CType is interpreted according to the "compression + method" section above; i.e., 0 for stored, 8 for deflated, etc. + + The uncompressed ACL data consist of a text header of the form + "ACL1:%hX,%hd\n", where the first field is the OS/2 ACCINFO acc_attr + member and the second is acc_count, followed by acc_count strings + of the form "%s,%hx\n", where the first field is acl_ugname (user + group name) and the second acl_access. This block type will be + extended for other operating systems as needed. + + + -Windows NT Security Descriptor Extra Field (0x4453): + =================================================== + + The following is the layout of the NT Security Descriptor (another + type of ACL) extra block. (Last Revision 19960922) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (SD) 0x4453 Short tag for this extra block type ("SD") + TSize Short total data size for this block + BSize Long uncompressed SD data size + Version Byte version of uncompressed SD data format + CType Short compression type + EACRC Long CRC value for uncompressed SD data + (var.) variable compressed SD data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (SD) 0x4453 Short tag for this extra block type ("SD") + TSize Short total data size for this block (4) + BSize Long size of uncompressed local SD data + + The value of CType is interpreted according to the "compression + method" section above; i.e., 0 for stored, 8 for deflated, etc. + Version specifies how the compressed data are to be interpreted + and allows for future expansion of this extra field type. Currently + only version 0 is defined. + + For version 0, the compressed data are to be interpreted as a single + valid Windows NT SECURITY_DESCRIPTOR data structure, in self-relative + format. + + + -PKWARE Win95/WinNT Extra Field (0x000a): + ======================================= + + The following description covers PKWARE's "NTFS" attributes + "extra" block, introduced with the release of PKZIP 2.50 for + Windows. (Last Revision 20001118) + + (Note: At this time the Mtime, Atime and Ctime values may + be used on any WIN32 system.) + [Info-ZIP note: In the current implementations, this field has + a fixed total data size of 32 bytes and is only stored as local + extra field.] + + Value Size Description + ----- ---- ----------- + (NTFS) 0x000a Short Tag for this "extra" block type + TSize Short Total Data Size for this block + Reserved Long for future use + Tag1 Short NTFS attribute tag value #1 + Size1 Short Size of attribute #1, in bytes + (var.) SubSize1 Attribute #1 data + . + . + . + TagN Short NTFS attribute tag value #N + SizeN Short Size of attribute #N, in bytes + (var.) SubSizeN Attribute #N data + + For NTFS, values for Tag1 through TagN are as follows: + (currently only one set of attributes is defined for NTFS) + + Tag Size Description + ----- ---- ----------- + 0x0001 2 bytes Tag for attribute #1 + Size1 2 bytes Size of attribute #1, in bytes (24) + Mtime 8 bytes 64-bit NTFS file last modification time + Atime 8 bytes 64-bit NTFS file last access time + Ctime 8 bytes 64-bit NTFS file creation time + + The total length for this block is 28 bytes, resulting in a + fixed size value of 32 for the TSize field of the NTFS block. + + The NTFS filetimes are 64-bit unsigned integers, stored in Intel + (least significant byte first) byte order. They determine the + number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch", + which is "01-Jan-1601 00:00:00 UTC". + + + -PKWARE OpenVMS Extra Field (0x000c): + =================================== + + The following is the layout of PKWARE's OpenVMS attributes + "extra" block. (Last Revision 12/17/91) + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (VMS) 0x000c Short Tag for this "extra" block type + TSize Short Total Data Size for this block + CRC Long 32-bit CRC for remainder of the block + Tag1 Short OpenVMS attribute tag value #1 + Size1 Short Size of attribute #1, in bytes + (var.) Size1 Attribute #1 data + . + . + . + TagN Short OpenVMS attribute tage value #N + SizeN Short Size of attribute #N, in bytes + (var.) SizeN Attribute #N data + + Rules: + + 1. There will be one or more of attributes present, which + will each be preceded by the above TagX & SizeX values. + These values are identical to the ATR$C_XXXX and + ATR$S_XXXX constants which are defined in ATR.H under + OpenVMS C. Neither of these values will ever be zero. + + 2. No word alignment or padding is performed. + + 3. A well-behaved PKZIP/OpenVMS program should never produce + more than one sub-block with the same TagX value. Also, + there will never be more than one "extra" block of type + 0x000c in a particular directory record. + + + -Info-ZIP VMS Extra Field: + ======================== + + The following is the layout of Info-ZIP's VMS attributes extra + block for VAX or Alpha AXP. The local-header and central-header + versions are identical. (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (VMS2) 0x4d49 Short tag for this extra block type ("JM") + TSize Short total data size for this block + ID Long block ID + Flags Short info bytes + BSize Short uncompressed block size + Reserved Long (reserved) + (var.) variable compressed VMS file-attributes block + + The block ID is one of the following unterminated strings: + + "VFAB" struct FAB + "VALL" struct XABALL + "VFHC" struct XABFHC + "VDAT" struct XABDAT + "VRDT" struct XABRDT + "VPRO" struct XABPRO + "VKEY" struct XABKEY + "VMSV" version (e.g., "V6.1"; truncated at hyphen) + "VNAM" reserved + + The lower three bits of Flags indicate the compression method. The + currently defined methods are: + + 0 stored (not compressed) + 1 simple "RLE" + 2 deflated + + The "RLE" method simply replaces zero-valued bytes with zero-valued + bits and non-zero-valued bytes with a "1" bit followed by the byte + value. + + The variable-length compressed data contains only the data corre- + sponding to the indicated structure or string. Typically multiple + VMS2 extra fields are present (each with a unique block type). + + + -Info-ZIP Macintosh Extra Field: + ============================== + + The following is the layout of the (old) Info-ZIP resource-fork extra + block for Macintosh. The local-header and central-header versions + are identical. (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (Mac) 0x07c8 Short tag for this extra block type + TSize Short total data size for this block + "JLEE" beLong extra-field signature + FInfo 16 bytes Macintosh FInfo structure + CrDat beLong HParamBlockRec fileParam.ioFlCrDat + MdDat beLong HParamBlockRec fileParam.ioFlMdDat + Flags beLong info bits + DirID beLong HParamBlockRec fileParam.ioDirID + VolName 28 bytes volume name (optional) + + All fields but the first two are in native Macintosh format + (big-endian Motorola order, not little-endian Intel). The least + significant bit of Flags is 1 if the file is a data fork, 0 other- + wise. In addition, if this extra field is present, the filename + has an extra 'd' or 'r' appended to indicate data fork or resource + fork. The 28-byte VolName field may be omitted. + + + -ZipIt Macintosh Extra Field (long): + ================================== + + The following is the layout of the ZipIt extra block for Macintosh. + The local-header and central-header versions are identical. + (Last Revision 19970130) + + Value Size Description + ----- ---- ----------- + (Mac2) 0x2605 Short tag for this extra block type + TSize Short total data size for this block + "ZPIT" beLong extra-field signature + FnLen Byte length of FileName + FileName variable full Macintosh filename + FileType Byte[4] four-byte Mac file type string + Creator Byte[4] four-byte Mac creator string + + + -ZipIt Macintosh Extra Field (short, for files): + ============================================== + + The following is the layout of a shortened variant of the + ZipIt extra block for Macintosh (without "full name" entry). + This variant is used by ZipIt 1.3.5 and newer for entries of + files (not directories) that do not have a MacBinary encoded + file. The local-header and central-header versions are identical. + (Last Revision 20030602) + + Value Size Description + ----- ---- ----------- + (Mac2b) 0x2705 Short tag for this extra block type + TSize Short total data size for this block (min. 12) + "ZPIT" beLong extra-field signature + FileType Byte[4] four-byte Mac file type string + Creator Byte[4] four-byte Mac creator string + fdFlags beShort attributes from FInfo.frFlags, + may be omitted + 0x0000 beShort reserved, may be omitted + + + -ZipIt Macintosh Extra Field (short, for directories): + ==================================================== + + The following is the layout of a shortened variant of the + ZipIt extra block for Macintosh used only for directory + entries. This variant is used by ZipIt 1.3.5 and newer to + save some optional Mac-specific information about directories. + The local-header and central-header versions are identical. + + Value Size Description + ----- ---- ----------- + (Mac2c) 0x2805 Short tag for this extra block type + TSize Short total data size for this block (12) + "ZPIT" beLong extra-field signature + frFlags beShort attributes from DInfo.frFlags, may + be omitted + View beShort ZipIt view flag, may be omitted + + + The View field specifies ZipIt-internal settings as follows: + + Bits of the Flags: + bit 0 if set, the folder is shown expanded (open) + when the archive contents are viewed in ZipIt. + bits 1-15 reserved, zero; + + + -Info-ZIP Macintosh Extra Field (new): + ==================================== + + The following is the layout of the (new) Info-ZIP extra + block for Macintosh, designed by Dirk Haase. + All values are in little-endian. + (Last Revision 19981005) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (Mac3) 0x334d Short tag for this extra block type ("M3") + TSize Short total data size for this block + BSize Long uncompressed finder attribute data size + Flags Short info bits + fdType Byte[4] Type of the File (4-byte string) + fdCreator Byte[4] Creator of the File (4-byte string) + (CType) Short compression type + (CRC) Long CRC value for uncompressed MacOS data + Attribs variable finder attribute data (see below) + + + Central-header version: + + Value Size Description + ----- ---- ----------- + (Mac3) 0x334d Short tag for this extra block type ("M3") + TSize Short total data size for this block + BSize Long uncompressed finder attribute data size + Flags Short info bits + fdType Byte[4] Type of the File (4-byte string) + fdCreator Byte[4] Creator of the File (4-byte string) + + The third bit of Flags in both headers indicates whether + the LOCAL extra field is uncompressed (and therefore whether CType + and CRC are omitted): + + Bits of the Flags: + bit 0 if set, file is a data fork; otherwise unset + bit 1 if set, filename will be not changed + bit 2 if set, Attribs is uncompressed (no CType, CRC) + bit 3 if set, date and times are in 64 bit + if zero date and times are in 32 bit. + bit 4 if set, timezone offsets fields for the native + Mac times are omitted (UTC support deactivated) + bits 5-15 reserved; + + + Attributes: + + Attribs is a Mac-specific block of data in little-endian format with + the following structure (if compressed, uncompress it first): + + Value Size Description + ----- ---- ----------- + fdFlags Short Finder Flags + fdLocation.v Short Finder Icon Location + fdLocation.h Short Finder Icon Location + fdFldr Short Folder containing file + + FXInfo 16 bytes Macintosh FXInfo structure + FXInfo-Structure: + fdIconID Short + fdUnused[3] Short unused but reserved 6 bytes + fdScript Byte Script flag and number + fdXFlags Byte More flag bits + fdComment Short Comment ID + fdPutAway Long Home Dir ID + + FVersNum Byte file version number + may be not used by MacOS + ACUser Byte directory access rights + + FlCrDat ULong date and time of creation + FlMdDat ULong date and time of last modification + FlBkDat ULong date and time of last backup + These time numbers are original Mac FileTime values (local time!). + Currently, date-time width is 32-bit, but future version may + support be 64-bit times (see flags) + + CrGMTOffs Long(signed!) difference "local Creat. time - UTC" + MdGMTOffs Long(signed!) difference "local Modif. time - UTC" + BkGMTOffs Long(signed!) difference "local Backup time - UTC" + These "local time - UTC" differences (stored in seconds) may be + used to support timestamp adjustment after inter-timezone transfer. + These fields are optional; bit 4 of the flags word controls their + presence. + + Charset Short TextEncodingBase (Charset) + valid for the following two fields + + FullPath variable Path of the current file. + Zero terminated string (C-String) + Currently coded in the native Charset. + + Comment variable Finder Comment of the current file. + Zero terminated string (C-String) + Currently coded in the native Charset. + + + -SmartZIP Macintosh Extra Field: + ==================================== + + The following is the layout of the SmartZIP extra + block for Macintosh, designed by Marco Bambini. + + Local-header version: + + Value Size Description + ----- ---- ----------- + 0x4d63 Short tag for this extra block type ("cM") + TSize Short total data size for this block (64) + "dZip" beLong extra-field signature + fdType Byte[4] Type of the File (4-byte string) + fdCreator Byte[4] Creator of the File (4-byte string) + fdFlags beShort Finder Flags + fdLocation.v beShort Finder Icon Location + fdLocation.h beShort Finder Icon Location + fdFldr beShort Folder containing file + CrDat beLong HParamBlockRec fileParam.ioFlCrDat + MdDat beLong HParamBlockRec fileParam.ioFlMdDat + frScroll.v Byte vertical pos. of folder's scroll bar + fdScript Byte Script flag and number + frScroll.h Byte horizontal pos. of folder's scroll bar + fdXFlags Byte More flag bits + FileName Byte[32] full Macintosh filename (pascal string) + + All fields but the first two are in native Macintosh format + (big-endian Motorola order, not little-endian Intel). + The extra field size is fixed to 64 bytes. + The local-header and central-header versions are identical. + + + -Acorn SparkFS Extra Field: + ========================= + + The following is the layout of David Pilling's SparkFS extra block + for Acorn RISC OS. The local-header and central-header versions are + identical. (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (Acorn) 0x4341 Short tag for this extra block type ("AC") + TSize Short total data size for this block (20) + "ARC0" Long extra-field signature + LoadAddr Long load address or file type + ExecAddr Long exec address + Attr Long file permissions + Zero Long reserved; always zero + + The following bits of Attr are associated with the given file + permissions: + + bit 0 user-writable ('W') + bit 1 user-readable ('R') + bit 2 reserved + bit 3 locked ('L') + bit 4 publicly writable ('w') + bit 5 publicly readable ('r') + bit 6 reserved + bit 7 reserved + + + -VM/CMS Extra Field: + ================== + + The following is the layout of the file-attributes extra block for + VM/CMS. The local-header and central-header versions are + identical. (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (VM/CMS) 0x4704 Short tag for this extra block type + TSize Short total data size for this block + flData variable file attributes data + + flData is an uncompressed fldata_t struct. + + + -MVS Extra Field: + =============== + + The following is the layout of the file-attributes extra block for + MVS. The local-header and central-header versions are identical. + (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (MVS) 0x470f Short tag for this extra block type + TSize Short total data size for this block + flData variable file attributes data + + flData is an uncompressed fldata_t struct. + + + -PKWARE Unix Extra Field (0x000d): + ================================ + + The following is the layout of PKWARE's Unix "extra" block. + It was introduced with the release of PKZIP for Unix 2.50. + Note: all fields are stored in Intel low-byte/high-byte order. + (Last Revision 19980901) + + This field has a minimum data size of 12 bytes and is only stored + as local extra field. + + Value Size Description + ----- ---- ----------- + (Unix0) 0x000d Short Tag for this "extra" block type + TSize Short Total Data Size for this block + AcTime Long time of last access (UTC/GMT) + ModTime Long time of last modification (UTC/GMT) + UID Short Unix user ID + GID Short Unix group ID + (var) variable Variable length data field + + The variable length data field will contain file type + specific data. Currently the only values allowed are + the original "linked to" file names for hard or symbolic + links, and the major and minor device node numbers for + character and block device nodes. Since device nodes + cannot be either symbolic or hard links, only one set of + variable length data is stored. Link files will have the + name of the original file stored. This name is NOT NULL + terminated. Its size can be determined by checking TSize - + 12. Device entries will have eight bytes stored as two 4 + byte entries (in little-endian format). The first entry + will be the major device number, and the second the minor + device number. + + [Info-ZIP note: The fixed part of this field has the same layout as + Info-ZIP's abandoned "Unix1 timestamps & owner ID info" extra field; + only the two tag bytes are different.] + + + -PATCH Descriptor Extra Field (0x000f): + ===================================== + + The following is the layout of the Patch Descriptor "extra" + block. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (Patch) 0x000f Short Tag for this "extra" block type + TSize Short Size of the total "extra" block + Version Short Version of the descriptor + Flags Long Actions and reactions (see below) + OldSize Long Size of the file about to be patched + OldCRC Long 32-bit CRC of the file about to be patched + NewSize Long Size of the resulting file + NewCRC Long 32-bit CRC of the resulting file + + + Actions and reactions + + Bits Description + ---- ---------------- + 0 Use for auto detection + 1 Treat as a self-patch + 2-3 RESERVED + 4-5 Action (see below) + 6-7 RESERVED + 8-9 Reaction (see below) to absent file + 10-11 Reaction (see below) to newer file + 12-13 Reaction (see below) to unknown file + 14-15 RESERVED + 16-31 RESERVED + + Actions + + Action Value + ------ ----- + none 0 + add 1 + delete 2 + patch 3 + + Reactions + + Reaction Value + -------- ----- + ask 0 + skip 1 + ignore 2 + fail 3 + + Patch support is provided by PKPatchMaker(tm) technology and is + covered under U.S. Patents and Patents Pending. + + + -PKCS#7 Store for X.509 Certificates (0x0014): + ============================================ + + This field contains information about each of the certificates + files may be signed with. When the Central Directory Encryption + feature is enabled for a ZIP file, this record will appear in + the Archive Extra Data Record, otherwise it will appear in the + first central directory record and will be ignored in any + other record. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (Store) 0x0014 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of the store data + SData TSize Data about the store + + SData + Value Size Description + ----- ---- ----------- + Version 2 bytes Version number, 0x0001 for now + StoreD (variable) Actual store data + + The StoreD member is suitable for passing as the pbData + member of a CRYPT_DATA_BLOB to the CertOpenStore() function + in Microsoft's CryptoAPI. The SSize member above will be + cbData + 6, where cbData is the cbData member of the same + CRYPT_DATA_BLOB. The encoding type to pass to + CertOpenStore() should be + PKCS_7_ANS_ENCODING | X509_ASN_ENCODING. + + + -X.509 Certificate ID and Signature for individual file (0x0015): + =============================================================== + + This field contains the information about which certificate in + the PKCS#7 store was used to sign a particular file. It also + contains the signature data. This field can appear multiple + times, but can only appear once per certificate. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (CID) 0x0015 2 bytes Tag for this "extra" block type + CSize 2 bytes Size of Method + Method (variable) + + Method + Value Size Description + ----- ---- ----------- + Version 2 bytes Version number, for now 0x0001 + AlgID 2 bytes Algorithm ID used for signing + IDSize 2 bytes Size of Certificate ID data + CertID (variable) Certificate ID data + SigSize 2 bytes Size of Signature data + Sig (variable) Signature data + + CertID + Value Size Description + ----- ---- ----------- + Size1 4 bytes Size of CertID, should be (IDSize - 4) + Size1 4 bytes A bug in version one causes this value + to appear twice. + IssSize 4 bytes Issuer data size + Issuer (variable) Issuer data + SerSize 4 bytes Serial Number size + Serial (variable) Serial Number data + + The Issuer and IssSize members are suitable for creating a + CRYPT_DATA_BLOB to be the Issuer member of a CERT_INFO + struct. The Serial and SerSize members would be the + SerialNumber member of the same CERT_INFO struct. This + struct would be used to find the certificate in the store + the file was signed with. Those structures are from the MS + CryptoAPI. + + Sig and SigSize are the actual signature data and size + generated by signing the file with the MS CryptoAPI using a + hash created with the given AlgID. + + + -X.509 Certificate ID and Signature for central directory (0x0016): + ================================================================= + + This field contains the information about which certificate in + the PKCS#7 store was used to sign the central directory structure. + When the Central Directory Encryption feature is enabled for a + ZIP file, this record will appear in the Archive Extra Data Record, + otherwise it will appear in the first central directory record, + along with the store. The data structure is the + same as the CID, except that SigSize will be 0, and there + will be no Sig member. + + This field is also kept after the last central directory + record, as the signature data (ID 0x05054b50, it looks like + a central directory record of a different type). This + second copy of the data is the Signature Data member of the + record, and will have a SigSize that is non-zero, and will + have Sig data. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (CDID) 0x0016 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of data that follows + TData TSize Data + + + -Strong Encryption Header (0x0017) (EFS): + =============================== + + Value Size Description + ----- ---- ----------- + 0x0017 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of data that follows + Format 2 bytes Format definition for this record + AlgID 2 bytes Encryption algorithm identifier + Bitlen 2 bytes Bit length of encryption key + Flags 2 bytes Processing flags + CertData TSize-8 Certificate decryption extra field data + (refer to the explanation for CertData + in the section describing the + Certificate Processing Method under + the Strong Encryption Specification) + + + -Record Management Controls (0x0018): + =================================== + + Value Size Description + ----- ---- ----------- +(Rec-CTL) 0x0018 2 bytes Tag for this "extra" block type + CSize 2 bytes Size of total extra block data + Tag1 2 bytes Record control attribute 1 + Size1 2 bytes Size of attribute 1, in bytes + Data1 Size1 Attribute 1 data + . + . + . + TagN 2 bytes Record control attribute N + SizeN 2 bytes Size of attribute N, in bytes + DataN SizeN Attribute N data + + + -PKCS#7 Encryption Recipient Certificate List (0x0019): (EFS) + ===================================================== + + This field contains the information about each of the certificates + that files may be encrypted with. This field should only appear + in the archive extra data record. This field is not required and + serves only to aide archive modifications by preserving public + encryption data. Individual security requirements may dictate + that this data be omitted to deter information exposure. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (CStore) 0x0019 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of the store data + TData TSize Data about the store + + TData: + + Value Size Description + ----- ---- ----------- + Version 2 bytes Format version number - must 0x0001 at this time + CStore (var) PKCS#7 data blob + + + -MVS Extra Field (PKWARE, 0x0065): + ================================ + + The following is the layout of the MVS "extra" block. + Note: Some fields are stored in Big Endian format. + All text is in EBCDIC format unless otherwise specified. + + Value Size Description + ----- ---- ----------- + (MVS) 0x0065 2 bytes Tag for this "extra" block type + TSize 2 bytes Size for the following data block + ID 4 bytes EBCDIC "Z390" 0xE9F3F9F0 or + "T4MV" for TargetFour + (var) TSize-4 Attribute data + + + -OS/400 Extra Field (0x0065): + =========================== + + The following is the layout of the OS/400 "extra" block. + Note: Some fields are stored in Big Endian format. + All text is in EBCDIC format unless otherwise specified. + + Value Size Description + ----- ---- ----------- + (OS400) 0x0065 2 bytes Tag for this "extra" block type + TSize 2 bytes Size for the following data block + ID 4 bytes EBCDIC "I400" 0xC9F4F0F0 or + "T4MV" for TargetFour + (var) TSize-4 Attribute data + + + -Extended Timestamp Extra Field: + ============================== + + The following is the layout of the extended-timestamp extra block. + (Last Revision 19970118) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (time) 0x5455 Short tag for this extra block type ("UT") + TSize Short total data size for this block + Flags Byte info bits + (ModTime) Long time of last modification (UTC/GMT) + (AcTime) Long time of last access (UTC/GMT) + (CrTime) Long time of original creation (UTC/GMT) + + Central-header version: + + Value Size Description + ----- ---- ----------- + (time) 0x5455 Short tag for this extra block type ("UT") + TSize Short total data size for this block + Flags Byte info bits (refers to local header!) + (ModTime) Long time of last modification (UTC/GMT) + + The central-header extra field contains the modification time only, + or no timestamp at all. TSize is used to flag its presence or + absence. But note: + + If "Flags" indicates that Modtime is present in the local header + field, it MUST be present in the central header field, too! + This correspondence is required because the modification time + value may be used to support trans-timezone freshening and + updating operations with zip archives. + + The time values are in standard Unix signed-long format, indicating + the number of seconds since 1 January 1970 00:00:00. The times + are relative to Coordinated Universal Time (UTC), also sometimes + referred to as Greenwich Mean Time (GMT). To convert to local time, + the software must know the local timezone offset from UTC/GMT. + + The lower three bits of Flags in both headers indicate which time- + stamps are present in the LOCAL extra field: + + bit 0 if set, modification time is present + bit 1 if set, access time is present + bit 2 if set, creation time is present + bits 3-7 reserved for additional timestamps; not set + + Those times that are present will appear in the order indicated, but + any combination of times may be omitted. (Creation time may be + present without access time, for example.) TSize should equal + (1 + 4*(number of set bits in Flags)), as the block is currently + defined. Other timestamps may be added in the future. + + + -Info-ZIP Unix Extra Field (type 1): + ================================== + + The following is the layout of the old Info-ZIP extra block for + Unix. It has been replaced by the extended-timestamp extra block + (0x5455) and the Unix type 2 extra block (0x7855). + (Last Revision 19970118) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (Unix1) 0x5855 Short tag for this extra block type ("UX") + TSize Short total data size for this block + AcTime Long time of last access (UTC/GMT) + ModTime Long time of last modification (UTC/GMT) + UID Short Unix user ID (optional) + GID Short Unix group ID (optional) + + Central-header version: + + Value Size Description + ----- ---- ----------- + (Unix1) 0x5855 Short tag for this extra block type ("UX") + TSize Short total data size for this block + AcTime Long time of last access (GMT/UTC) + ModTime Long time of last modification (GMT/UTC) + + The file access and modification times are in standard Unix signed- + long format, indicating the number of seconds since 1 January 1970 + 00:00:00. The times are relative to Coordinated Universal Time + (UTC), also sometimes referred to as Greenwich Mean Time (GMT). To + convert to local time, the software must know the local timezone + offset from UTC/GMT. The modification time may be used by non-Unix + systems to support inter-timezone freshening and updating of zip + archives. + + The local-header extra block may optionally contain UID and GID + info for the file. The local-header TSize value is the only + indication of this. Note that Unix UIDs and GIDs are usually + specific to a particular machine, and they generally require root + access to restore. + + This extra field type is obsolete, but it has been in use since + mid-1994. Therefore future archiving software should continue to + support it. Some guidelines: + + An archive member should either contain the old "Unix1" + extra field block or the new extra field types "time" and/or + "Unix2". + + If both the old "Unix1" block type and one or both of the new + block types "time" and "Unix2" are found, the "Unix1" block + should be considered invalid and ignored. + + Unarchiving software should recognize both old and new extra + field block types, but the info from new types overrides the + old "Unix1" field. + + Archiving software should recognize "Unix1" extra fields for + timestamp comparison but never create it for updated, freshened + or new archive members. When copying existing members to a new + archive, any "Unix1" extra field blocks should be converted to + the new "time" and/or "Unix2" types. + + + -Info-ZIP Unix Extra Field (type 2): + ================================== + + The following is the layout of the new Info-ZIP extra block for + Unix. (Last Revision 19960922) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (Unix2) 0x7855 Short tag for this extra block type ("Ux") + TSize Short total data size for this block (4) + UID Short Unix user ID + GID Short Unix group ID + + Central-header version: + + Value Size Description + ----- ---- ----------- + (Unix2) 0x7855 Short tag for this extra block type ("Ux") + TSize Short total data size for this block (0) + + The data size of the central-header version is zero; it is used + solely as a flag that UID/GID info is present in the local-header + extra field. If additional fields are ever added to the local + version, the central version may be extended to indicate this. + + Note that Unix UIDs and GIDs are usually specific to a particular + machine, and they generally require root access to restore. + + + -ASi Unix Extra Field: + ==================== + + The following is the layout of the ASi extra block for Unix. The + local-header and central-header versions are identical. + (Last Revision 19960916) + + Value Size Description + ----- ---- ----------- + (Unix3) 0x756e Short tag for this extra block type ("nu") + TSize Short total data size for this block + CRC Long CRC-32 of the remaining data + Mode Short file permissions + SizDev Long symlink'd size OR major/minor dev num + UID Short user ID + GID Short group ID + (var.) variable symbolic link filename + + Mode is the standard Unix st_mode field from struct stat, containing + user/group/other permissions, setuid/setgid and symlink info, etc. + + If Mode indicates that this file is a symbolic link, SizDev is the + size of the file to which the link points. Otherwise, if the file + is a device, SizDev contains the standard Unix st_rdev field from + struct stat (includes the major and minor numbers of the device). + SizDev is undefined in other cases. + + If Mode indicates that the file is a symbolic link, the final field + will be the name of the file to which the link points. The file- + name length can be inferred from TSize. + + [Note that TSize may incorrectly refer to the data size not counting + the CRC; i.e., it may be four bytes too small.] + + + -BeOS Extra Field: + ================ + + The following is the layout of the file-attributes extra block for + BeOS. (Last Revision 19970531) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (BeOS) 0x6542 Short tag for this extra block type ("Be") + TSize Short total data size for this block + BSize Long uncompressed file attribute data size + Flags Byte info bits + (CType) Short compression type + (CRC) Long CRC value for uncompressed file attribs + Attribs variable file attribute data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (BeOS) 0x6542 Short tag for this extra block type ("Be") + TSize Short total data size for this block (5) + BSize Long size of uncompr. local EF block data + Flags Byte info bits + + The least significant bit of Flags in both headers indicates whether + the LOCAL extra field is uncompressed (and therefore whether CType + and CRC are omitted): + + bit 0 if set, Attribs is uncompressed (no CType, CRC) + bits 1-7 reserved; if set, assume error or unknown data + + Currently the only supported compression types are deflated (type 8) + and stored (type 0); the latter is not used by Info-ZIP's Zip but is + supported by UnZip. + + Attribs is a BeOS-specific block of data in big-endian format with + the following structure (if compressed, uncompress it first): + + Value Size Description + ----- ---- ----------- + Name variable attribute name (null-terminated string) + Type Long attribute type (32-bit unsigned integer) + Size Long Long data size for this sub-block (64 bits) + Data variable attribute data + + The attribute structure is repeated for every attribute. The Data + field may contain anything--text, flags, bitmaps, etc. + + + -AtheOS Extra Field: + ================== + + The following is the layout of the file-attributes extra block for + AtheOS. This field is a very close spin-off from the BeOS e.f. + The only differences are: + - a new extra field signature + - numeric field in the attributes data are stored in little-endian + format ("i386" was initial hardware for AtheOS) + (Last Revision 20040908) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (AtheOS) 0x7441 Short tag for this extra block type ("At") + TSize Short total data size for this block + BSize Long uncompressed file attribute data size + Flags Byte info bits + (CType) Short compression type + (CRC) Long CRC value for uncompressed file attribs + Attribs variable file attribute data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (AtheOS) 0x7441 Short tag for this extra block type ("At") + TSize Short total data size for this block (5) + BSize Long size of uncompr. local EF block data + Flags Byte info bits + + The least significant bit of Flags in both headers indicates whether + the LOCAL extra field is uncompressed (and therefore whether CType + and CRC are omitted): + + bit 0 if set, Attribs is uncompressed (no CType, CRC) + bits 1-7 reserved; if set, assume error or unknown data + + Currently the only supported compression types are deflated (type 8) + and stored (type 0); the latter is not used by Info-ZIP's Zip but is + supported by UnZip. + + Attribs is a AtheOS-specific block of data in little-endian format + with the following structure (if compressed, uncompress it first): + + Value Size Description + ----- ---- ----------- + Name variable attribute name (null-terminated string) + Type Long attribute type (32-bit unsigned integer) + Size Long Long data size for this sub-block (64 bits) + Data variable attribute data + + The attribute structure is repeated for every attribute. The Data + field may contain anything--text, flags, bitmaps, etc. + + + -SMS/QDOS Extra Field: + ==================== + + The following is the layout of the file-attributes extra block for + SMS/QDOS. The local-header and central-header versions are identical. + (Last Revision 19960929) + + Value Size Description + ----- ---- ----------- + (QDOS) 0xfb4a Short tag for this extra block type + TSize Short total data size for this block + LongID Long extra-field signature + (ExtraID) Long additional signature/flag bytes + QDirect 64 bytes qdirect structure + + LongID may be "QZHD" or "QDOS". In the latter case, ExtraID will + be present. Its first three bytes are "02\0"; the last byte is + currently undefined. + + QDirect contains the file's uncompressed directory info (qdirect + struct). Its elements are in native (big-endian) format: + + d_length beLong file length + d_access byte file access type + d_type byte file type + d_datalen beLong data length + d_reserved beLong unused + d_szname beShort size of filename + d_name 36 bytes filename + d_update beLong time of last update + d_refdate beLong file version number + d_backup beLong time of last backup (archive date) + + + -AOS/VS Extra Field: + ================== + + The following is the layout of the extra block for Data General + AOS/VS. The local-header and central-header versions are identical. + (Last Revision 19961125) + + Value Size Description + ----- ---- ----------- + (AOSVS) 0x5356 Short tag for this extra block type ("VS") + TSize Short total data size for this block + "FCI\0" Long extra-field signature + Version Byte version of AOS/VS extra block (10 = 1.0) + Fstat variable fstat packet + AclBuf variable raw ACL data ($MXACL bytes) + + Fstat contains the file's uncompressed fstat packet, which is one of + the following: + + normal fstat packet (P_FSTAT struct) + DIR/CPD fstat packet (P_FSTAT_DIR struct) + unit (device) fstat packet (P_FSTAT_UNIT struct) + IPC file fstat packet (P_FSTAT_IPC struct) + + AclBuf contains the raw ACL data; its length is $MXACL. + + + -Tandem NSK Extra Field: + ====================== + + The following is the layout of the file-attributes extra block for + Tandem NSK. The local-header and central-header versions are + identical. (Last Revision 19981221) + + Value Size Description + ----- ---- ----------- + (TA) 0x4154 Short tag for this extra block type ("TA") + TSize Short total data size for this block (20) + NSKattrs 20 Bytes NSK attributes + + + -THEOS Extra Field: + ================= + + The following is the layout of the file-attributes extra block for + Theos. The local-header and central-header versions are identical. + (Last Revision 19990206) + + Value Size Description + ----- ---- ----------- + (Theos) 0x6854 Short 'Th' signature + size Short size of extra block + flags Byte reserved for future use + filesize Long file size + fileorg Byte type of file (see below) + keylen Short key length for indexed and keyed files, + data segment size for 16 bits programs + reclen Short record length for indexed,keyed and direct, + text segment size for 16 bits programs + filegrow Byte growing factor for indexed,keyed and direct + protect Byte protections (see below) + reserved Short reserved for future use + + File types + ========== + + 0x80 library (keyed access list of files) + 0x40 directory + 0x10 stream file + 0x08 direct file + 0x04 keyed file + 0x02 indexed file + 0x0e reserved + 0x01 16 bits real mode program (obsolete) + 0x21 16 bits protected mode program + 0x41 32 bits protected mode program + + Protection codes + ================ + + User protection + --------------- + 0x01 non readable + 0x02 non writable + 0x04 non executable + 0x08 non erasable + + Other protection + ---------------- + 0x10 non readable + 0x20 non writable + 0x40 non executable Theos before 4.0 + 0x40 modified Theos 4.x + 0x80 not hidden + + + -THEOS old inofficial Extra Field: + ================================ + + The following is the layout of an inoffical former version of a + Theos file-attributes extra blocks. This layout was never published + and is no longer created. However, UnZip can optionally support it + when compiling with the option flag OLD_THEOS_EXTRA defined. + Both the local-header and central-header versions are identical. + (Last Revision 19990206) + + Value Size Description + ----- ---- ----------- + (THS0) 0x4854 Short 'TH' signature + size Short size of extra block + flags Short reserved for future use + filesize Long file size + reclen Short record length for indexed,keyed and direct, + text segment size for 16 bits programs + keylen Short key length for indexed and keyed files, + data segment size for 16 bits programs + filegrow Byte growing factor for indexed,keyed and direct + reserved 3 Bytes reserved for future use + + + -FWKCS MD5 Extra Field (0x4b46): + ============================== + + The FWKCS Contents_Signature System, used in automatically + identifying files independent of filename, optionally adds + and uses an extra field to support the rapid creation of + an enhanced contents_signature. + There is no local-header version; the following applies + only to the central header. (Last Revision 19961207) + + Central-header version: + + Value Size Description + ----- ---- ----------- + (MD5) 0x4b46 Short tag for this extra block type ("FK") + TSize Short total data size for this block (19) + "MD5" 3 bytes extra-field signature + MD5hash 16 bytes 128-bit MD5 hash of uncompressed data + (low byte first) + + When FWKCS revises a .ZIP file central directory to add + this extra field for a file, it also replaces the + central directory entry for that file's uncompressed + file length with a measured value. + + FWKCS provides an option to strip this extra field, if + present, from a .ZIP file central directory. In adding + this extra field, FWKCS preserves .ZIP file Authenticity + Verification; if stripping this extra field, FWKCS + preserves all versions of AV through PKZIP version 2.04g. + + FWKCS, and FWKCS Contents_Signature System, are + trademarks of Frederick W. Kantor. + + (1) R. Rivest, RFC1321.TXT, MIT Laboratory for Computer + Science and RSA Data Security, Inc., April 1992. + ll.76-77: "The MD5 algorithm is being placed in the + public domain for review and possible adoption as a + standard." + + + file comment: (Variable) + + The comment for this file. + + number of this disk: (2 bytes) + + The number of this disk, which contains central + directory end record. If an archive is in zip64 format + and the value in this field is 0xFFFF, the size will + be in the corresponding 4 byte zip64 end of central + directory field. + + number of the disk with the start of the central directory: (2 bytes) + + The number of the disk on which the central + directory starts. If an archive is in zip64 format + and the value in this field is 0xFFFF, the size will + be in the corresponding 4 byte zip64 end of central + directory field. + + total number of entries in the central dir on this disk: (2 bytes) + + The number of central directory entries on this disk. + If an archive is in zip64 format and the value in + this field is 0xFFFF, the size will be in the + corresponding 8 byte zip64 end of central + directory field. + + total number of entries in the central dir: (2 bytes) + + The total number of files in the .ZIP file. If an + archive is in zip64 format and the value in this field + is 0xFFFF, the size will be in the corresponding 8 byte + zip64 end of central directory field. + + size of the central directory: (4 bytes) + + The size (in bytes) of the entire central directory. + If an archive is in zip64 format and the value in + this field is 0xFFFFFFFF, the size will be in the + corresponding 8 byte zip64 end of central + directory field. + + offset of start of central directory with respect to + the starting disk number: (4 bytes) + + Offset of the start of the central directory on the + disk on which the central directory starts. If an + archive is in zip64 format and the value in this + field is 0xFFFFFFFF, the size will be in the + corresponding 8 byte zip64 end of central + directory field. + + .ZIP file comment length: (2 bytes) + + The length of the comment for this .ZIP file. + + .ZIP file comment: (Variable) + + The comment for this .ZIP file. ZIP file comment data + is stored unsecured. No encryption or data authentication + is applied to this area at this time. Confidential information + should not be stored in this section. + + zip64 extensible data sector (variable size) + + (currently reserved for use by PKWARE) + + + K. General notes: + + 1) All fields unless otherwise noted are unsigned and stored + in Intel low-byte:high-byte, low-word:high-word order. + + 2) String fields are not null terminated, since the + length is given explicitly. + + 3) Local headers should not span disk boundaries. Also, even + though the central directory can span disk boundaries, no + single record in the central directory should be split + across disks. + + 4) The entries in the central directory may not necessarily + be in the same order that files appear in the .ZIP file. + + 5) Spanned/Split archives created using PKZIP for Windows + (V2.50 or greater), PKZIP Command Line (V2.50 or greater), + or PKZIP Explorer will include a special spanning + signature as the first 4 bytes of the first segment of + the archive. This signature (0x08074b50) will be + followed immediately by the local header signature for + the first file in the archive. A special spanning + marker may also appear in spanned/split archives if the + spanning or splitting process starts but only requires + one segment. In this case the 0x08074b50 signature + will be replaced with the temporary spanning marker + signature of 0x30304b50. Spanned/split archives + created with this special signature are compatible with + all versions of PKZIP from PKWARE. Split archives can + only be uncompressed by other versions of PKZIP that + know how to create a split archive. + + 6) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + Zip64 format record should be created. + + 7) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + +V. UnShrinking - Method 1 +------------------------- + +Shrinking is a Dynamic Ziv-Lempel-Welch compression algorithm +with partial clearing. The initial code size is 9 bits, and +the maximum code size is 13 bits. Shrinking differs from +conventional Dynamic Ziv-Lempel-Welch implementations in several +respects: + +1) The code size is controlled by the compressor, and is not + automatically increased when codes larger than the current + code size are created (but not necessarily used). When + the decompressor encounters the code sequence 256 + (decimal) followed by 1, it should increase the code size + read from the input stream to the next bit size. No + blocking of the codes is performed, so the next code at + the increased size should be read from the input stream + immediately after where the previous code at the smaller + bit size was read. Again, the decompressor should not + increase the code size used until the sequence 256,1 is + encountered. + +2) When the table becomes full, total clearing is not + performed. Rather, when the compressor emits the code + sequence 256,2 (decimal), the decompressor should clear + all leaf nodes from the Ziv-Lempel tree, and continue to + use the current code size. The nodes that are cleared + from the Ziv-Lempel tree are then re-used, with the lowest + code value re-used first, and the highest code value + re-used last. The compressor can emit the sequence 256,2 + at any time. + + +VI. Expanding - Methods 2-5 +--------------------------- + +The Reducing algorithm is actually a combination of two +distinct algorithms. The first algorithm compresses repeated +byte sequences, and the second algorithm takes the compressed +stream from the first algorithm and applies a probabilistic +compression method. + +The probabilistic compression stores an array of 'follower +sets' S(j), for j=0 to 255, corresponding to each possible +ASCII character. Each set contains between 0 and 32 +characters, to be denoted as S(j)[0],...,S(j)[m], where m<32. +The sets are stored at the beginning of the data area for a +Reduced file, in reverse order, with S(255) first, and S(0) +last. + +The sets are encoded as { N(j), S(j)[0],...,S(j)[N(j)-1] }, +where N(j) is the size of set S(j). N(j) can be 0, in which +case the follower set for S(j) is empty. Each N(j) value is +encoded in 6 bits, followed by N(j) eight bit character values +corresponding to S(j)[0] to S(j)[N(j)-1] respectively. If +N(j) is 0, then no values for S(j) are stored, and the value +for N(j-1) immediately follows. + +Immediately after the follower sets, is the compressed data +stream. The compressed data stream can be interpreted for the +probabilistic decompression as follows: + + +let Last-Character <- 0. +loop until done + if the follower set S(Last-Character) is empty then + read 8 bits from the input stream, and copy this + value to the output stream. + otherwise if the follower set S(Last-Character) is non-empty then + read 1 bit from the input stream. + if this bit is not zero then + read 8 bits from the input stream, and copy this + value to the output stream. + otherwise if this bit is zero then + read B(N(Last-Character)) bits from the input + stream, and assign this value to I. + Copy the value of S(Last-Character)[I] to the + output stream. + + assign the last value placed on the output stream to + Last-Character. +end loop + + +B(N(j)) is defined as the minimal number of bits required to +encode the value N(j)-1. + + +The decompressed stream from above can then be expanded to +re-create the original file as follows: + + +let State <- 0. + +loop until done + read 8 bits from the input stream into C. + case State of + 0: if C is not equal to DLE (144 decimal) then + copy C to the output stream. + otherwise if C is equal to DLE then + let State <- 1. + + 1: if C is non-zero then + let V <- C. + let Len <- L(V) + let State <- F(Len). + otherwise if C is zero then + copy the value 144 (decimal) to the output stream. + let State <- 0 + + 2: let Len <- Len + C + let State <- 3. + + 3: move backwards D(V,C) bytes in the output stream + (if this position is before the start of the output + stream, then assume that all the data before the + start of the output stream is filled with zeros). + copy Len+3 bytes from this position to the output stream. + let State <- 0. + end case +end loop + + +The functions F,L, and D are dependent on the 'compression +factor', 1 through 4, and are defined as follows: + +For compression factor 1: + L(X) equals the lower 7 bits of X. + F(X) equals 2 if X equals 127 otherwise F(X) equals 3. + D(X,Y) equals the (upper 1 bit of X) * 256 + Y + 1. +For compression factor 2: + L(X) equals the lower 6 bits of X. + F(X) equals 2 if X equals 63 otherwise F(X) equals 3. + D(X,Y) equals the (upper 2 bits of X) * 256 + Y + 1. +For compression factor 3: + L(X) equals the lower 5 bits of X. + F(X) equals 2 if X equals 31 otherwise F(X) equals 3. + D(X,Y) equals the (upper 3 bits of X) * 256 + Y + 1. +For compression factor 4: + L(X) equals the lower 4 bits of X. + F(X) equals 2 if X equals 15 otherwise F(X) equals 3. + D(X,Y) equals the (upper 4 bits of X) * 256 + Y + 1. + + +VII. Imploding - Method 6 +------------------------- + +The Imploding algorithm is actually a combination of two distinct +algorithms. The first algorithm compresses repeated byte +sequences using a sliding dictionary. The second algorithm is +used to compress the encoding of the sliding dictionary output, +using multiple Shannon-Fano trees. + +The Imploding algorithm can use a 4K or 8K sliding dictionary +size. The dictionary size used can be determined by bit 1 in the +general purpose flag word; a 0 bit indicates a 4K dictionary +while a 1 bit indicates an 8K dictionary. + +The Shannon-Fano trees are stored at the start of the compressed +file. The number of trees stored is defined by bit 2 in the +general purpose flag word; a 0 bit indicates two trees stored, a +1 bit indicates three trees are stored. If 3 trees are stored, +the first Shannon-Fano tree represents the encoding of the +Literal characters, the second tree represents the encoding of +the Length information, the third represents the encoding of the +Distance information. When 2 Shannon-Fano trees are stored, the +Length tree is stored first, followed by the Distance tree. + +The Literal Shannon-Fano tree, if present is used to represent +the entire ASCII character set, and contains 256 values. This +tree is used to compress any data not compressed by the sliding +dictionary algorithm. When this tree is present, the Minimum +Match Length for the sliding dictionary is 3. If this tree is +not present, the Minimum Match Length is 2. + +The Length Shannon-Fano tree is used to compress the Length part +of the (length,distance) pairs from the sliding dictionary +output. The Length tree contains 64 values, ranging from the +Minimum Match Length, to 63 plus the Minimum Match Length. + +The Distance Shannon-Fano tree is used to compress the Distance +part of the (length,distance) pairs from the sliding dictionary +output. The Distance tree contains 64 values, ranging from 0 to +63, representing the upper 6 bits of the distance value. The +distance values themselves will be between 0 and the sliding +dictionary size, either 4K or 8K. + +The Shannon-Fano trees themselves are stored in a compressed +format. The first byte of the tree data represents the number of +bytes of data representing the (compressed) Shannon-Fano tree +minus 1. The remaining bytes represent the Shannon-Fano tree +data encoded as: + + High 4 bits: Number of values at this bit length + 1. (1 - 16) + Low 4 bits: Bit Length needed to represent value + 1. (1 - 16) + +The Shannon-Fano codes can be constructed from the bit lengths +using the following algorithm: + +1) Sort the Bit Lengths in ascending order, while retaining the + order of the original lengths stored in the file. + +2) Generate the Shannon-Fano trees: + + Code <- 0 + CodeIncrement <- 0 + LastBitLength <- 0 + i <- number of Shannon-Fano codes - 1 (either 255 or 63) + + loop while i >= 0 + Code = Code + CodeIncrement + if BitLength(i) <> LastBitLength then + LastBitLength=BitLength(i) + CodeIncrement = 1 shifted left (16 - LastBitLength) + ShannonCode(i) = Code + i <- i - 1 + end loop + + +3) Reverse the order of all the bits in the above ShannonCode() + vector, so that the most significant bit becomes the least + significant bit. For example, the value 0x1234 (hex) would + become 0x2C48 (hex). + +4) Restore the order of Shannon-Fano codes as originally stored + within the file. + +Example: + + This example will show the encoding of a Shannon-Fano tree + of size 8. Notice that the actual Shannon-Fano trees used + for Imploding are either 64 or 256 entries in size. + +Example: 0x02, 0x42, 0x01, 0x13 + + The first byte indicates 3 values in this table. Decoding the + bytes: + 0x42 = 5 codes of 3 bits long + 0x01 = 1 code of 2 bits long + 0x13 = 2 codes of 4 bits long + + This would generate the original bit length array of: + (3, 3, 3, 3, 3, 2, 4, 4) + + There are 8 codes in this table for the values 0 thru 7. Using + the algorithm to obtain the Shannon-Fano codes produces: + + Reversed Order Original +Val Sorted Constructed Code Value Restored Length +--- ------ ----------------- -------- -------- ------ +0: 2 1100000000000000 11 101 3 +1: 3 1010000000000000 101 001 3 +2: 3 1000000000000000 001 110 3 +3: 3 0110000000000000 110 010 3 +4: 3 0100000000000000 010 100 3 +5: 3 0010000000000000 100 11 2 +6: 4 0001000000000000 1000 1000 4 +7: 4 0000000000000000 0000 0000 4 + + +The values in the Val, Order Restored and Original Length columns +now represent the Shannon-Fano encoding tree that can be used for +decoding the Shannon-Fano encoded data. How to parse the +variable length Shannon-Fano values from the data stream is beyond +the scope of this document. (See the references listed at the end of +this document for more information.) However, traditional decoding +schemes used for Huffman variable length decoding, such as the +Greenlaw algorithm, can be successfully applied. + +The compressed data stream begins immediately after the +compressed Shannon-Fano data. The compressed data stream can be +interpreted as follows: + +loop until done + read 1 bit from input stream. + + if this bit is non-zero then (encoded data is literal data) + if Literal Shannon-Fano tree is present + read and decode character using Literal Shannon-Fano tree. + otherwise + read 8 bits from input stream. + copy character to the output stream. + otherwise (encoded data is sliding dictionary match) + if 8K dictionary size + read 7 bits for offset Distance (lower 7 bits of offset). + otherwise + read 6 bits for offset Distance (lower 6 bits of offset). + + using the Distance Shannon-Fano tree, read and decode the + upper 6 bits of the Distance value. + + using the Length Shannon-Fano tree, read and decode + the Length value. + + Length <- Length + Minimum Match Length + + if Length = 63 + Minimum Match Length + read 8 bits from the input stream, + add this value to Length. + + move backwards Distance+1 bytes in the output stream, and + copy Length characters from this position to the output + stream. (if this position is before the start of the output + stream, then assume that all the data before the start of + the output stream is filled with zeros). +end loop + +VIII. Tokenizing - Method 7 +--------------------------- + +This method is not used by PKZIP. + +IX. Deflating - Method 8 +------------------------ + +The Deflate algorithm is similar to the Implode algorithm using +a sliding dictionary of up to 32K with secondary compression +from Huffman/Shannon-Fano codes. + +The compressed data is stored in blocks with a header describing +the block and the Huffman codes used in the data block. The header +format is as follows: + + Bit 0: Last Block bit This bit is set to 1 if this is the last + compressed block in the data. + Bits 1-2: Block type + 00 (0) - Block is stored - All stored data is byte aligned. + Skip bits until next byte, then next word = block + length, followed by the ones compliment of the block + length word. Remaining data in block is the stored + data. + + 01 (1) - Use fixed Huffman codes for literal and distance codes. + Lit Code Bits Dist Code Bits + --------- ---- --------- ---- + 0 - 143 8 0 - 31 5 + 144 - 255 9 + 256 - 279 7 + 280 - 287 8 + + Literal codes 286-287 and distance codes 30-31 are + never used but participate in the huffman construction. + + 10 (2) - Dynamic Huffman codes. (See expanding Huffman codes) + + 11 (3) - Reserved - Flag a "Error in compressed data" if seen. + +Expanding Huffman Codes +----------------------- +If the data block is stored with dynamic Huffman codes, the Huffman +codes are sent in the following compressed format: + + 5 Bits: # of Literal codes sent - 257 (257 - 286) + All other codes are never sent. + 5 Bits: # of Dist codes - 1 (1 - 32) + 4 Bits: # of Bit Length codes - 4 (4 - 19) + +The Huffman codes are sent as bit lengths and the codes are built as +described in the implode algorithm. The bit lengths themselves are +compressed with Huffman codes. There are 19 bit length codes: + + 0 - 15: Represent bit lengths of 0 - 15 + 16: Copy the previous bit length 3 - 6 times. + The next 2 bits indicate repeat length (0 = 3, ... ,3 = 6) + Example: Codes 8, 16 (+2 bits 11), 16 (+2 bits 10) will + expand to 12 bit lengths of 8 (1 + 6 + 5) + 17: Repeat a bit length of 0 for 3 - 10 times. (3 bits of length) + 18: Repeat a bit length of 0 for 11 - 138 times (7 bits of length) + +The lengths of the bit length codes are sent packed 3 bits per value +(0 - 7) in the following order: + + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + +The Huffman codes should be built as described in the Implode algorithm +except codes are assigned starting at the shortest bit length, i.e. the +shortest code should be all 0's rather than all 1's. Also, codes with +a bit length of zero do not participate in the tree construction. The +codes are then used to decode the bit lengths for the literal and +distance tables. + +The bit lengths for the literal tables are sent first with the number +of entries sent described by the 5 bits sent earlier. There are up +to 286 literal characters; the first 256 represent the respective 8 +bit character, code 256 represents the End-Of-Block code, the remaining +29 codes represent copy lengths of 3 thru 258. There are up to 30 +distance codes representing distances from 1 thru 32k as described +below. + + Length Codes + ------------ + Extra Extra Extra Extra + Code Bits Length Code Bits Lengths Code Bits Lengths Code Bits Length(s) + ---- ---- ------ ---- ---- ------- ---- ---- ------- ---- ---- --------- + 257 0 3 265 1 11,12 273 3 35-42 281 5 131-162 + 258 0 4 266 1 13,14 274 3 43-50 282 5 163-194 + 259 0 5 267 1 15,16 275 3 51-58 283 5 195-226 + 260 0 6 268 1 17,18 276 3 59-66 284 5 227-258 + 261 0 7 269 2 19-22 277 4 67-82 285 0 258 + 262 0 8 270 2 23-26 278 4 83-98 + 263 0 9 271 2 27-30 279 4 99-114 + 264 0 10 272 2 31-34 280 4 115-130 + + Distance Codes + -------------- + Extra Extra Extra Extra + Code Bits Dist Code Bits Dist Code Bits Distance Code Bits Distance + ---- ---- ---- ---- ---- ------ ---- ---- -------- ---- ---- -------- + 0 0 1 8 3 17-24 16 7 257-384 24 11 4097-6144 + 1 0 2 9 3 25-32 17 7 385-512 25 11 6145-8192 + 2 0 3 10 4 33-48 18 8 513-768 26 12 8193-12288 + 3 0 4 11 4 49-64 19 8 769-1024 27 12 12289-16384 + 4 1 5,6 12 5 65-96 20 9 1025-1536 28 13 16385-24576 + 5 1 7,8 13 5 97-128 21 9 1537-2048 29 13 24577-32768 + 6 2 9-12 14 6 129-192 22 10 2049-3072 + 7 2 13-16 15 6 193-256 23 10 3073-4096 + +The compressed data stream begins immediately after the +compressed header data. The compressed data stream can be +interpreted as follows: + +do + read header from input stream. + + if stored block + skip bits until byte aligned + read count and 1's compliment of count + copy count bytes data block + otherwise + loop until end of block code sent + decode literal character from input stream + if literal < 256 + copy character to the output stream + otherwise + if literal = end of block + break from loop + otherwise + decode distance from input stream + + move backwards distance bytes in the output stream, and + copy length characters from this position to the output + stream. + end loop +while not last block + +if data descriptor exists + skip bits until byte aligned + check data descriptor signature + read crc and sizes +endif + +X. Enhanced Deflating - Method 9 +-------------------------------- + +The Enhanced Deflating algorithm is similar to Deflate but +uses a sliding dictionary of up to 64K. Deflate64(tm) is supported +by the Deflate extractor. + +[This description is inofficial. It has been deduced by Info-ZIP from +close inspection of PKZIP 4.x Deflate64(tm) compressed output.] + +The Deflate64 algorithm is almost identical to the normal Deflate algorithm. +Differences are: + +- The sliding window size is 64k. + +- The previously unused distance codes 30 and 31 are now used to describe + match distances from 32k-48k and 48k-64k. + Extra + Code Bits Distance + ---- ---- ----------- + .. .. ... + 29 13 24577-32768 + 30 14 32769-49152 + 31 14 49153-65536 + +- The semantics of the "maximum match length" code #258 has been changed to + allow the specification of arbitrary large match lengths (up to 64k). + Extra + Code Bits Lengths + ---- ---- ------ + ... .. ... + 284 5 227-258 + 285 16 3-65538 + +Whereas the first two modifications fit into the framework of Deflate, +this last change breaks compatibility with Deflate method 8. Thus, a +Deflate64 decompressor cannot decode normal deflated data. + +XI. BZIP2 - Method 12 +--------------------- + +BZIP2 is an open-source data compression algorithm developed by +Julian Seward. Information and source code for this algorithm +can be found on the internet. + + +XII. Traditional PKWARE Encryption +---------------------------------- + +The following information discusses the decryption steps +required to support traditional PKWARE encryption. This +form of encryption is considered weak by today's standards +and its use is recommended only for situations with +low security needs or for compatibility with older .ZIP +applications. + +XIII. Decryption +---------------- + +The encryption used in PKZIP was generously supplied by Roger +Schlafly. PKWARE is grateful to Mr. Schlafly for his expert +help and advice in the field of data encryption. + +PKZIP encrypts the compressed data stream. Encrypted files must +be decrypted before they can be extracted. + +Each encrypted file has an extra 12 bytes stored at the start of +the data area defining the encryption header for that file. The +encryption header is originally set to random values, and then +itself encrypted, using three, 32-bit keys. The key values are +initialized using the supplied encryption password. After each byte +is encrypted, the keys are then updated using pseudo-random number +generation techniques in combination with the same CRC-32 algorithm +used in PKZIP and described elsewhere in this document. + +The following is the basic steps required to decrypt a file: + +1) Initialize the three 32-bit keys with the password. +2) Read and decrypt the 12-byte encryption header, further + initializing the encryption keys. +3) Read and decrypt the compressed data stream using the + encryption keys. + + +Step 1 - Initializing the encryption keys +----------------------------------------- + +Key(0) <- 305419896 +Key(1) <- 591751049 +Key(2) <- 878082192 + +loop for i <- 0 to length(password)-1 + update_keys(password(i)) +end loop + + +Where update_keys() is defined as: + + +update_keys(char): + Key(0) <- crc32(key(0),char) + Key(1) <- Key(1) + (Key(0) & 000000ffH) + Key(1) <- Key(1) * 134775813 + 1 + Key(2) <- crc32(key(2),key(1) >> 24) +end update_keys + + +Where crc32(old_crc,char) is a routine that given a CRC value and a +character, returns an updated CRC value after applying the CRC-32 +algorithm described elsewhere in this document. + + +Step 2 - Decrypting the encryption header +----------------------------------------- + +The purpose of this step is to further initialize the encryption +keys, based on random data, to render a plaintext attack on the +data ineffective. + + +Read the 12-byte encryption header into Buffer, in locations +Buffer(0) thru Buffer(11). + +loop for i <- 0 to 11 + C <- buffer(i) ^ decrypt_byte() + update_keys(C) + buffer(i) <- C +end loop + + +Where decrypt_byte() is defined as: + + +unsigned char decrypt_byte() + local unsigned short temp + temp <- Key(2) | 2 + decrypt_byte <- (temp * (temp ^ 1)) >> 8 +end decrypt_byte + + +After the header is decrypted, the last 1 or 2 bytes in Buffer +should be the high-order word/byte of the CRC for the file being +decrypted, stored in Intel low-byte/high-byte order, or the high-order +byte of the file time if bit 3 of the general purpose bit flag is set. +Versions of PKZIP prior to 2.0 used a 2 byte CRC check; a 1 byte CRC check is +used on versions after 2.0. This can be used to test if the password +supplied is correct or not. + + +Step 3 - Decrypting the compressed data stream +---------------------------------------------- + +The compressed data stream can be decrypted as follows: + + +loop until done + read a character into C + Temp <- C ^ decrypt_byte() + update_keys(temp) + output Temp +end loop + + +XIV. Strong Encryption Specification (EFS) +------------------------------------------ + +Version 5.x of this specification introduced support for strong +encryption algorithms. These algorithms can be used with either +a password or an X.509v3 digital certificate to encrypt each file. +This format specification supports either password or certificate +based encryption to meet the security needs of today, to enable +interoperability between users within both PKI and non-PKI +environments, and to ensure interoperability between different +computing platforms that are running a ZIP program. + +Password based encryption is the most common form of encryption +people are familiar with. However, inherent weaknesses with +passwords (e.g. susceptibility to dictionary/brute force attack) +as well as password management and support issues make certificate +based encryption a more secure and scalable option. Industry +efforts and support are defining and moving towards more advanced +security solutions built around X.509v3 digital certificates and +Public Key Infrastructures(PKI) because of the greater scalability, +administrative options, and more robust security over traditional +password-based encryption. + +Most standard encryption algorithms are supported with this +specification. Reference implementations for many of these +algorithms are available from either commercial or open source +distributors. Readily available cryptographic toolkits make +implementation of the encryption features straight-forward. +This document is not intended to provide a treatise on data +encryption principles or theory. Its purpose is to document the +data structures required for implementing interoperable data +encryption within the .ZIP format. It is strongly recommended that +you have a good understanding of data encryption before reading +further. + +The algorithms introduced in Version 5.0 of this specification +include: + + RC2 40 bit, 64 bit, and 128 bit + RC4 40 bit, 64 bit, and 128 bit + DES + 3DES 112 bit and 168 bit + +Version 5.1 adds support for the following: + + AES 128 bit, 192 bit, and 256 bit + +Version 6.1 introduces encryption data changes to support +interoperability with SmartCard and USB Token certificate storage +methods which do not support the OAEP strengthening standard. + +Version 6.2 introduces support for encrypting metadata by compressing +and encrypting the central directory data structure to reduce information +leakage. Information leakage can occur in legacy ZIP applications +through exposure of information about a file even though that file is +stored encrypted. The information exposed consists of file +characteristics stored within the records and fields defined by this +specification. This includes data such as a files name, its original +size, timestamp and CRC32 value. + +Central Directory Encryption provides greater protection against +information leakage by encrypting the Central Directory structure and +by masking key values that are replicated in the unencrypted Local +Header. ZIP compatible programs that cannot interpret an encrypted +Central Directory structure cannot rely on the data in the corresponding +Local Header for decompression information. + +Extra Field records that may contain information about a file that should +not be exposed should not be stored in the Local Header and should only +be written to the Central Directory where they can be encrypted. This +design currently does not support streaming. Information in the End of +Central Directory record, the ZIP64 End of Central Directory Locator, +and the ZIP64 End of Central Directory record are not encrypted. Access +to view data on files within a ZIP file with an encrypted Central Directory +requires the appropriate password or private key for decryption prior to +viewing any files, or any information about the files, in the archive. + +Older ZIP compatible programs not familiar with the Central Directory +Encryption feature will no longer be able to recognize the Central +Directory and may assume the ZIP file is corrupt. Programs that +attempt streaming access using Local Headers will see invalid +information for each file. Central Directory Encryption need not be +used for every ZIP file. Its use is recommended for greater security. +ZIP files not using Central Directory Encryption should operate as +in the past. + +The details of the strong encryption specification for certificates +remain under development as design and testing issues are worked out +for the range of algorithms, encryption methods, certificate processing +and cross-platform support necessary to meet the advanced security needs +of .ZIP file users today and in the future. + +This feature specification is intended to support basic encryption needs +of today, such as password support. However this specification is also +designed to lay the foundation for future advanced security needs. + +Encryption provides data confidentiality and privacy. It is +recommended that you combine X.509 digital signing with encryption +to add authentication and non-repudiation. + + +Single Password Symmetric Encryption Method: +------------------------------------------- + +The Single Password Symmetric Encryption Method using strong +encryption algorithms operates similarly to the traditional +PKWARE encryption defined in this format. Additional data +structures are added to support the processing needs of the +strong algorithms. + +The Strong Encryption data structures are: + +1. General Purpose Bits - Bits 0 and 6 of the General Purpose bit +flag in both local and central header records. Both bits set +indicates strong encryption. Bit 13, when set indicates the Central +Directory is encrypted and that selected fields in the Local Header +are masked to hide their actual value. + + +2. Extra Field 0x0017 in central header only. + + Fields to consider in this record are: + + Format - the data format identifier for this record. The only + value allowed at this time is the integer value 2. + + AlgId - integer identifier of the encryption algorithm from the + following range + + 0x6601 - DES + 0x6602 - RC2 (version needed to extract < 5.2) + 0x6603 - 3DES 168 + 0x6609 - 3DES 112 + 0x660E - AES 128 + 0x660F - AES 192 + 0x6610 - AES 256 + 0x6702 - RC2 (version needed to extract >= 5.2) + 0x6801 - RC4 + 0xFFFF - Unknown algorithm + + Bitlen - Explicit bit length of key + + 40 + 56 + 64 + 112 + 128 + 168 + 192 + 256 + + Flags - Processing flags needed for decryption + + 0x0001 - Password is required to decrypt + 0x0002 - Certificates only + 0x0003 - Password or certificate required to decrypt + + Values > 0x0003 reserved for certificate processing + + +3. Decryption header record preceeding compressed file data. + + -Decryption Header: + + Value Size Description + ----- ---- ----------- + IVSize 2 bytes Size of initialization vector (IV) + IVData IVSize Initialization vector for this file + Size 4 bytes Size of remaining decryption header data + Format 2 bytes Format definition for this record + AlgID 2 bytes Encryption algorithm identifier + Bitlen 2 bytes Bit length of encryption key + Flags 2 bytes Processing flags + ErdSize 2 bytes Size of Encrypted Random Data + ErdData ErdSize Encrypted Random Data + Reserved1 4 bytes Reserved certificate processing data + Reserved2 (var) Reserved for certificate processing data + VSize 2 bytes Size of password validation data + VData VSize-4 Password validation data + VCRC32 4 bytes Standard ZIP CRC32 of password validation data + + IVData - The size of the IV should match the algorithm block size. + The IVData can be completely random data. If the size of + the randomly generated data does not match the block size + it should be complemented with zero's or truncated as + necessary. If IVSize is 0, then IV = CRC32 + Uncompressed + File Size (as a 64 bit little-endian, unsigned integer value). + + Format - the data format identifier for this record. The only + value allowed at this time is the integer value 3. + + AlgId - integer identifier of the encryption algorithm from the + following range + + 0x6601 - DES + 0x6602 - RC2 (version needed to extract < 5.2) + 0x6603 - 3DES 168 + 0x6609 - 3DES 112 + 0x660E - AES 128 + 0x660F - AES 192 + 0x6610 - AES 256 + 0x6702 - RC2 (version needed to extract >= 5.2) + 0x6801 - RC4 + 0xFFFF - Unknown algorithm + + Bitlen - Explicit bit length of key + + 40 + 56 + 64 + 112 + 128 + 168 + 192 + 256 + + Flags - Processing flags needed for decryption + + 0x0001 - Password is required to decrypt + 0x0002 - Certificates only + 0x0003 - Password or certificate required to decrypt + + Values > 0x0003 reserved for certificate processing + + ErdData - Encrypted random data is used to generate a file + session key for encrypting each file. SHA1 is + used to calculate hash data used to derive keys. + File session keys are derived from a master session + key generated from the user-supplied password. + If the Flags field in the decryption header contains + the value 0x4000, then the ErdData field must be + decrypted using 3DES. + + Reserved1 - Reserved for certificate processing, if value is + zero, then Reserved2 data is absent. See the explanation + under the Certificate Processing Method for details on + this data structure. + + Reserved2 - If present, the size of the Reserved2 data structure + is located by skipping the first 4 bytes of this field + and using the next 2 bytes as the remaining size. See + the explanation under the Certificate Processing Method + for details on this data structure. + + VSize - This size value will always include the 4 bytes of the + VCRC32 data and will be greater than 4 bytes. + + VData - Random data for password validation. This data is VSize + in length and VSize must be a multiple of the encryption + block size. VCRC32 is a checksum value of VData. + VData and VCRC32 are stored encrypted and start the + stream of encrypted data for a file. + +4. Single Password Central Directory Encryption + +Central Directory Encryption is achieved within the .ZIP format by +encrypting the Central Directory structure. This encapsulates the metadata +most often used for processing .ZIP files. Additional metadata is stored for +redundancy in the Local Header for each file. The process of concealing +metadata by encrypting the Central Directory does not protect the data within +the Local Header. To avoid information leakage from the exposed metadata +in the Local Header, the fields containing information about a file are masked. + +Local Header: + +Masking replaces the true content of the fields for a file in the Local +Header with false information. When masked, the Local Header is not +suitable for streaming access and the options for data recovery of damaged +archives is reduced. Extra Data fields that may contain confidential +data should not be stored within the Local Header. The value set into +the Version needed to extract field should be the correct value needed to +extract the file without regard to Central Directory Encryption. The fields +within the Local Header targeted for masking when the Central Directory is +encrypted are: + + Field Name Mask Value + ------------------ --------------------------- + compression method 0 + last mod file time 0 + last mod file date 0 + crc-32 0 + compressed size 0 + uncompressed size 0 + file name (variable size) Base 16 value from the + range 1 - FFFFFFFFFFFFFFFF + represented as a string whose + size will be set into the + file name length field + +The Base 16 value assigned as a masked file name is simply a sequentially +incremented value for each file starting with 1 for the first file. +Modifications to a ZIP file may cause different values to be stored for +each file. For compatibility, the file name field in the Local Header +should never be left blank. As of Version 6.2 of this specification, +the Compression Method and Compressed Size fields are not yet masked. + +Encrypting the Central Directory: + +Encryption of the Central Directory does not include encryption of the +Central Directory Signature data, the ZIP64 End of Central Directory +record, the ZIP64 End of Central Directory Locator, or the End +of Central Directory record. The ZIP file comment data is never +encrypted. + +Before encrypting the Central Directory, it may optionally be compressed. +Compression is not required, but for storage efficiency it is assumed +this structure will be compressed before encrypting. Similarly, this +specification supports compressing the Central Directory without +requiring that it also be encrypted. Early implementations of this +feature will assume the encryption method applied to files matches the +encryption applied to the Central Directory. + +Encryption of the Central Directory is done in a manner similar to +that of file encryption. The encrypted data is preceded by a +decryption header. The decryption header is known as the Archive +Decryption Header. The fields of this record are identical to +the decryption header preceding each encrypted file. The location +of the Archive Decryption Header is determined by the value in the +Start of the Central Directory field in the ZIP64 End of Central +Directory record. When the Central Directory is encrypted, the +ZIP64 End of Central Directory record will always be present. + +The layout of the ZIP64 End of Central Directory record for all +versions starting with 6.2 of this specification will follow the +Version 2 format. The Version 2 format is as follows: + +The first 48 bytes will remain identical to that of Version 1. +The record signature for both Version 1 and Version 2 will be +0x06064b50. Immediately following the 48th byte, which identifies +the end of the field known as the Offset of Start of Central +Directory With Respect to the Starting Disk Number will begin the +new fields defining Version 2 of this record. + +New fields for Version 2: + +Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + Compression Method 2 bytes Method used to compress the + Central Directory + Compressed Size 8 bytes Size of the compressed data + Original Size 8 bytes Original uncompressed size + AlgId 2 bytes Encryption algorithm ID + BitLen 2 bytes Encryption key length + Flags 2 bytes Encryption flags + HashID 2 bytes Hash algorithm identifier + Hash Length 2 bytes Length of hash data + Hash Data (variable) Hash data + +The Compression Method accepts the same range of values as the +corresponding field in the Central Header. + +The Compressed Size and Original Size values will not include the +data of the Central Directory Signature which is compressed or +encrypted. + +The AlgId, BitLen, and Flags fields accept the same range of values +the corresponding fields within the 0x0017 record. + +Hash ID identifies the algorithm used to hash the Central Directory +data. This data does not have to be hashed, in which case the +values for both the HashID and Hash Length will be 0. Possible +values for HashID are: + + Value Algorithm + ------ --------- + 0x0000 none + 0x0001 CRC32 + 0x8003 MD5 + 0x8004 SHA1 + +When the Central Directory data is signed, the same hash algorithm +used to hash the Central Directory for signing should be used. +This is recommended for processing efficiency, however, it is +permissible for any of the above algorithms to be used independent +of the signing process. + +The Hash Data will contain the hash data for the Central Directory. +The length of this data will vary depending on the algorithm used. + +The Version Needed to Extract should be set to 62. + +The value for the Total Number of Entries on the Current Disk will +be 0. These records will no longer support random access when +encrypting the Central Directory. + +When the Central Directory is compressed and/or encrypted, the +End of Central Directory record will store the value 0xFFFFFFFF +as the value for the Total Number of Entries in the Central +Directory. The value stored in the Total Number of Entries in +the Central Directory on this Disk field will be 0. The actual +values will be stored in the equivalent fields of the ZIP64 +End of Central Directory record. + +Decrypting and decompressing the Central Directory is accomplished +in the same manner as decrypting and decompressing a file. + + +5. Useful Tips + +Strong Encryption is always applied to a file after compression. The +block oriented algorithms all operate in Cypher Block Chaining (CBC) +mode. The block size used for AES encryption is 16. All other block +algorithms use a block size of 8. Two ID's are defined for RC2 to +account for a discrepancy found in the implementation of the RC2 +algorithm in the cryptographic library on Windows XP SP1 and all +earlier versions of Windows. + +A pseudo-code representation of the encryption process is as follows: + +Password = GetUserPassword() +RD = Random() +ERD = Encrypt(RD,DeriveKey(SHA1(Password))) +For Each File + IV = Random() + VData = Random() + FileSessionKey = DeriveKey(SHA1(IV + RD)) + Encrypt(VData + VCRC32 + FileData,FileSessionKey) +Done + +The function names and parameter requirements will depend on +the choice of the cryptographic toolkit selected. Almost any +toolkit supporting the reference implementations for each +algorithm can be used. The RSA BSAFE(r), OpenSSL, and Microsoft +CryptoAPI libraries are all known to work well. + + +Certificate Processing Method: +----------------------------- + +The Certificate Processing Method for ZIP file encryption remains +under development. The information provided here serves as a guide +to those interested in certificate-based data decryption. This +information may be subject to change in future versions of this +specification and is subject to change without notice. + +OAEP Processing with Certificate-based Encryption: + +Versions of PKZIP available during this development phase of the +certificate processing method may set a value of 61 into the +version needed to extract field for a file. This indicates that +non-OAEP key wrapping is used. This affects certificate encryption +only, and password encryption functions should not be affected by +this value. This means values of 61 may be found on files encrypted +with certificates only, or on files encrypted with both password +encryption and certificate encryption. Files encrypted with both +methods can safely be decrypted using the password methods documented. + +OAEP stands for Optimal Asymmetric Encryption Padding. It is a +strengthening technique used for small encoded items such as decryption +keys. This is commonly applied in cryptographic key-wrapping techniques +and is supported by PKCS #1. Versions 5.0 and 6.0 of this specification +were designed to support OAEP key-wrapping for certificate-based +decryption keys for additional security. + +Support for private keys stored on Smart Cards or Tokens introduced +a conflict with this OAEP logic. Most card and token products do +not support the additional strengthening applied to OAEP key-wrapped +data. In order to resolve this conflict, versions 6.1 and above of this +specification will no longer support OAEP when encrypting using +digital certificates. + +Certificate Processing Data Fields: + +The Certificate Processing Method of this specification defines the +following additional data fields: + + +1. Certificate Flag Values + +Additional processing flags that can be present in the Flags field of both +the 0x0017 field of the central directory Extra Field and the Decryption +header record preceding compressed file data are: + + 0x0007 - reserved for future use + 0x000F - reserved for future use + 0x0100 - Indicates non-OAEP key wrapping was used. If this + this field is set, the version needed to extract must + be at least 61. This means OAEP key wrapping is not + used when generating a Master Session Key using + ErdData. + 0x4000 - ErdData must be decrypted using 3DES-168, otherwise use the + same algorithm used for encrypting the file contents. + 0x8000 - reserved for future use + + +2. CertData - Extra Field 0x0017 record certificate data structure + +The data structure used to store certificate data within the section +of the Extra Field defined by the CertData field of the 0x0017 +record are as shown: + + Value Size Description + ----- ---- ----------- + RCount 4 bytes Number of recipients. + HashAlg 2 bytes Hash algorithm identifier + HSize 2 bytes Hash size + SRList (var) Simple list of recipients hashed public keys + + + RCount This defines the number intended recipients whose + public keys were used for encryption. This identifies + the number of elements in the SRList. + + HashAlg This defines the hash algorithm used to calculate + the public key hash of each public key used + for encryption. This field currently supports + only the following value for SHA-1 + + 0x8004 - SHA1 + + HSize This defines the size of a hashed public key. + + SRList This is a variable length list of the hashed + public keys for each intended recipient. Each + element in this list is HSize. The total size of + SRList is determined using RCount * HSize. + + +3. Reserved1 - Certificate Decryption Header Reserved1 Data: + + Value Size Description + ----- ---- ----------- + RCount 4 bytes Number of recipients. + + RCount This defines the number intended recipients whose + public keys were used for encryption. This defines + the number of elements in the REList field defined below. + + +4. Reserved2 - Certificate Decryption Header Reserved2 Data Structures: + + + Value Size Description + ----- ---- ----------- + HashAlg 2 bytes Hash algorithm identifier + HSize 2 bytes Hash size + REList (var) List of recipient data elements + + + HashAlg This defines the hash algorithm used to calculate + the public key hash of each public key used + for encryption. This field currently supports + only the following value for SHA-1 + + 0x8004 - SHA1 + + HSize This defines the size of a hashed public key + defined in REHData. + + REList This is a variable length of list of recipient data. + Each element in this list consists of a Recipient + Element data structure as follows: + + + Recipient Element (REList) Data Structure: + + Value Size Description + ----- ---- ----------- + RESize 2 bytes Size of REHData + REKData + REHData HSize Hash of recipients public key + REKData (var) Simple key blob + + + RESize This defines the size of an individual REList + element. This value is the combined size of the + REHData field + REKData field. REHData is defined by + HSize. REKData is variable and can be calculated + for each REList element using RESize and HSize. + + REHData Hashed public key for this recipient. + + REKData Simple Key Blob. The format of this data structure + is identical to that defined in the Microsoft + CryptoAPI and generated using the CryptExportKey() + function. The version of the Simple Key Blob + supported at this time is 0x02 as defined by + Microsoft. + +5. Certificate Processing - Central Directory Encryption: + +Central Directory Encryption using Digital Certificates will +operate in a manner similar to that of Single Password Central +Directory Encryption. This record will only be present when there +is data to place into it. Currently, data is placed into this +record when digital certificates are used for either encrypting +or signing the files within a ZIP file. When only password +encryption is used with no certificate encryption or digital +signing, this record is not currently needed. When present, this +record will appear before the start of the actual Central Directory +data structure and will be located immediately after the Archive +Decryption Header if the Central Directory is encrypted. + +The Archive Extra Data record will be used to store the following +information. Additional data may be added in future versions. + +Extra Data Fields: + +0x0014 - PKCS#7 Store for X.509 Certificates +0x0016 - X.509 Certificate ID and Signature for central directory +0x0019 - PKCS#7 Encryption Recipient Certificate List + +The 0x0014 and 0x0016 Extra Data records that otherwise would be +located in the first record of the Central Directory for digital +certificate processing. When encrypting or compressing the Central +Directory, the 0x0014 and 0x0016 records must be located in the +Archive Extra Data record and they should not remain in the first +Central Directory record. The Archive Extra Data record will also +be used to store the 0x0019 data. + +When present, the size of the Archive Extra Data record will be +included in the size of the Central Directory. The data of the +Archive Extra Data record will also be compressed and encrypted +along with the Central Directory data structure. + +6. Certificate Processing Differences: + +The Certificate Processing Method of encryption differs from the +Single Password Symmetric Encryption Method as follows. Instead +of using a user-defined password to generate a master session key, +cryptographically random data is used. The key material is then +wrapped using standard key-wrapping techniques. This key material +is wrapped using the public key of each recipient that will need +to decrypt the file using their corresponding private key. + +This specification currently assumes digital certificates will follow +the X.509 V3 format for 1024 bit and higher RSA format digital +certificates. Implementation of this Certificate Processing Method +requires supporting logic for key access and management. This logic +is outside the scope of this specification. + + +License Agreement: +----------------- + +The features set forth in this Section XIV (the "Strong Encryption +Specification") are covered by a pending patent application. Portions of +this Strong Encryption technology are available for use at no charge +under the following terms and conditions. + +1. License Grant. + + a. NOTICE TO USER. PLEASE READ THIS ENTIRE SECTION XIV OF THE + APPNOTE (THE "AGREEMENT") CAREFULLY. BY USING ALL OR ANY PORTION OF THE + LICENSED TECHNOLOGY, YOU ACCEPT ALL THE TERMS AND CONDITIONS OF THIS + AGREEMENT AND YOU AGREE THAT THIS AGREEMENT IS ENFORCEABLE LIKE ANY + WRITTEN NEGOTIATED AGREEMENT SIGNED BY YOU. IF YOU DO NOT AGREE, DO NOT + USE THE LICENSED TECHNOLOGY. + + b. Definitions. + + i. "Licensed Technology" shall mean that proprietary technology now or + hereafter owned or controlled by PKWare, Inc. ("PKWARE") or any + subsidiary or affiliate that covers or is necessary to be used to give + software the ability to a) extract and decrypt data from zip files + encrypted using any methods of data encryption and key processing which + are published in this APPNOTE or any prior APPNOTE, as supplemented by + any Additional Compatibility Information; and b) encrypt file contents + as part of .ZIP file processing using only the Single Password Symmetric + Encryption Method as published in this APPNOTE or any prior APPNOTE, as + supplemented by any Additional Compatibility Information. For purposes + of this AGREEMENT, "Additional Compatibility Information" means, with + regard to any method of data encryption and key processing published in + this or any prior APPNOTE, any corrections, additions, or clarifications + to the information in such APPNOTE that are required in order to give + software the ability to successfully extract and decrypt zip files (or, + but solely in the case of the Single Password Symmetric Encryption Method, + to successfully encrypt zip files) in a manner interoperable with the + actual implementation of such method in any PKWARE product that is + documented or publicly described by PKWARE as being able to create, or + to extract and decrypt, zip files using that method. + + ii. "Licensed Products" shall mean any products you produce that + incorporate the Licensed Technology. + + c. License to Licensed Technology. + + PKWARE hereby grants to you a non-exclusive license to use the Licensed + Technology for the purpose of manufacturing, offering, selling and using + Licensed Products, which license shall extend to permit the practice of all + claims in any patent or patent application (collectively, "Patents") now or + hereafter owned or controlled by PKWARE in any jurisdiction in the world + that are infringed by implementation of the Licensed Technology. You have + the right to sublicense rights you receive under the terms of this AGREEMENT + for the purpose of allowing sublicensee to manufacture, offer, sell and use + products that incorporate all or a portion of any of your Licensed Products, + but if you do, you agree to i) impose the same restrictions on any such + sublicensee as these terms impose on you and ii) notify the sublicensee, + by means chosen by you in your unfettered discretion, including a notice on + your web site, of the terms of this AGREEMENT and make available to each + sublicensee the full text of this APPNOTE. Further, PKWARE hereby grants to + you a non-exclusive right to reproduce and distribute, in any form, copies of + this APPNOTE, without modification. Notwithstanding anything to the contrary + in this AGREEMENT, you have the right to sublicense the rights, without any of + the restrictions described above or elsewhere in this AGREEMENT, to use, offer + to sell and sell Licensed Technology as incorporated in executable object code + or byte code forms of your Licensed Products. Any sublicense to use the + Licensed Technology incorporated in a Licensed Product granted by you shall + survive the termination of this AGREEMENT for any reason. PKWARE warrants that + this license shall continue to encumber the Licensed Technology regardless of + changes in ownership of the Licensed Technology. + + d. Proprietary Notices. + + i. With respect to any Licensed Product that is distributed by you either + in source code form or in the form of an object code library of externally + callable functions that has been designed by you for incorporation into third + party products, you agree to include, in the source code, or in the case of + an object code library, in accompanying documentation, a notice using the + words "patent pending" until a patent is issued to PKWARE covering any + portion of the Licensed Technology or PKWARE provides notice, by means + chosen by PKWARE in its unfettered discretion, that it no longer has any + patent pending covering any portion of the Licensed Technology. With respect + to any Licensed Product, upon your becoming aware that at least one patent has + been granted covering the Licensed Technology, you agree to include in any + revisions made by you to the documentation (or any source code distributed + by you) the words "Pat. No.", or "Patent Number" and the patent number or + numbers of the applicable patent or patents. PKWARE shall, from time to time, + inform you of the patent number or numbers of the patents covering the + Licensed Technology, by means chosen by PKWARE in its unfettered discretion, + including a notice on its web site. It shall be a violation of the terms of + this AGREEMENT for you to sell Licensed Products without complying with the + foregoing marking provisions. + + ii. You acknowledge that the terms of this AGREEMENT do not grant you any + license or other right to use any PKWARE trademark in connection with the sale, + offering for sale, distribution and delivery of the Licensed Products, or in + connection with the advertising, promotion and offering of the Licensed Products. + You acknowledge PKWARE's ownership of the PKZIP trademark and all other marks + owned by PKWARE. + + e. Covenant of Compliance and Remedies. + + To the extent that you have elected to implement portions of the Licensed + Technology, you agree to use reasonable diligence to comply with those portions + of this Section XIV, as modified or supplemented by Additional Compatibility + Information available to you, describing the portions of the Licensed Technology + that you have elected to implement. Upon reasonable request by PKWARE, you will + provide written notice to PKWARE identifying which version of this APPNOTE you + have relied upon for your implementation of any specified Licensed Product. + + If any substantial non-compliance with the terms of this AGREEMENT is determined + to exist, you will make such changes as necessary to bring your Licensed Products + into substantial compliance with the terms of this AGREEMENT. If, within sixty + days of receipt of notice that a Licensed Product fails to comply with the terms + of this AGREEMENT, you fail to make such changes as necessary to bring your + Licensed Products into compliance with the terms of this AGREEMENT, PKWARE may + terminate your rights under this AGREEMENT. PKWARE does not waive and expressly + reserves the right to pursue any and all additional remedies that are or may + become available to PKWARE. + + f. Warranty and Indemnification Regarding Exportation. + + You realize and acknowledge that, as between yourself and PKWARE, you are fully + responsible for compliance with the import and export laws and regulations of + any country in or to which you import or export any Licensed Products, and you + agree to hold PKWARE harmless from any claim of violation of any such import + or export laws. + + g. Patent Infringement. + + You agree that you will not bring or threaten to bring any action against PKWARE + for infringement of the claims of any patent owned or controlled by you solely + as a result of PKWARE's own implementation of the Licensed Technology. As its + exclusive remedy for your breach of the foregoing agreement, PKWARE reserves + the right to suspend or terminate all rights granted under the terms of this + AGREEMENT if you bring or threaten to bring any such action against PKWARE, + effective immediately upon delivery of written notice of suspension or + termination to you. + + h. Governing Law. + + The license granted in this AGREEMENT shall be governed by and construed under + the laws of the State of Wisconsin and the United States. + + i. Revisions and Notice. + + The license granted in this APPNOTE is irrevocable, except as expressly set + forth above. You agree and understand that any changes which PKWARE determines + to make to this APPNOTE shall be posted at the same location as the current + APPNOTE or at a location which will be identified by means chosen by PKWARE, + including a notice on its web site, and shall be available for adoption by you + immediately upon such posting, or at such other time as PKWARE shall determine. + Any changes to the terms of the license published in a subsequent version of + this AGREEMENT shall be binding upon you only with respect to your products + that (i) incorporate any Licensed Technology (as defined in the subsequent + AGREEMENT) that is not otherwise included in the definition of Licensed + Technology under this AGREEMENT, or (ii) that you expressly identify are to + be licensed under the subsequent AGREEMENT, which identification shall be by + written notice with reference to the APPNOTE (version and release date or other + unique identifier) in which the subsequent AGREEMENT is published. PKWARE + agrees to identify each change to this APPNOTE by using a unique version and + release date identifier or other unique identifier. + + j. Warranty by PKWARE + + PKWare, Inc. warrants that it has the right to grant the license hereunder. + +XV. Change Process +------------------ + +In order for the .ZIP file format to remain a viable definition, this +specification should be considered as open for periodic review and +revision. Although this format was originally designed with a +certain level of extensibility, not all changes in technology +(present or future) were or will be necessarily considered in its +design. If your application requires new definitions to the +extensible sections in this format, or if you would like to +submit new data structures, please forward your request to +zipformat@pkware.com. All submissions will be reviewed by the +ZIP File Specification Committee for possible inclusion into +future versions of this specification. Periodic revisions +to this specification will be published to ensure interoperability. +We encourage comments and feedback that may help improve clarity +or content. + + +XVI. Acknowledgements +--------------------- + +In addition to the above mentioned contributors to PKZIP and PKUNZIP, +I would like to extend special thanks to Robert Mahoney for suggesting +the extension .ZIP for this software. + + +XVII. References +---------------- + + Fiala, Edward R., and Greene, Daniel H., "Data compression with + finite windows", Communications of the ACM, Volume 32, Number 4, + April 1989, pages 490-505. + + Held, Gilbert, "Data Compression, Techniques and Applications, + Hardware and Software Considerations", John Wiley & Sons, 1987. + + Huffman, D.A., "A method for the construction of minimum-redundancy + codes", Proceedings of the IRE, Volume 40, Number 9, September 1952, + pages 1098-1101. + + Nelson, Mark, "LZW Data Compression", Dr. Dobbs Journal, Volume 14, + Number 10, October 1989, pages 29-37. + + Nelson, Mark, "The Data Compression Book", M&T Books, 1991. + + Storer, James A., "Data Compression, Methods and Theory", + Computer Science Press, 1988 + + Welch, Terry, "A Technique for High-Performance Data Compression", + IEEE Computer, Volume 17, Number 6, June 1984, pages 8-19. + + Ziv, J. and Lempel, A., "A universal algorithm for sequential data + compression", Communications of the ACM, Volume 30, Number 6, + June 1987, pages 520-540. + + Ziv, J. and Lempel, A., "Compression of individual sequences via + variable-rate coding", IEEE Transactions on Information Theory, + Volume 24, Number 5, September 1978, pages 530-536. diff --git a/docs/appnote.txt b/docs/appnote.txt new file mode 100644 index 0000000..985f6f8 --- /dev/null +++ b/docs/appnote.txt @@ -0,0 +1,3497 @@ +File: APPNOTE.TXT - .ZIP File Format Specification +Version: 6.3.4 +Status: Final - replaces version 6.3.3 +Revised: October 1, 2014 +Copyright (c) 1989 - 2014 PKWARE Inc., All Rights Reserved. + +1.0 Introduction +--------------- + +1.1 Purpose +----------- + + 1.1.1 This specification is intended to define a cross-platform, + interoperable file storage and transfer format. Since its + first publication in 1989, PKWARE, Inc. ("PKWARE") has remained + committed to ensuring the interoperability of the .ZIP file + format through periodic publication and maintenance of this + specification. We trust that all .ZIP compatible vendors and + application developers that use and benefit from this format + will share and support this commitment to interoperability. + +1.2 Scope +--------- + + 1.2.1 ZIP is one of the most widely used compressed file formats. It is + universally used to aggregate, compress, and encrypt files into a single + interoperable container. No specific use or application need is + defined by this format and no specific implementation guidance is + provided. This document provides details on the storage format for + creating ZIP files. Information is provided on the records and + fields that describe what a ZIP file is. + +1.3 Trademarks +-------------- + + 1.3.1 PKWARE, PKZIP, SecureZIP, and PKSFX are registered trademarks of + PKWARE, Inc. in the United States and elsewhere. PKPatchMaker, + Deflate64, and ZIP64 are trademarks of PKWARE, Inc. Other marks + referenced within this document appear for identification + purposes only and are the property of their respective owners. + + +1.4 Permitted Use +----------------- + + 1.4.1 This document, "APPNOTE.TXT - .ZIP File Format Specification" is the + exclusive property of PKWARE. Use of the information contained in this + document is permitted solely for the purpose of creating products, + programs and processes that read and write files in the ZIP format + subject to the terms and conditions herein. + + 1.4.2 Use of the content of this document within other publications is + permitted only through reference to this document. Any reproduction + or distribution of this document in whole or in part without prior + written permission from PKWARE is strictly prohibited. + + 1.4.3 Certain technological components provided in this document are the + patented proprietary technology of PKWARE and as such require a + separate, executed license agreement from PKWARE. Applicable + components are marked with the following, or similar, statement: + 'Refer to the section in this document entitled "Incorporating + PKWARE Proprietary Technology into Your Product" for more information'. + +1.5 Contacting PKWARE +--------------------- + + 1.5.1 If you have questions on this format, its use, or licensing, or if you + wish to report defects, request changes or additions, please contact: + + PKWARE, Inc. + 201 E. Pittsburgh Avenue, Suite 400 + Milwaukee, WI 53204 + +1-414-289-9788 + +1-414-289-9789 FAX + zipformat@pkware.com + + 1.5.2 Information about this format and copies of this document are publicly + available at: + + http://www.pkware.com/appnote + +1.6 Disclaimer +-------------- + + 1.6.1 Although PKWARE will attempt to supply current and accurate + information relating to its file formats, algorithms, and the + subject programs, the possibility of error or omission cannot + be eliminated. PKWARE therefore expressly disclaims any warranty + that the information contained in the associated materials relating + to the subject programs and/or the format of the files created or + accessed by the subject programs and/or the algorithms used by + the subject programs, or any other matter, is current, correct or + accurate as delivered. Any risk of damage due to any possible + inaccurate information is assumed by the user of the information. + Furthermore, the information relating to the subject programs + and/or the file formats created or accessed by the subject + programs and/or the algorithms used by the subject programs is + subject to change without notice. + +2.0 Revisions +-------------- + +2.1 Document Status +-------------------- + + 2.1.1 If the STATUS of this file is marked as DRAFT, the content + defines proposed revisions to this specification which may consist + of changes to the ZIP format itself, or that may consist of other + content changes to this document. Versions of this document and + the format in DRAFT form may be subject to modification prior to + publication STATUS of FINAL. DRAFT versions are published periodically + to provide notification to the ZIP community of pending changes and to + provide opportunity for review and comment. + + 2.1.2 Versions of this document having a STATUS of FINAL are + considered to be in the final form for that version of the document + and are not subject to further change until a new, higher version + numbered document is published. Newer versions of this format + specification are intended to remain interoperable with with all prior + versions whenever technically possible. + +2.2 Change Log +-------------- + + Version Change Description Date + ------- ------------------ ---------- + 5.2 -Single Password Symmetric Encryption 06/02/2003 + storage + + 6.1.0 -Smartcard compatibility 01/20/2004 + -Documentation on certificate storage + + 6.2.0 -Introduction of Central Directory 04/26/2004 + Encryption for encrypting metadata + -Added OS X to Version Made By values + + 6.2.1 -Added Extra Field placeholder for 04/01/2005 + POSZIP using ID 0x4690 + + -Clarified size field on + "zip64 end of central directory record" + + 6.2.2 -Documented Final Feature Specification 01/06/2006 + for Strong Encryption + + -Clarifications and typographical + corrections + + 6.3.0 -Added tape positioning storage 09/29/2006 + parameters + + -Expanded list of supported hash algorithms + + -Expanded list of supported compression + algorithms + + -Expanded list of supported encryption + algorithms + + -Added option for Unicode filename + storage + + -Clarifications for consistent use + of Data Descriptor records + + -Added additional "Extra Field" + definitions + + 6.3.1 -Corrected standard hash values for 04/11/2007 + SHA-256/384/512 + + 6.3.2 -Added compression method 97 09/28/2007 + + -Documented InfoZIP "Extra Field" + values for UTF-8 file name and + file comment storage + + 6.3.3 -Formatting changes to support 09/01/2012 + easier referencing of this APPNOTE + from other documents and standards + + 6.3.4 -Address change 10/01/2014 + + +3.0 Notations +------------- + + 3.1 Use of the term MUST or SHALL indicates a required element. + + 3.2 MAY NOT or SHALL NOT indicates an element is prohibited from use. + + 3.3 SHOULD indicates a RECOMMENDED element. + + 3.4 SHOULD NOT indicates an element NOT RECOMMENDED for use. + + 3.5 MAY indicates an OPTIONAL element. + + +4.0 ZIP Files +------------- + +4.1 What is a ZIP file +---------------------- + + 4.1.1 ZIP files MAY be identified by the standard .ZIP file extension + although use of a file extension is not required. Use of the + extension .ZIPX is also recognized and MAY be used for ZIP files. + Other common file extensions using the ZIP format include .JAR, .WAR, + .DOCX, .XLXS, .PPTX, .ODT, .ODS, .ODP and others. Programs reading or + writing ZIP files SHOULD rely on internal record signatures described + in this document to identify files in this format. + + 4.1.2 ZIP files SHOULD contain at least one file and MAY contain + multiple files. + + 4.1.3 Data compression MAY be used to reduce the size of files + placed into a ZIP file, but is not required. This format supports the + use of multiple data compression algorithms. When compression is used, + one of the documented compression algorithms MUST be used. Implementors + are advised to experiment with their data to determine which of the + available algorithms provides the best compression for their needs. + Compression method 8 (Deflate) is the method used by default by most + ZIP compatible application programs. + + + 4.1.4 Data encryption MAY be used to protect files within a ZIP file. + Keying methods supported for encryption within this format include + passwords and public/private keys. Either MAY be used individually + or in combination. Encryption MAY be applied to individual files. + Additional security MAY be used through the encryption of ZIP file + metadata stored within the Central Directory. See the section on the + Strong Encryption Specification for information. Refer to the section + in this document entitled "Incorporating PKWARE Proprietary Technology + into Your Product" for more information. + + 4.1.5 Data integrity MUST be provided for each file using CRC32. + + 4.1.6 Additional data integrity MAY be included through the use of + digital signatures. Individual files MAY be signed with one or more + digital signatures. The Central Directory, if signed, MUST use a + single signature. + + 4.1.7 Files MAY be placed within a ZIP file uncompressed or stored. + The term "stored" as used in the context of this document means the file + is copied into the ZIP file uncompressed. + + 4.1.8 Each data file placed into a ZIP file MAY be compressed, stored, + encrypted or digitally signed independent of how other data files in the + same ZIP file are archived. + + 4.1.9 ZIP files MAY be streamed, split into segments (on fixed or on + removable media) or "self-extracting". Self-extracting ZIP + files MUST include extraction code for a target platform within + the ZIP file. + + 4.1.10 Extensibility is provided for platform or application specific + needs through extra data fields that MAY be defined for custom + purposes. Extra data definitions MUST NOT conflict with existing + documented record definitions. + + 4.1.11 Common uses for ZIP MAY also include the use of manifest files. + Manifest files store application specific information within a file stored + within the ZIP file. This manifest file SHOULD be the first file in the + ZIP file. This specification does not provide any information or guidance on + the use of manifest files within ZIP files. Refer to the application developer + for information on using manifest files and for any additional profile + information on using ZIP within an application. + + 4.1.12 ZIP files MAY be placed within other ZIP files. + +4.2 ZIP Metadata +---------------- + + 4.2.1 ZIP files are identified by metadata consisting of defined record types + containing the storage information necessary for maintaining the files + placed into a ZIP file. Each record type MUST be identified using a header + signature that identifies the record type. Signature values begin with the + two byte constant marker of 0x4b50, representing the characters "PK". + + +4.3 General Format of a .ZIP file +--------------------------------- + + 4.3.1 A ZIP file MUST contain an "end of central directory record". A ZIP + file containing only an "end of central directory record" is considered an + empty ZIP file. Files may be added or replaced within a ZIP file, or deleted. + A ZIP file MUST have only one "end of central directory record". Other + records defined in this specification MAY be used as needed to support + storage requirements for individual ZIP files. + + 4.3.2 Each file placed into a ZIP file MUST be preceeded by a "local + file header" record for that file. Each "local file header" MUST be + accompanied by a corresponding "central directory header" record within + the central directory section of the ZIP file. + + 4.3.3 Files MAY be stored in arbitrary order within a ZIP file. A ZIP + file MAY span multiple volumes or it MAY be split into user-defined + segment sizes. All values MUST be stored in little-endian byte order unless + otherwise specified in this document for a specific data element. + + 4.3.4 Compression MUST NOT be applied to a "local file header", an "encryption + header", or an "end of central directory record". Individual "central + directory records" must not be compressed, but the aggregate of all central + directory records MAY be compressed. + + 4.3.5 File data MAY be followed by a "data descriptor" for the file. Data + descriptors are used to facilitate ZIP file streaming. + + + 4.3.6 Overall .ZIP file format: + + [local file header 1] + [encryption header 1] + [file data 1] + [data descriptor 1] + . + . + . + [local file header n] + [encryption header n] + [file data n] + [data descriptor n] + [archive decryption header] + [archive extra data record] + [central directory header 1] + . + . + . + [central directory header n] + [zip64 end of central directory record] + [zip64 end of central directory locator] + [end of central directory record] + + + 4.3.7 Local file header: + + local file header signature 4 bytes (0x04034b50) + version needed to extract 2 bytes + general purpose bit flag 2 bytes + compression method 2 bytes + last mod file time 2 bytes + last mod file date 2 bytes + crc-32 4 bytes + compressed size 4 bytes + uncompressed size 4 bytes + file name length 2 bytes + extra field length 2 bytes + + file name (variable size) + extra field (variable size) + + 4.3.8 File data + + Immediately following the local header for a file + SHOULD be placed the compressed or stored data for the file. + If the file is encrypted, the encryption header for the file + SHOULD be placed after the local header and before the file + data. The series of [local file header][encryption header] + [file data][data descriptor] repeats for each file in the + .ZIP archive. + + Zero-byte files, directories, and other file types that + contain no content MUST not include file data. + + 4.3.9 Data descriptor: + + crc-32 4 bytes + compressed size 4 bytes + uncompressed size 4 bytes + + 4.3.9.1 This descriptor MUST exist if bit 3 of the general + purpose bit flag is set (see below). It is byte aligned + and immediately follows the last byte of compressed data. + This descriptor SHOULD be used only when it was not possible to + seek in the output .ZIP file, e.g., when the output .ZIP file + was standard output or a non-seekable device. For ZIP64(tm) format + archives, the compressed and uncompressed sizes are 8 bytes each. + + 4.3.9.2 When compressing files, compressed and uncompressed sizes + should be stored in ZIP64 format (as 8 byte values) when a + file's size exceeds 0xFFFFFFFF. However ZIP64 format may be + used regardless of the size of a file. When extracting, if + the zip64 extended information extra field is present for + the file the compressed and uncompressed sizes will be 8 + byte values. + + 4.3.9.3 Although not originally assigned a signature, the value + 0x08074b50 has commonly been adopted as a signature value + for the data descriptor record. Implementers should be + aware that ZIP files may be encountered with or without this + signature marking data descriptors and SHOULD account for + either case when reading ZIP files to ensure compatibility. + + 4.3.9.4 When writing ZIP files, implementors SHOULD include the + signature value marking the data descriptor record. When + the signature is used, the fields currently defined for + the data descriptor record will immediately follow the + signature. + + 4.3.9.5 An extensible data descriptor will be released in a + future version of this APPNOTE. This new record is intended to + resolve conflicts with the use of this record going forward, + and to provide better support for streamed file processing. + + 4.3.9.6 When the Central Directory Encryption method is used, + the data descriptor record is not required, but MAY be used. + If present, and bit 3 of the general purpose bit field is set to + indicate its presence, the values in fields of the data descriptor + record MUST be set to binary zeros. See the section on the Strong + Encryption Specification for information. Refer to the section in + this document entitled "Incorporating PKWARE Proprietary Technology + into Your Product" for more information. + + + 4.3.10 Archive decryption header: + + 4.3.10.1 The Archive Decryption Header is introduced in version 6.2 + of the ZIP format specification. This record exists in support + of the Central Directory Encryption Feature implemented as part of + the Strong Encryption Specification as described in this document. + When the Central Directory Structure is encrypted, this decryption + header MUST precede the encrypted data segment. + + 4.3.10.2 The encrypted data segment SHALL consist of the Archive + extra data record (if present) and the encrypted Central Directory + Structure data. The format of this data record is identical to the + Decryption header record preceding compressed file data. If the + central directory structure is encrypted, the location of the start of + this data record is determined using the Start of Central Directory + field in the Zip64 End of Central Directory record. See the + section on the Strong Encryption Specification for information + on the fields used in the Archive Decryption Header record. + Refer to the section in this document entitled "Incorporating + PKWARE Proprietary Technology into Your Product" for more information. + + + 4.3.11 Archive extra data record: + + archive extra data signature 4 bytes (0x08064b50) + extra field length 4 bytes + extra field data (variable size) + + 4.3.11.1 The Archive Extra Data Record is introduced in version 6.2 + of the ZIP format specification. This record MAY be used in support + of the Central Directory Encryption Feature implemented as part of + the Strong Encryption Specification as described in this document. + When present, this record MUST immediately precede the central + directory data structure. + + 4.3.11.2 The size of this data record SHALL be included in the + Size of the Central Directory field in the End of Central + Directory record. If the central directory structure is compressed, + but not encrypted, the location of the start of this data record is + determined using the Start of Central Directory field in the Zip64 + End of Central Directory record. Refer to the section in this document + entitled "Incorporating PKWARE Proprietary Technology into Your + Product" for more information. + + 4.3.12 Central directory structure: + + [central directory header 1] + . + . + . + [central directory header n] + [digital signature] + + File header: + + central file header signature 4 bytes (0x02014b50) + version made by 2 bytes + version needed to extract 2 bytes + general purpose bit flag 2 bytes + compression method 2 bytes + last mod file time 2 bytes + last mod file date 2 bytes + crc-32 4 bytes + compressed size 4 bytes + uncompressed size 4 bytes + file name length 2 bytes + extra field length 2 bytes + file comment length 2 bytes + disk number start 2 bytes + internal file attributes 2 bytes + external file attributes 4 bytes + relative offset of local header 4 bytes + + file name (variable size) + extra field (variable size) + file comment (variable size) + + 4.3.13 Digital signature: + + header signature 4 bytes (0x05054b50) + size of data 2 bytes + signature data (variable size) + + With the introduction of the Central Directory Encryption + feature in version 6.2 of this specification, the Central + Directory Structure MAY be stored both compressed and encrypted. + Although not required, it is assumed when encrypting the + Central Directory Structure, that it will be compressed + for greater storage efficiency. Information on the + Central Directory Encryption feature can be found in the section + describing the Strong Encryption Specification. The Digital + Signature record will be neither compressed nor encrypted. + + 4.3.14 Zip64 end of central directory record + + zip64 end of central dir + signature 4 bytes (0x06064b50) + size of zip64 end of central + directory record 8 bytes + version made by 2 bytes + version needed to extract 2 bytes + number of this disk 4 bytes + number of the disk with the + start of the central directory 4 bytes + total number of entries in the + central directory on this disk 8 bytes + total number of entries in the + central directory 8 bytes + size of the central directory 8 bytes + offset of start of central + directory with respect to + the starting disk number 8 bytes + zip64 extensible data sector (variable size) + + 4.3.14.1 The value stored into the "size of zip64 end of central + directory record" should be the size of the remaining + record and should not include the leading 12 bytes. + + Size = SizeOfFixedFields + SizeOfVariableData - 12. + + 4.3.14.2 The above record structure defines Version 1 of the + zip64 end of central directory record. Version 1 was + implemented in versions of this specification preceding + 6.2 in support of the ZIP64 large file feature. The + introduction of the Central Directory Encryption feature + implemented in version 6.2 as part of the Strong Encryption + Specification defines Version 2 of this record structure. + Refer to the section describing the Strong Encryption + Specification for details on the version 2 format for + this record. Refer to the section in this document entitled + "Incorporating PKWARE Proprietary Technology into Your Product" + for more information applicable to use of Version 2 of this + record. + + 4.3.14.3 Special purpose data MAY reside in the zip64 extensible + data sector field following either a V1 or V2 version of this + record. To ensure identification of this special purpose data + it must include an identifying header block consisting of the + following: + + Header ID - 2 bytes + Data Size - 4 bytes + + The Header ID field indicates the type of data that is in the + data block that follows. + + Data Size identifies the number of bytes that follow for this + data block type. + + 4.3.14.4 Multiple special purpose data blocks MAY be present. + Each MUST be preceded by a Header ID and Data Size field. Current + mappings of Header ID values supported in this field are as + defined in APPENDIX C. + + 4.3.15 Zip64 end of central directory locator + + zip64 end of central dir locator + signature 4 bytes (0x07064b50) + number of the disk with the + start of the zip64 end of + central directory 4 bytes + relative offset of the zip64 + end of central directory record 8 bytes + total number of disks 4 bytes + + 4.3.16 End of central directory record: + + end of central dir signature 4 bytes (0x06054b50) + number of this disk 2 bytes + number of the disk with the + start of the central directory 2 bytes + total number of entries in the + central directory on this disk 2 bytes + total number of entries in + the central directory 2 bytes + size of the central directory 4 bytes + offset of start of central + directory with respect to + the starting disk number 4 bytes + .ZIP file comment length 2 bytes + .ZIP file comment (variable size) + +4.4 Explanation of fields +-------------------------- + + 4.4.1 General notes on fields + + 4.4.1.1 All fields unless otherwise noted are unsigned and stored + in Intel low-byte:high-byte, low-word:high-word order. + + 4.4.1.2 String fields are not null terminated, since the length + is given explicitly. + + 4.4.1.3 The entries in the central directory may not necessarily + be in the same order that files appear in the .ZIP file. + + 4.4.1.4 If one of the fields in the end of central directory + record is too small to hold required data, the field should be + set to -1 (0xFFFF or 0xFFFFFFFF) and the ZIP64 format record + should be created. + + 4.4.1.5 The end of central directory record and the Zip64 end + of central directory locator record MUST reside on the same + disk when splitting or spanning an archive. + + 4.4.2 version made by (2 bytes) + + 4.4.2.1 The upper byte indicates the compatibility of the file + attribute information. If the external file attributes + are compatible with MS-DOS and can be read by PKZIP for + DOS version 2.04g then this value will be zero. If these + attributes are not compatible, then this value will + identify the host system on which the attributes are + compatible. Software can use this information to determine + the line record format for text files etc. + + 4.4.2.2 The current mappings are: + + 0 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems) + 1 - Amiga 2 - OpenVMS + 3 - UNIX 4 - VM/CMS + 5 - Atari ST 6 - OS/2 H.P.F.S. + 7 - Macintosh 8 - Z-System + 9 - CP/M 10 - Windows NTFS + 11 - MVS (OS/390 - Z/OS) 12 - VSE + 13 - Acorn Risc 14 - VFAT + 15 - alternate MVS 16 - BeOS + 17 - Tandem 18 - OS/400 + 19 - OS X (Darwin) 20 thru 255 - unused + + 4.4.2.3 The lower byte indicates the ZIP specification version + (the version of this document) supported by the software + used to encode the file. The value/10 indicates the major + version number, and the value mod 10 is the minor version + number. + + 4.4.3 version needed to extract (2 bytes) + + 4.4.3.1 The minimum supported ZIP specification version needed + to extract the file, mapped as above. This value is based on + the specific format features a ZIP program MUST support to + be able to extract the file. If multiple features are + applied to a file, the minimum version MUST be set to the + feature having the highest value. New features or feature + changes affecting the published format specification will be + implemented using higher version numbers than the last + published value to avoid conflict. + + 4.4.3.2 Current minimum feature versions are as defined below: + + 1.0 - Default value + 1.1 - File is a volume label + 2.0 - File is a folder (directory) + 2.0 - File is compressed using Deflate compression + 2.0 - File is encrypted using traditional PKWARE encryption + 2.1 - File is compressed using Deflate64(tm) + 2.5 - File is compressed using PKWARE DCL Implode + 2.7 - File is a patch data set + 4.5 - File uses ZIP64 format extensions + 4.6 - File is compressed using BZIP2 compression* + 5.0 - File is encrypted using DES + 5.0 - File is encrypted using 3DES + 5.0 - File is encrypted using original RC2 encryption + 5.0 - File is encrypted using RC4 encryption + 5.1 - File is encrypted using AES encryption + 5.1 - File is encrypted using corrected RC2 encryption** + 5.2 - File is encrypted using corrected RC2-64 encryption** + 6.1 - File is encrypted using non-OAEP key wrapping*** + 6.2 - Central directory encryption + 6.3 - File is compressed using LZMA + 6.3 - File is compressed using PPMd+ + 6.3 - File is encrypted using Blowfish + 6.3 - File is encrypted using Twofish + + 4.4.3.3 Notes on version needed to extract + + * Early 7.x (pre-7.2) versions of PKZIP incorrectly set the + version needed to extract for BZIP2 compression to be 50 + when it should have been 46. + + ** Refer to the section on Strong Encryption Specification + for additional information regarding RC2 corrections. + + *** Certificate encryption using non-OAEP key wrapping is the + intended mode of operation for all versions beginning with 6.1. + Support for OAEP key wrapping MUST only be used for + backward compatibility when sending ZIP files to be opened by + versions of PKZIP older than 6.1 (5.0 or 6.0). + + + Files compressed using PPMd MUST set the version + needed to extract field to 6.3, however, not all ZIP + programs enforce this and may be unable to decompress + data files compressed using PPMd if this value is set. + + When using ZIP64 extensions, the corresponding value in the + zip64 end of central directory record MUST also be set. + This field should be set appropriately to indicate whether + Version 1 or Version 2 format is in use. + + + 4.4.4 general purpose bit flag: (2 bytes) + + Bit 0: If set, indicates that the file is encrypted. + + (For Method 6 - Imploding) + Bit 1: If the compression method used was type 6, + Imploding, then this bit, if set, indicates + an 8K sliding dictionary was used. If clear, + then a 4K sliding dictionary was used. + + Bit 2: If the compression method used was type 6, + Imploding, then this bit, if set, indicates + 3 Shannon-Fano trees were used to encode the + sliding dictionary output. If clear, then 2 + Shannon-Fano trees were used. + + (For Methods 8 and 9 - Deflating) + Bit 2 Bit 1 + 0 0 Normal (-en) compression option was used. + 0 1 Maximum (-exx/-ex) compression option was used. + 1 0 Fast (-ef) compression option was used. + 1 1 Super Fast (-es) compression option was used. + + (For Method 14 - LZMA) + Bit 1: If the compression method used was type 14, + LZMA, then this bit, if set, indicates + an end-of-stream (EOS) marker is used to + mark the end of the compressed data stream. + If clear, then an EOS marker is not present + and the compressed data size must be known + to extract. + + Note: Bits 1 and 2 are undefined if the compression + method is any other. + + Bit 3: If this bit is set, the fields crc-32, compressed + size and uncompressed size are set to zero in the + local header. The correct values are put in the + data descriptor immediately following the compressed + data. (Note: PKZIP version 2.04g for DOS only + recognizes this bit for method 8 compression, newer + versions of PKZIP recognize this bit for any + compression method.) + + Bit 4: Reserved for use with method 8, for enhanced + deflating. + + Bit 5: If this bit is set, this indicates that the file is + compressed patched data. (Note: Requires PKZIP + version 2.70 or greater) + + Bit 6: Strong encryption. If this bit is set, you MUST + set the version needed to extract value to at least + 50 and you MUST also set bit 0. If AES encryption + is used, the version needed to extract value MUST + be at least 51. See the section describing the Strong + Encryption Specification for details. Refer to the + section in this document entitled "Incorporating PKWARE + Proprietary Technology into Your Product" for more + information. + + Bit 7: Currently unused. + + Bit 8: Currently unused. + + Bit 9: Currently unused. + + Bit 10: Currently unused. + + Bit 11: Language encoding flag (EFS). If this bit is set, + the filename and comment fields for this file + MUST be encoded using UTF-8. (see APPENDIX D) + + Bit 12: Reserved by PKWARE for enhanced compression. + + Bit 13: Set when encrypting the Central Directory to indicate + selected data values in the Local Header are masked to + hide their actual values. See the section describing + the Strong Encryption Specification for details. Refer + to the section in this document entitled "Incorporating + PKWARE Proprietary Technology into Your Product" for + more information. + + Bit 14: Reserved by PKWARE. + + Bit 15: Reserved by PKWARE. + + 4.4.5 compression method: (2 bytes) + + 0 - The file is stored (no compression) + 1 - The file is Shrunk + 2 - The file is Reduced with compression factor 1 + 3 - The file is Reduced with compression factor 2 + 4 - The file is Reduced with compression factor 3 + 5 - The file is Reduced with compression factor 4 + 6 - The file is Imploded + 7 - Reserved for Tokenizing compression algorithm + 8 - The file is Deflated + 9 - Enhanced Deflating using Deflate64(tm) + 10 - PKWARE Data Compression Library Imploding (old IBM TERSE) + 11 - Reserved by PKWARE + 12 - File is compressed using BZIP2 algorithm + 13 - Reserved by PKWARE + 14 - LZMA (EFS) + 15 - Reserved by PKWARE + 16 - Reserved by PKWARE + 17 - Reserved by PKWARE + 18 - File is compressed using IBM TERSE (new) + 19 - IBM LZ77 z Architecture (PFS) + 97 - WavPack compressed data + 98 - PPMd version I, Rev 1 + + + 4.4.6 date and time fields: (2 bytes each) + + The date and time are encoded in standard MS-DOS format. + If input came from standard input, the date and time are + those at which compression was started for this data. + If encrypting the central directory and general purpose bit + flag 13 is set indicating masking, the value stored in the + Local Header will be zero. + + 4.4.7 CRC-32: (4 bytes) + + The CRC-32 algorithm was generously contributed by + David Schwaderer and can be found in his excellent + book "C Programmers Guide to NetBIOS" published by + Howard W. Sams & Co. Inc. The 'magic number' for + the CRC is 0xdebb20e3. The proper CRC pre and post + conditioning is used, meaning that the CRC register + is pre-conditioned with all ones (a starting value + of 0xffffffff) and the value is post-conditioned by + taking the one's complement of the CRC residual. + If bit 3 of the general purpose flag is set, this + field is set to zero in the local header and the correct + value is put in the data descriptor and in the central + directory. When encrypting the central directory, if the + local header is not in ZIP64 format and general purpose + bit flag 13 is set indicating masking, the value stored + in the Local Header will be zero. + + 4.4.8 compressed size: (4 bytes) + 4.4.9 uncompressed size: (4 bytes) + + The size of the file compressed (4.4.8) and uncompressed, + (4.4.9) respectively. When a decryption header is present it + will be placed in front of the file data and the value of the + compressed file size will include the bytes of the decryption + header. If bit 3 of the general purpose bit flag is set, + these fields are set to zero in the local header and the + correct values are put in the data descriptor and + in the central directory. If an archive is in ZIP64 format + and the value in this field is 0xFFFFFFFF, the size will be + in the corresponding 8 byte ZIP64 extended information + extra field. When encrypting the central directory, if the + local header is not in ZIP64 format and general purpose bit + flag 13 is set indicating masking, the value stored for the + uncompressed size in the Local Header will be zero. + + 4.4.10 file name length: (2 bytes) + 4.4.11 extra field length: (2 bytes) + 4.4.12 file comment length: (2 bytes) + + The length of the file name, extra field, and comment + fields respectively. The combined length of any + directory record and these three fields should not + generally exceed 65,535 bytes. If input came from standard + input, the file name length is set to zero. + + + 4.4.13 disk number start: (2 bytes) + + The number of the disk on which this file begins. If an + archive is in ZIP64 format and the value in this field is + 0xFFFF, the size will be in the corresponding 4 byte zip64 + extended information extra field. + + 4.4.14 internal file attributes: (2 bytes) + + Bits 1 and 2 are reserved for use by PKWARE. + + 4.4.14.1 The lowest bit of this field indicates, if set, + that the file is apparently an ASCII or text file. If not + set, that the file apparently contains binary data. + The remaining bits are unused in version 1.0. + + 4.4.14.2 The 0x0002 bit of this field indicates, if set, that + a 4 byte variable record length control field precedes each + logical record indicating the length of the record. The + record length control field is stored in little-endian byte + order. This flag is independent of text control characters, + and if used in conjunction with text data, includes any + control characters in the total length of the record. This + value is provided for mainframe data transfer support. + + 4.4.15 external file attributes: (4 bytes) + + The mapping of the external attributes is + host-system dependent (see 'version made by'). For + MS-DOS, the low order byte is the MS-DOS directory + attribute byte. If input came from standard input, this + field is set to zero. + + 4.4.16 relative offset of local header: (4 bytes) + + This is the offset from the start of the first disk on + which this file appears, to where the local header should + be found. If an archive is in ZIP64 format and the value + in this field is 0xFFFFFFFF, the size will be in the + corresponding 8 byte zip64 extended information extra field. + + 4.4.17 file name: (Variable) + + 4.4.17.1 The name of the file, with optional relative path. + The path stored MUST not contain a drive or + device letter, or a leading slash. All slashes + MUST be forward slashes '/' as opposed to + backwards slashes '\' for compatibility with Amiga + and UNIX file systems etc. If input came from standard + input, there is no file name field. + + 4.4.17.2 If using the Central Directory Encryption Feature and + general purpose bit flag 13 is set indicating masking, the file + name stored in the Local Header will not be the actual file name. + A masking value consisting of a unique hexadecimal value will + be stored. This value will be sequentially incremented for each + file in the archive. See the section on the Strong Encryption + Specification for details on retrieving the encrypted file name. + Refer to the section in this document entitled "Incorporating PKWARE + Proprietary Technology into Your Product" for more information. + + + 4.4.18 file comment: (Variable) + + The comment for this file. + + 4.4.19 number of this disk: (2 bytes) + + The number of this disk, which contains central + directory end record. If an archive is in ZIP64 format + and the value in this field is 0xFFFF, the size will + be in the corresponding 4 byte zip64 end of central + directory field. + + + 4.4.20 number of the disk with the start of the central + directory: (2 bytes) + + The number of the disk on which the central + directory starts. If an archive is in ZIP64 format + and the value in this field is 0xFFFF, the size will + be in the corresponding 4 byte zip64 end of central + directory field. + + 4.4.21 total number of entries in the central dir on + this disk: (2 bytes) + + The number of central directory entries on this disk. + If an archive is in ZIP64 format and the value in + this field is 0xFFFF, the size will be in the + corresponding 8 byte zip64 end of central + directory field. + + 4.4.22 total number of entries in the central dir: (2 bytes) + + The total number of files in the .ZIP file. If an + archive is in ZIP64 format and the value in this field + is 0xFFFF, the size will be in the corresponding 8 byte + zip64 end of central directory field. + + 4.4.23 size of the central directory: (4 bytes) + + The size (in bytes) of the entire central directory. + If an archive is in ZIP64 format and the value in + this field is 0xFFFFFFFF, the size will be in the + corresponding 8 byte zip64 end of central + directory field. + + 4.4.24 offset of start of central directory with respect to + the starting disk number: (4 bytes) + + Offset of the start of the central directory on the + disk on which the central directory starts. If an + archive is in ZIP64 format and the value in this + field is 0xFFFFFFFF, the size will be in the + corresponding 8 byte zip64 end of central + directory field. + + 4.4.25 .ZIP file comment length: (2 bytes) + + The length of the comment for this .ZIP file. + + 4.4.26 .ZIP file comment: (Variable) + + The comment for this .ZIP file. ZIP file comment data + is stored unsecured. No encryption or data authentication + is applied to this area at this time. Confidential information + should not be stored in this section. + + 4.4.27 zip64 extensible data sector (variable size) + + (currently reserved for use by PKWARE) + + + 4.4.28 extra field: (Variable) + + This SHOULD be used for storage expansion. If additional + information needs to be stored within a ZIP file for special + application or platform needs, it SHOULD be stored here. + Programs supporting earlier versions of this specification can + then safely skip the file, and find the next file or header. + This field will be 0 length in version 1.0. + + Existing extra fields are defined in the section + Extensible data fields that follows. + +4.5 Extensible data fields +-------------------------- + + 4.5.1 In order to allow different programs and different types + of information to be stored in the 'extra' field in .ZIP + files, the following structure MUST be used for all + programs storing data in this field: + + header1+data1 + header2+data2 . . . + + Each header should consist of: + + Header ID - 2 bytes + Data Size - 2 bytes + + Note: all fields stored in Intel low-byte/high-byte order. + + The Header ID field indicates the type of data that is in + the following data block. + + Header IDs of 0 thru 31 are reserved for use by PKWARE. + The remaining IDs can be used by third party vendors for + proprietary usage. + + 4.5.2 The current Header ID mappings defined by PKWARE are: + + 0x0001 Zip64 extended information extra field + 0x0007 AV Info + 0x0008 Reserved for extended language encoding data (PFS) + (see APPENDIX D) + 0x0009 OS/2 + 0x000a NTFS + 0x000c OpenVMS + 0x000d UNIX + 0x000e Reserved for file stream and fork descriptors + 0x000f Patch Descriptor + 0x0014 PKCS#7 Store for X.509 Certificates + 0x0015 X.509 Certificate ID and Signature for + individual file + 0x0016 X.509 Certificate ID for Central Directory + 0x0017 Strong Encryption Header + 0x0018 Record Management Controls + 0x0019 PKCS#7 Encryption Recipient Certificate List + 0x0065 IBM S/390 (Z390), AS/400 (I400) attributes + - uncompressed + 0x0066 Reserved for IBM S/390 (Z390), AS/400 (I400) + attributes - compressed + 0x4690 POSZIP 4690 (reserved) + + + 4.5.3 -Zip64 Extended Information Extra Field (0x0001): + + The following is the layout of the zip64 extended + information "extra" block. If one of the size or + offset fields in the Local or Central directory + record is too small to hold the required data, + a Zip64 extended information record is created. + The order of the fields in the zip64 extended + information record is fixed, but the fields MUST + only appear if the corresponding Local or Central + directory record field is set to 0xFFFF or 0xFFFFFFFF. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- +(ZIP64) 0x0001 2 bytes Tag for this "extra" block type + Size 2 bytes Size of this "extra" block + Original + Size 8 bytes Original uncompressed file size + Compressed + Size 8 bytes Size of compressed data + Relative Header + Offset 8 bytes Offset of local header record + Disk Start + Number 4 bytes Number of the disk on which + this file starts + + This entry in the Local header MUST include BOTH original + and compressed file size fields. If encrypting the + central directory and bit 13 of the general purpose bit + flag is set indicating masking, the value stored in the + Local Header for the original file size will be zero. + + + 4.5.4 -OS/2 Extra Field (0x0009): + + The following is the layout of the OS/2 attributes "extra" + block. (Last Revision 09/05/95) + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- +(OS/2) 0x0009 2 bytes Tag for this "extra" block type + TSize 2 bytes Size for the following data block + BSize 4 bytes Uncompressed Block Size + CType 2 bytes Compression type + EACRC 4 bytes CRC value for uncompress block + (var) variable Compressed block + + The OS/2 extended attribute structure (FEA2LIST) is + compressed and then stored in its entirety within this + structure. There will only ever be one "block" of data in + VarFields[]. + + 4.5.5 -NTFS Extra Field (0x000a): + + The following is the layout of the NTFS attributes + "extra" block. (Note: At this time the Mtime, Atime + and Ctime values MAY be used on any WIN32 system.) + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- +(NTFS) 0x000a 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of the total "extra" block + Reserved 4 bytes Reserved for future use + Tag1 2 bytes NTFS attribute tag value #1 + Size1 2 bytes Size of attribute #1, in bytes + (var) Size1 Attribute #1 data + . + . + . + TagN 2 bytes NTFS attribute tag value #N + SizeN 2 bytes Size of attribute #N, in bytes + (var) SizeN Attribute #N data + + For NTFS, values for Tag1 through TagN are as follows: + (currently only one set of attributes is defined for NTFS) + + Tag Size Description + ----- ---- ----------- + 0x0001 2 bytes Tag for attribute #1 + Size1 2 bytes Size of attribute #1, in bytes + Mtime 8 bytes File last modification time + Atime 8 bytes File last access time + Ctime 8 bytes File creation time + + 4.5.6 -OpenVMS Extra Field (0x000c): + + The following is the layout of the OpenVMS attributes + "extra" block. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (VMS) 0x000c 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of the total "extra" block + CRC 4 bytes 32-bit CRC for remainder of the block + Tag1 2 bytes OpenVMS attribute tag value #1 + Size1 2 bytes Size of attribute #1, in bytes + (var) Size1 Attribute #1 data + . + . + . + TagN 2 bytes OpenVMS attribute tag value #N + SizeN 2 bytes Size of attribute #N, in bytes + (var) SizeN Attribute #N data + + OpenVMS Extra Field Rules: + + 4.5.6.1. There will be one or more attributes present, which + will each be preceded by the above TagX & SizeX values. + These values are identical to the ATR$C_XXXX and ATR$S_XXXX + constants which are defined in ATR.H under OpenVMS C. Neither + of these values will ever be zero. + + 4.5.6.2. No word alignment or padding is performed. + + 4.5.6.3. A well-behaved PKZIP/OpenVMS program should never produce + more than one sub-block with the same TagX value. Also, there will + never be more than one "extra" block of type 0x000c in a particular + directory record. + + 4.5.7 -UNIX Extra Field (0x000d): + + The following is the layout of the UNIX "extra" block. + Note: all fields are stored in Intel low-byte/high-byte + order. + + Value Size Description + ----- ---- ----------- +(UNIX) 0x000d 2 bytes Tag for this "extra" block type + TSize 2 bytes Size for the following data block + Atime 4 bytes File last access time + Mtime 4 bytes File last modification time + Uid 2 bytes File user ID + Gid 2 bytes File group ID + (var) variable Variable length data field + + The variable length data field will contain file type + specific data. Currently the only values allowed are + the original "linked to" file names for hard or symbolic + links, and the major and minor device node numbers for + character and block device nodes. Since device nodes + cannot be either symbolic or hard links, only one set of + variable length data is stored. Link files will have the + name of the original file stored. This name is NOT NULL + terminated. Its size can be determined by checking TSize - + 12. Device entries will have eight bytes stored as two 4 + byte entries (in little endian format). The first entry + will be the major device number, and the second the minor + device number. + + 4.5.8 -PATCH Descriptor Extra Field (0x000f): + + 4.5.8.1 The following is the layout of the Patch Descriptor + "extra" block. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- +(Patch) 0x000f 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of the total "extra" block + Version 2 bytes Version of the descriptor + Flags 4 bytes Actions and reactions (see below) + OldSize 4 bytes Size of the file about to be patched + OldCRC 4 bytes 32-bit CRC of the file to be patched + NewSize 4 bytes Size of the resulting file + NewCRC 4 bytes 32-bit CRC of the resulting file + + 4.5.8.2 Actions and reactions + + Bits Description + ---- ---------------- + 0 Use for auto detection + 1 Treat as a self-patch + 2-3 RESERVED + 4-5 Action (see below) + 6-7 RESERVED + 8-9 Reaction (see below) to absent file + 10-11 Reaction (see below) to newer file + 12-13 Reaction (see below) to unknown file + 14-15 RESERVED + 16-31 RESERVED + + 4.5.8.2.1 Actions + + Action Value + ------ ----- + none 0 + add 1 + delete 2 + patch 3 + + 4.5.8.2.2 Reactions + + Reaction Value + -------- ----- + ask 0 + skip 1 + ignore 2 + fail 3 + + 4.5.8.3 Patch support is provided by PKPatchMaker(tm) technology + and is covered under U.S. Patents and Patents Pending. The use or + implementation in a product of certain technological aspects set + forth in the current APPNOTE, including those with regard to + strong encryption or patching requires a license from PKWARE. + Refer to the section in this document entitled "Incorporating + PKWARE Proprietary Technology into Your Product" for more + information. + + 4.5.9 -PKCS#7 Store for X.509 Certificates (0x0014): + + This field MUST contain information about each of the certificates + files may be signed with. When the Central Directory Encryption + feature is enabled for a ZIP file, this record will appear in + the Archive Extra Data Record, otherwise it will appear in the + first central directory record and will be ignored in any + other record. + + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- +(Store) 0x0014 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of the store data + TData TSize Data about the store + + + 4.5.10 -X.509 Certificate ID and Signature for individual file (0x0015): + + This field contains the information about which certificate in + the PKCS#7 store was used to sign a particular file. It also + contains the signature data. This field can appear multiple + times, but can only appear once per certificate. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- +(CID) 0x0015 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of data that follows + TData TSize Signature Data + + 4.5.11 -X.509 Certificate ID and Signature for central directory (0x0016): + + This field contains the information about which certificate in + the PKCS#7 store was used to sign the central directory structure. + When the Central Directory Encryption feature is enabled for a + ZIP file, this record will appear in the Archive Extra Data Record, + otherwise it will appear in the first central directory record. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- +(CDID) 0x0016 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of data that follows + TData TSize Data + + 4.5.12 -Strong Encryption Header (0x0017): + + Value Size Description + ----- ---- ----------- + 0x0017 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of data that follows + Format 2 bytes Format definition for this record + AlgID 2 bytes Encryption algorithm identifier + Bitlen 2 bytes Bit length of encryption key + Flags 2 bytes Processing flags + CertData TSize-8 Certificate decryption extra field data + (refer to the explanation for CertData + in the section describing the + Certificate Processing Method under + the Strong Encryption Specification) + + See the section describing the Strong Encryption Specification + for details. Refer to the section in this document entitled + "Incorporating PKWARE Proprietary Technology into Your Product" + for more information. + + 4.5.13 -Record Management Controls (0x0018): + + Value Size Description + ----- ---- ----------- +(Rec-CTL) 0x0018 2 bytes Tag for this "extra" block type + CSize 2 bytes Size of total extra block data + Tag1 2 bytes Record control attribute 1 + Size1 2 bytes Size of attribute 1, in bytes + Data1 Size1 Attribute 1 data + . + . + . + TagN 2 bytes Record control attribute N + SizeN 2 bytes Size of attribute N, in bytes + DataN SizeN Attribute N data + + + 4.5.14 -PKCS#7 Encryption Recipient Certificate List (0x0019): + + This field MAY contain information about each of the certificates + used in encryption processing and it can be used to identify who is + allowed to decrypt encrypted files. This field should only appear + in the archive extra data record. This field is not required and + serves only to aid archive modifications by preserving public + encryption key data. Individual security requirements may dictate + that this data be omitted to deter information exposure. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- +(CStore) 0x0019 2 bytes Tag for this "extra" block type + TSize 2 bytes Size of the store data + TData TSize Data about the store + + TData: + + Value Size Description + ----- ---- ----------- + Version 2 bytes Format version number - must 0x0001 at this time + CStore (var) PKCS#7 data blob + + See the section describing the Strong Encryption Specification + for details. Refer to the section in this document entitled + "Incorporating PKWARE Proprietary Technology into Your Product" + for more information. + + 4.5.15 -MVS Extra Field (0x0065): + + The following is the layout of the MVS "extra" block. + Note: Some fields are stored in Big Endian format. + All text is in EBCDIC format unless otherwise specified. + + Value Size Description + ----- ---- ----------- +(MVS) 0x0065 2 bytes Tag for this "extra" block type + TSize 2 bytes Size for the following data block + ID 4 bytes EBCDIC "Z390" 0xE9F3F9F0 or + "T4MV" for TargetFour + (var) TSize-4 Attribute data (see APPENDIX B) + + + 4.5.16 -OS/400 Extra Field (0x0065): + + The following is the layout of the OS/400 "extra" block. + Note: Some fields are stored in Big Endian format. + All text is in EBCDIC format unless otherwise specified. + + Value Size Description + ----- ---- ----------- +(OS400) 0x0065 2 bytes Tag for this "extra" block type + TSize 2 bytes Size for the following data block + ID 4 bytes EBCDIC "I400" 0xC9F4F0F0 or + "T4MV" for TargetFour + (var) TSize-4 Attribute data (see APPENDIX A) + +4.6 Third Party Mappings +------------------------ + + 4.6.1 Third party mappings commonly used are: + + 0x07c8 Macintosh + 0x2605 ZipIt Macintosh + 0x2705 ZipIt Macintosh 1.3.5+ + 0x2805 ZipIt Macintosh 1.3.5+ + 0x334d Info-ZIP Macintosh + 0x4341 Acorn/SparkFS + 0x4453 Windows NT security descriptor (binary ACL) + 0x4704 VM/CMS + 0x470f MVS + 0x4b46 FWKCS MD5 (see below) + 0x4c41 OS/2 access control list (text ACL) + 0x4d49 Info-ZIP OpenVMS + 0x4f4c Xceed original location extra field + 0x5356 AOS/VS (ACL) + 0x5455 extended timestamp + 0x554e Xceed unicode extra field + 0x5855 Info-ZIP UNIX (original, also OS/2, NT, etc) + 0x6375 Info-ZIP Unicode Comment Extra Field + 0x6542 BeOS/BeBox + 0x7075 Info-ZIP Unicode Path Extra Field + 0x756e ASi UNIX + 0x7855 Info-ZIP UNIX (new) + 0xa220 Microsoft Open Packaging Growth Hint + 0xfd4a SMS/QDOS + + Detailed descriptions of Extra Fields defined by third + party mappings will be documented as information on + these data structures is made available to PKWARE. + PKWARE does not guarantee the accuracy of any published + third party data. + + 4.6.2 Third-party Extra Fields must include a Header ID using + the format defined in the section of this document + titled Extensible Data Fields (section 4.5). + + The Data Size field indicates the size of the following + data block. Programs can use this value to skip to the + next header block, passing over any data blocks that are + not of interest. + + Note: As stated above, the size of the entire .ZIP file + header, including the file name, comment, and extra + field should not exceed 64K in size. + + 4.6.3 In case two different programs should appropriate the same + Header ID value, it is strongly recommended that each + program SHOULD place a unique signature of at least two bytes in + size (and preferably 4 bytes or bigger) at the start of + each data area. Every program SHOULD verify that its + unique signature is present, in addition to the Header ID + value being correct, before assuming that it is a block of + known type. + + Third-party Mappings: + + 4.6.4 -ZipIt Macintosh Extra Field (long) (0x2605): + + The following is the layout of the ZipIt extra block + for Macintosh. The local-header and central-header versions + are identical. This block must be present if the file is + stored MacBinary-encoded and it should not be used if the file + is not stored MacBinary-encoded. + + Value Size Description + ----- ---- ----------- + (Mac2) 0x2605 Short tag for this extra block type + TSize Short total data size for this block + "ZPIT" beLong extra-field signature + FnLen Byte length of FileName + FileName variable full Macintosh filename + FileType Byte[4] four-byte Mac file type string + Creator Byte[4] four-byte Mac creator string + + + 4.6.5 -ZipIt Macintosh Extra Field (short, for files) (0x2705): + + The following is the layout of a shortened variant of the + ZipIt extra block for Macintosh (without "full name" entry). + This variant is used by ZipIt 1.3.5 and newer for entries of + files (not directories) that do not have a MacBinary encoded + file. The local-header and central-header versions are identical. + + Value Size Description + ----- ---- ----------- + (Mac2b) 0x2705 Short tag for this extra block type + TSize Short total data size for this block (12) + "ZPIT" beLong extra-field signature + FileType Byte[4] four-byte Mac file type string + Creator Byte[4] four-byte Mac creator string + fdFlags beShort attributes from FInfo.frFlags, + may be omitted + 0x0000 beShort reserved, may be omitted + + + 4.6.6 -ZipIt Macintosh Extra Field (short, for directories) (0x2805): + + The following is the layout of a shortened variant of the + ZipIt extra block for Macintosh used only for directory + entries. This variant is used by ZipIt 1.3.5 and newer to + save some optional Mac-specific information about directories. + The local-header and central-header versions are identical. + + Value Size Description + ----- ---- ----------- + (Mac2c) 0x2805 Short tag for this extra block type + TSize Short total data size for this block (12) + "ZPIT" beLong extra-field signature + frFlags beShort attributes from DInfo.frFlags, may + be omitted + View beShort ZipIt view flag, may be omitted + + + The View field specifies ZipIt-internal settings as follows: + + Bits of the Flags: + bit 0 if set, the folder is shown expanded (open) + when the archive contents are viewed in ZipIt. + bits 1-15 reserved, zero; + + + 4.6.7 -FWKCS MD5 Extra Field (0x4b46): + + The FWKCS Contents_Signature System, used in + automatically identifying files independent of file name, + optionally adds and uses an extra field to support the + rapid creation of an enhanced contents_signature: + + Header ID = 0x4b46 + Data Size = 0x0013 + Preface = 'M','D','5' + followed by 16 bytes containing the uncompressed file's + 128_bit MD5 hash(1), low byte first. + + When FWKCS revises a .ZIP file central directory to add + this extra field for a file, it also replaces the + central directory entry for that file's uncompressed + file length with a measured value. + + FWKCS provides an option to strip this extra field, if + present, from a .ZIP file central directory. In adding + this extra field, FWKCS preserves .ZIP file Authenticity + Verification; if stripping this extra field, FWKCS + preserves all versions of AV through PKZIP version 2.04g. + + FWKCS, and FWKCS Contents_Signature System, are + trademarks of Frederick W. Kantor. + + (1) R. Rivest, RFC1321.TXT, MIT Laboratory for Computer + Science and RSA Data Security, Inc., April 1992. + ll.76-77: "The MD5 algorithm is being placed in the + public domain for review and possible adoption as a + standard." + + + 4.6.8 -Info-ZIP Unicode Comment Extra Field (0x6375): + + Stores the UTF-8 version of the file comment as stored in the + central directory header. (Last Revision 20070912) + + Value Size Description + ----- ---- ----------- + (UCom) 0x6375 Short tag for this extra block type ("uc") + TSize Short total data size for this block + Version 1 byte version of this extra field, currently 1 + ComCRC32 4 bytes Comment Field CRC32 Checksum + UnicodeCom Variable UTF-8 version of the entry comment + + Currently Version is set to the number 1. If there is a need + to change this field, the version will be incremented. Changes + may not be backward compatible so this extra field should not be + used if the version is not recognized. + + The ComCRC32 is the standard zip CRC32 checksum of the File Comment + field in the central directory header. This is used to verify that + the comment field has not changed since the Unicode Comment extra field + was created. This can happen if a utility changes the File Comment + field but does not update the UTF-8 Comment extra field. If the CRC + check fails, this Unicode Comment extra field should be ignored and + the File Comment field in the header should be used instead. + + The UnicodeCom field is the UTF-8 version of the File Comment field + in the header. As UnicodeCom is defined to be UTF-8, no UTF-8 byte + order mark (BOM) is used. The length of this field is determined by + subtracting the size of the previous fields from TSize. If both the + File Name and Comment fields are UTF-8, the new General Purpose Bit + Flag, bit 11 (Language encoding flag (EFS)), can be used to indicate + both the header File Name and Comment fields are UTF-8 and, in this + case, the Unicode Path and Unicode Comment extra fields are not + needed and should not be created. Note that, for backward + compatibility, bit 11 should only be used if the native character set + of the paths and comments being zipped up are already in UTF-8. It is + expected that the same file comment storage method, either general + purpose bit 11 or extra fields, be used in both the Local and Central + Directory Header for a file. + + + 4.6.9 -Info-ZIP Unicode Path Extra Field (0x7075): + + Stores the UTF-8 version of the file name field as stored in the + local header and central directory header. (Last Revision 20070912) + + Value Size Description + ----- ---- ----------- + (UPath) 0x7075 Short tag for this extra block type ("up") + TSize Short total data size for this block + Version 1 byte version of this extra field, currently 1 + NameCRC32 4 bytes File Name Field CRC32 Checksum + UnicodeName Variable UTF-8 version of the entry File Name + + Currently Version is set to the number 1. If there is a need + to change this field, the version will be incremented. Changes + may not be backward compatible so this extra field should not be + used if the version is not recognized. + + The NameCRC32 is the standard zip CRC32 checksum of the File Name + field in the header. This is used to verify that the header + File Name field has not changed since the Unicode Path extra field + was created. This can happen if a utility renames the File Name but + does not update the UTF-8 path extra field. If the CRC check fails, + this UTF-8 Path Extra Field should be ignored and the File Name field + in the header should be used instead. + + The UnicodeName is the UTF-8 version of the contents of the File Name + field in the header. As UnicodeName is defined to be UTF-8, no UTF-8 + byte order mark (BOM) is used. The length of this field is determined + by subtracting the size of the previous fields from TSize. If both + the File Name and Comment fields are UTF-8, the new General Purpose + Bit Flag, bit 11 (Language encoding flag (EFS)), can be used to + indicate that both the header File Name and Comment fields are UTF-8 + and, in this case, the Unicode Path and Unicode Comment extra fields + are not needed and should not be created. Note that, for backward + compatibility, bit 11 should only be used if the native character set + of the paths and comments being zipped up are already in UTF-8. It is + expected that the same file name storage method, either general + purpose bit 11 or extra fields, be used in both the Local and Central + Directory Header for a file. + + + 4.6.10 -Microsoft Open Packaging Growth Hint (0xa220): + + Value Size Description + ----- ---- ----------- + 0xa220 Short tag for this extra block type + TSize Short size of Sig + PadVal + Padding + Sig Short verification signature (A028) + PadVal Short Initial padding value + Padding variable filled with NULL characters + +4.7 Manifest Files +------------------ + + 4.7.1 Applications using ZIP files may have a need for additional + information that must be included with the files placed into + a ZIP file. Application specific information that cannot be + stored using the defined ZIP storage records SHOULD be stored + using the extensible Extra Field convention defined in this + document. However, some applications may use a manifest + file as a means for storing additional information. One + example is the META-INF/MANIFEST.MF file used in ZIP formatted + files having the .JAR extension (JAR files). + + 4.7.2 A manifest file is a file created for the application process + that requires this information. A manifest file MAY be of any + file type required by the defining application process. It is + placed within the same ZIP file as files to which this information + applies. By convention, this file is typically the first file placed + into the ZIP file and it may include a defined directory path. + + 4.7.3 Manifest files may be compressed or encrypted as needed for + application processing of the files inside the ZIP files. + + Manifest files are outside of the scope of this specification. + + +5.0 Explanation of compression methods +-------------------------------------- + + +5.1 UnShrinking - Method 1 +-------------------------- + + 5.1.1 Shrinking is a Dynamic Ziv-Lempel-Welch compression algorithm + with partial clearing. The initial code size is 9 bits, and the + maximum code size is 13 bits. Shrinking differs from conventional + Dynamic Ziv-Lempel-Welch implementations in several respects: + + 5.1.2 The code size is controlled by the compressor, and is + not automatically increased when codes larger than the current + code size are created (but not necessarily used). When + the decompressor encounters the code sequence 256 + (decimal) followed by 1, it should increase the code size + read from the input stream to the next bit size. No + blocking of the codes is performed, so the next code at + the increased size should be read from the input stream + immediately after where the previous code at the smaller + bit size was read. Again, the decompressor should not + increase the code size used until the sequence 256,1 is + encountered. + + 5.1.3 When the table becomes full, total clearing is not + performed. Rather, when the compressor emits the code + sequence 256,2 (decimal), the decompressor should clear + all leaf nodes from the Ziv-Lempel tree, and continue to + use the current code size. The nodes that are cleared + from the Ziv-Lempel tree are then re-used, with the lowest + code value re-used first, and the highest code value + re-used last. The compressor can emit the sequence 256,2 + at any time. + +5.2 Expanding - Methods 2-5 +--------------------------- + + 5.2.1 The Reducing algorithm is actually a combination of two + distinct algorithms. The first algorithm compresses repeated + byte sequences, and the second algorithm takes the compressed + stream from the first algorithm and applies a probabilistic + compression method. + + 5.2.2 The probabilistic compression stores an array of 'follower + sets' S(j), for j=0 to 255, corresponding to each possible + ASCII character. Each set contains between 0 and 32 + characters, to be denoted as S(j)[0],...,S(j)[m], where m<32. + The sets are stored at the beginning of the data area for a + Reduced file, in reverse order, with S(255) first, and S(0) + last. + + 5.2.3 The sets are encoded as { N(j), S(j)[0],...,S(j)[N(j)-1] }, + where N(j) is the size of set S(j). N(j) can be 0, in which + case the follower set for S(j) is empty. Each N(j) value is + encoded in 6 bits, followed by N(j) eight bit character values + corresponding to S(j)[0] to S(j)[N(j)-1] respectively. If + N(j) is 0, then no values for S(j) are stored, and the value + for N(j-1) immediately follows. + + 5.2.4 Immediately after the follower sets, is the compressed data + stream. The compressed data stream can be interpreted for the + probabilistic decompression as follows: + + let Last-Character <- 0. + loop until done + if the follower set S(Last-Character) is empty then + read 8 bits from the input stream, and copy this + value to the output stream. + otherwise if the follower set S(Last-Character) is non-empty then + read 1 bit from the input stream. + if this bit is not zero then + read 8 bits from the input stream, and copy this + value to the output stream. + otherwise if this bit is zero then + read B(N(Last-Character)) bits from the input + stream, and assign this value to I. + Copy the value of S(Last-Character)[I] to the + output stream. + + assign the last value placed on the output stream to + Last-Character. + end loop + + B(N(j)) is defined as the minimal number of bits required to + encode the value N(j)-1. + + 5.2.5 The decompressed stream from above can then be expanded to + re-create the original file as follows: + + let State <- 0. + + loop until done + read 8 bits from the input stream into C. + case State of + 0: if C is not equal to DLE (144 decimal) then + copy C to the output stream. + otherwise if C is equal to DLE then + let State <- 1. + + 1: if C is non-zero then + let V <- C. + let Len <- L(V) + let State <- F(Len). + otherwise if C is zero then + copy the value 144 (decimal) to the output stream. + let State <- 0 + + 2: let Len <- Len + C + let State <- 3. + + 3: move backwards D(V,C) bytes in the output stream + (if this position is before the start of the output + stream, then assume that all the data before the + start of the output stream is filled with zeros). + copy Len+3 bytes from this position to the output stream. + let State <- 0. + end case + end loop + + The functions F,L, and D are dependent on the 'compression + factor', 1 through 4, and are defined as follows: + + For compression factor 1: + L(X) equals the lower 7 bits of X. + F(X) equals 2 if X equals 127 otherwise F(X) equals 3. + D(X,Y) equals the (upper 1 bit of X) * 256 + Y + 1. + For compression factor 2: + L(X) equals the lower 6 bits of X. + F(X) equals 2 if X equals 63 otherwise F(X) equals 3. + D(X,Y) equals the (upper 2 bits of X) * 256 + Y + 1. + For compression factor 3: + L(X) equals the lower 5 bits of X. + F(X) equals 2 if X equals 31 otherwise F(X) equals 3. + D(X,Y) equals the (upper 3 bits of X) * 256 + Y + 1. + For compression factor 4: + L(X) equals the lower 4 bits of X. + F(X) equals 2 if X equals 15 otherwise F(X) equals 3. + D(X,Y) equals the (upper 4 bits of X) * 256 + Y + 1. + +5.3 Imploding - Method 6 +------------------------ + + 5.3.1 The Imploding algorithm is actually a combination of two + distinct algorithms. The first algorithm compresses repeated byte + sequences using a sliding dictionary. The second algorithm is + used to compress the encoding of the sliding dictionary output, + using multiple Shannon-Fano trees. + + 5.3.2 The Imploding algorithm can use a 4K or 8K sliding dictionary + size. The dictionary size used can be determined by bit 1 in the + general purpose flag word; a 0 bit indicates a 4K dictionary + while a 1 bit indicates an 8K dictionary. + + 5.3.3 The Shannon-Fano trees are stored at the start of the + compressed file. The number of trees stored is defined by bit 2 in + the general purpose flag word; a 0 bit indicates two trees stored, + a 1 bit indicates three trees are stored. If 3 trees are stored, + the first Shannon-Fano tree represents the encoding of the + Literal characters, the second tree represents the encoding of + the Length information, the third represents the encoding of the + Distance information. When 2 Shannon-Fano trees are stored, the + Length tree is stored first, followed by the Distance tree. + + 5.3.4 The Literal Shannon-Fano tree, if present is used to represent + the entire ASCII character set, and contains 256 values. This + tree is used to compress any data not compressed by the sliding + dictionary algorithm. When this tree is present, the Minimum + Match Length for the sliding dictionary is 3. If this tree is + not present, the Minimum Match Length is 2. + + 5.3.5 The Length Shannon-Fano tree is used to compress the Length + part of the (length,distance) pairs from the sliding dictionary + output. The Length tree contains 64 values, ranging from the + Minimum Match Length, to 63 plus the Minimum Match Length. + + 5.3.6 The Distance Shannon-Fano tree is used to compress the Distance + part of the (length,distance) pairs from the sliding dictionary + output. The Distance tree contains 64 values, ranging from 0 to + 63, representing the upper 6 bits of the distance value. The + distance values themselves will be between 0 and the sliding + dictionary size, either 4K or 8K. + + 5.3.7 The Shannon-Fano trees themselves are stored in a compressed + format. The first byte of the tree data represents the number of + bytes of data representing the (compressed) Shannon-Fano tree + minus 1. The remaining bytes represent the Shannon-Fano tree + data encoded as: + + High 4 bits: Number of values at this bit length + 1. (1 - 16) + Low 4 bits: Bit Length needed to represent value + 1. (1 - 16) + + 5.3.8 The Shannon-Fano codes can be constructed from the bit lengths + using the following algorithm: + + 1) Sort the Bit Lengths in ascending order, while retaining the + order of the original lengths stored in the file. + + 2) Generate the Shannon-Fano trees: + + Code <- 0 + CodeIncrement <- 0 + LastBitLength <- 0 + i <- number of Shannon-Fano codes - 1 (either 255 or 63) + + loop while i >= 0 + Code = Code + CodeIncrement + if BitLength(i) <> LastBitLength then + LastBitLength=BitLength(i) + CodeIncrement = 1 shifted left (16 - LastBitLength) + ShannonCode(i) = Code + i <- i - 1 + end loop + + 3) Reverse the order of all the bits in the above ShannonCode() + vector, so that the most significant bit becomes the least + significant bit. For example, the value 0x1234 (hex) would + become 0x2C48 (hex). + + 4) Restore the order of Shannon-Fano codes as originally stored + within the file. + + Example: + + This example will show the encoding of a Shannon-Fano tree + of size 8. Notice that the actual Shannon-Fano trees used + for Imploding are either 64 or 256 entries in size. + + Example: 0x02, 0x42, 0x01, 0x13 + + The first byte indicates 3 values in this table. Decoding the + bytes: + 0x42 = 5 codes of 3 bits long + 0x01 = 1 code of 2 bits long + 0x13 = 2 codes of 4 bits long + + This would generate the original bit length array of: + (3, 3, 3, 3, 3, 2, 4, 4) + + There are 8 codes in this table for the values 0 thru 7. Using + the algorithm to obtain the Shannon-Fano codes produces: + + Reversed Order Original + Val Sorted Constructed Code Value Restored Length + --- ------ ----------------- -------- -------- ------ + 0: 2 1100000000000000 11 101 3 + 1: 3 1010000000000000 101 001 3 + 2: 3 1000000000000000 001 110 3 + 3: 3 0110000000000000 110 010 3 + 4: 3 0100000000000000 010 100 3 + 5: 3 0010000000000000 100 11 2 + 6: 4 0001000000000000 1000 1000 4 + 7: 4 0000000000000000 0000 0000 4 + + The values in the Val, Order Restored and Original Length columns + now represent the Shannon-Fano encoding tree that can be used for + decoding the Shannon-Fano encoded data. How to parse the + variable length Shannon-Fano values from the data stream is beyond + the scope of this document. (See the references listed at the end of + this document for more information.) However, traditional decoding + schemes used for Huffman variable length decoding, such as the + Greenlaw algorithm, can be successfully applied. + + 5.3.9 The compressed data stream begins immediately after the + compressed Shannon-Fano data. The compressed data stream can be + interpreted as follows: + + loop until done + read 1 bit from input stream. + + if this bit is non-zero then (encoded data is literal data) + if Literal Shannon-Fano tree is present + read and decode character using Literal Shannon-Fano tree. + otherwise + read 8 bits from input stream. + copy character to the output stream. + otherwise (encoded data is sliding dictionary match) + if 8K dictionary size + read 7 bits for offset Distance (lower 7 bits of offset). + otherwise + read 6 bits for offset Distance (lower 6 bits of offset). + + using the Distance Shannon-Fano tree, read and decode the + upper 6 bits of the Distance value. + + using the Length Shannon-Fano tree, read and decode + the Length value. + + Length <- Length + Minimum Match Length + + if Length = 63 + Minimum Match Length + read 8 bits from the input stream, + add this value to Length. + + move backwards Distance+1 bytes in the output stream, and + copy Length characters from this position to the output + stream. (if this position is before the start of the output + stream, then assume that all the data before the start of + the output stream is filled with zeros). + end loop + +5.4 Tokenizing - Method 7 +------------------------- + + 5.4.1 This method is not used by PKZIP. + +5.5 Deflating - Method 8 +------------------------ + + 5.5.1 The Deflate algorithm is similar to the Implode algorithm using + a sliding dictionary of up to 32K with secondary compression + from Huffman/Shannon-Fano codes. + + 5.5.2 The compressed data is stored in blocks with a header describing + the block and the Huffman codes used in the data block. The header + format is as follows: + + Bit 0: Last Block bit This bit is set to 1 if this is the last + compressed block in the data. + Bits 1-2: Block type + 00 (0) - Block is stored - All stored data is byte aligned. + Skip bits until next byte, then next word = block + length, followed by the ones compliment of the block + length word. Remaining data in block is the stored + data. + + 01 (1) - Use fixed Huffman codes for literal and distance codes. + Lit Code Bits Dist Code Bits + --------- ---- --------- ---- + 0 - 143 8 0 - 31 5 + 144 - 255 9 + 256 - 279 7 + 280 - 287 8 + + Literal codes 286-287 and distance codes 30-31 are + never used but participate in the huffman construction. + + 10 (2) - Dynamic Huffman codes. (See expanding Huffman codes) + + 11 (3) - Reserved - Flag a "Error in compressed data" if seen. + + 5.5.3 Expanding Huffman Codes + + If the data block is stored with dynamic Huffman codes, the Huffman + codes are sent in the following compressed format: + + 5 Bits: # of Literal codes sent - 256 (256 - 286) + All other codes are never sent. + 5 Bits: # of Dist codes - 1 (1 - 32) + 4 Bits: # of Bit Length codes - 3 (3 - 19) + + The Huffman codes are sent as bit lengths and the codes are built as + described in the implode algorithm. The bit lengths themselves are + compressed with Huffman codes. There are 19 bit length codes: + + 0 - 15: Represent bit lengths of 0 - 15 + 16: Copy the previous bit length 3 - 6 times. + The next 2 bits indicate repeat length (0 = 3, ... ,3 = 6) + Example: Codes 8, 16 (+2 bits 11), 16 (+2 bits 10) will + expand to 12 bit lengths of 8 (1 + 6 + 5) + 17: Repeat a bit length of 0 for 3 - 10 times. (3 bits of length) + 18: Repeat a bit length of 0 for 11 - 138 times (7 bits of length) + + The lengths of the bit length codes are sent packed 3 bits per value + (0 - 7) in the following order: + + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + + The Huffman codes should be built as described in the Implode algorithm + except codes are assigned starting at the shortest bit length, i.e. the + shortest code should be all 0's rather than all 1's. Also, codes with + a bit length of zero do not participate in the tree construction. The + codes are then used to decode the bit lengths for the literal and + distance tables. + + The bit lengths for the literal tables are sent first with the number + of entries sent described by the 5 bits sent earlier. There are up + to 286 literal characters; the first 256 represent the respective 8 + bit character, code 256 represents the End-Of-Block code, the remaining + 29 codes represent copy lengths of 3 thru 258. There are up to 30 + distance codes representing distances from 1 thru 32k as described + below. + + Length Codes + ------------ + Extra Extra Extra Extra + Code Bits Length Code Bits Lengths Code Bits Lengths Code Bits Length(s) + ---- ---- ------ ---- ---- ------- ---- ---- ------- ---- ---- --------- + 257 0 3 265 1 11,12 273 3 35-42 281 5 131-162 + 258 0 4 266 1 13,14 274 3 43-50 282 5 163-194 + 259 0 5 267 1 15,16 275 3 51-58 283 5 195-226 + 260 0 6 268 1 17,18 276 3 59-66 284 5 227-257 + 261 0 7 269 2 19-22 277 4 67-82 285 0 258 + 262 0 8 270 2 23-26 278 4 83-98 + 263 0 9 271 2 27-30 279 4 99-114 + 264 0 10 272 2 31-34 280 4 115-130 + + Distance Codes + -------------- + Extra Extra Extra Extra + Code Bits Dist Code Bits Dist Code Bits Distance Code Bits Distance + ---- ---- ---- ---- ---- ------ ---- ---- -------- ---- ---- -------- + 0 0 1 8 3 17-24 16 7 257-384 24 11 4097-6144 + 1 0 2 9 3 25-32 17 7 385-512 25 11 6145-8192 + 2 0 3 10 4 33-48 18 8 513-768 26 12 8193-12288 + 3 0 4 11 4 49-64 19 8 769-1024 27 12 12289-16384 + 4 1 5,6 12 5 65-96 20 9 1025-1536 28 13 16385-24576 + 5 1 7,8 13 5 97-128 21 9 1537-2048 29 13 24577-32768 + 6 2 9-12 14 6 129-192 22 10 2049-3072 + 7 2 13-16 15 6 193-256 23 10 3073-4096 + + 5.5.4 The compressed data stream begins immediately after the + compressed header data. The compressed data stream can be + interpreted as follows: + + do + read header from input stream. + + if stored block + skip bits until byte aligned + read count and 1's compliment of count + copy count bytes data block + otherwise + loop until end of block code sent + decode literal character from input stream + if literal < 256 + copy character to the output stream + otherwise + if literal = end of block + break from loop + otherwise + decode distance from input stream + + move backwards distance bytes in the output stream, and + copy length characters from this position to the output + stream. + end loop + while not last block + + if data descriptor exists + skip bits until byte aligned + read crc and sizes + endif + +5.6 Enhanced Deflating - Method 9 +--------------------------------- + + 5.6.1 The Enhanced Deflating algorithm is similar to Deflate but uses + a sliding dictionary of up to 64K. Deflate64(tm) is supported + by the Deflate extractor. + +5.7 BZIP2 - Method 12 +--------------------- + + 5.7.1 BZIP2 is an open-source data compression algorithm developed by + Julian Seward. Information and source code for this algorithm + can be found on the internet. + +5.8 LZMA - Method 14 +--------------------- + + 5.8.1 LZMA is a block-oriented, general purpose data compression + algorithm developed and maintained by Igor Pavlov. It is a derivative + of LZ77 that utilizes Markov chains and a range coder. Information and + source code for this algorithm can be found on the internet. Consult + with the author of this algorithm for information on terms or + restrictions on use. + + Support for LZMA within the ZIP format is defined as follows: + + 5.8.2 The Compression method field within the ZIP Local and Central + Header records will be set to the value 14 to indicate data was + compressed using LZMA. + + 5.8.3 The Version needed to extract field within the ZIP Local and + Central Header records will be set to 6.3 to indicate the minimum + ZIP format version supporting this feature. + + 5.8.4 File data compressed using the LZMA algorithm must be placed + immediately following the Local Header for the file. If a standard + ZIP encryption header is required, it will follow the Local Header + and will precede the LZMA compressed file data segment. The location + of LZMA compressed data segment within the ZIP format will be as shown: + + [local header file 1] + [encryption header file 1] + [LZMA compressed data segment for file 1] + [data descriptor 1] + [local header file 2] + + 5.8.5 The encryption header and data descriptor records may + be conditionally present. The LZMA Compressed Data Segment + will consist of an LZMA Properties Header followed by the + LZMA Compressed Data as shown: + + [LZMA properties header for file 1] + [LZMA compressed data for file 1] + + 5.8.6 The LZMA Compressed Data will be stored as provided by the + LZMA compression library. Compressed size, uncompressed size and + other file characteristics about the file being compressed must be + stored in standard ZIP storage format. + + 5.8.7 The LZMA Properties Header will store specific data required + to decompress the LZMA compressed Data. This data is set by the + LZMA compression engine using the function WriteCoderProperties() + as documented within the LZMA SDK. + + 5.8.8 Storage fields for the property information within the LZMA + Properties Header are as follows: + + LZMA Version Information 2 bytes + LZMA Properties Size 2 bytes + LZMA Properties Data variable, defined by "LZMA Properties Size" + + 5.8.8.1 LZMA Version Information - this field identifies which version + of the LZMA SDK was used to compress a file. The first byte will + store the major version number of the LZMA SDK and the second + byte will store the minor number. + + 5.8.8.2 LZMA Properties Size - this field defines the size of the + remaining property data. Typically this size should be determined by + the version of the SDK. This size field is included as a convenience + and to help avoid any ambiguity should it arise in the future due + to changes in this compression algorithm. + + 5.8.8.3 LZMA Property Data - this variable sized field records the + required values for the decompressor as defined by the LZMA SDK. + The data stored in this field should be obtained using the + WriteCoderProperties() in the version of the SDK defined by + the "LZMA Version Information" field. + + 5.8.8.4 The layout of the "LZMA Properties Data" field is a function of + the LZMA compression algorithm. It is possible that this layout may be + changed by the author over time. The data layout in version 4.3 of the + LZMA SDK defines a 5 byte array that uses 4 bytes to store the dictionary + size in little-endian order. This is preceded by a single packed byte as + the first element of the array that contains the following fields: + + PosStateBits + LiteralPosStateBits + LiteralContextBits + + Refer to the LZMA documentation for a more detailed explanation of + these fields. + + 5.8.9 Data compressed with method 14, LZMA, may include an end-of-stream + (EOS) marker ending the compressed data stream. This marker is not + required, but its use is highly recommended to facilitate processing + and implementers should include the EOS marker whenever possible. + When the EOS marker is used, general purpose bit 1 must be set. If + general purpose bit 1 is not set, the EOS marker is not present. + +5.9 WavPack - Method 97 +----------------------- + + 5.9.1 Information describing the use of compression method 97 is + provided by WinZIP International, LLC. This method relies on the + open source WavPack audio compression utility developed by David Bryant. + Information on WavPack is available at www.wavpack.com. Please consult + with the author of this algorithm for information on terms and + restrictions on use. + + 5.9.2 WavPack data for a file begins immediately after the end of the + local header data. This data is the output from WavPack compression + routines. Within the ZIP file, the use of WavPack compression is + indicated by setting the compression method field to a value of 97 + in both the local header and the central directory header. The Version + needed to extract and version made by fields use the same values as are + used for data compressed using the Deflate algorithm. + + 5.9.3 An implementation note for storing digital sample data when using + WavPack compression within ZIP files is that all of the bytes of + the sample data should be compressed. This includes any unused + bits up to the byte boundary. An example is a 2 byte sample that + uses only 12 bits for the sample data with 4 unused bits. If only + 12 bits are passed as the sample size to the WavPack routines, the 4 + unused bits will be set to 0 on extraction regardless of their original + state. To avoid this, the full 16 bits of the sample data size + should be provided. + +5.10 PPMd - Method 98 +--------------------- + + 5.10.1 PPMd is a data compression algorithm developed by Dmitry Shkarin + which includes a carryless rangecoder developed by Dmitry Subbotin. + This algorithm is based on predictive phrase matching on multiple + order contexts. Information and source code for this algorithm + can be found on the internet. Consult with the author of this + algorithm for information on terms or restrictions on use. + + 5.10.2 Support for PPMd within the ZIP format currently is provided only + for version I, revision 1 of the algorithm. Storage requirements + for using this algorithm are as follows: + + 5.10.3 Parameters needed to control the algorithm are stored in the two + bytes immediately preceding the compressed data. These bytes are + used to store the following fields: + + Model order - sets the maximum model order, default is 8, possible + values are from 2 to 16 inclusive + + Sub-allocator size - sets the size of sub-allocator in MB, default is 50, + possible values are from 1MB to 256MB inclusive + + Model restoration method - sets the method used to restart context + model at memory insufficiency, values are: + + 0 - restarts model from scratch - default + 1 - cut off model - decreases performance by as much as 2x + 2 - freeze context tree - not recommended + + 5.10.4 An example for packing these fields into the 2 byte storage field is + illustrated below. These values are stored in Intel low-byte/high-byte + order. + + wPPMd = (Model order - 1) + + ((Sub-allocator size - 1) << 4) + + (Model restoration method << 12) + + +6.0 Traditional PKWARE Encryption +---------------------------------- + + 6.0.1 The following information discusses the decryption steps + required to support traditional PKWARE encryption. This + form of encryption is considered weak by today's standards + and its use is recommended only for situations with + low security needs or for compatibility with older .ZIP + applications. + +6.1 Traditional PKWARE Decryption +--------------------------------- + + 6.1.1 PKWARE is grateful to Mr. Roger Schlafly for his expert + contribution towards the development of PKWARE's traditional + encryption. + + 6.1.2 PKZIP encrypts the compressed data stream. Encrypted files + must be decrypted before they can be extracted to their original + form. + + 6.1.3 Each encrypted file has an extra 12 bytes stored at the start + of the data area defining the encryption header for that file. The + encryption header is originally set to random values, and then + itself encrypted, using three, 32-bit keys. The key values are + initialized using the supplied encryption password. After each byte + is encrypted, the keys are then updated using pseudo-random number + generation techniques in combination with the same CRC-32 algorithm + used in PKZIP and described elsewhere in this document. + + 6.1.4 The following are the basic steps required to decrypt a file: + + 1) Initialize the three 32-bit keys with the password. + 2) Read and decrypt the 12-byte encryption header, further + initializing the encryption keys. + 3) Read and decrypt the compressed data stream using the + encryption keys. + + 6.1.5 Initializing the encryption keys + + Key(0) <- 305419896 + Key(1) <- 591751049 + Key(2) <- 878082192 + + loop for i <- 0 to length(password)-1 + update_keys(password(i)) + end loop + + Where update_keys() is defined as: + + update_keys(char): + Key(0) <- crc32(key(0),char) + Key(1) <- Key(1) + (Key(0) & 000000ffH) + Key(1) <- Key(1) * 134775813 + 1 + Key(2) <- crc32(key(2),key(1) >> 24) + end update_keys + + Where crc32(old_crc,char) is a routine that given a CRC value and a + character, returns an updated CRC value after applying the CRC-32 + algorithm described elsewhere in this document. + + 6.1.6 Decrypting the encryption header + + The purpose of this step is to further initialize the encryption + keys, based on random data, to render a plaintext attack on the + data ineffective. + + Read the 12-byte encryption header into Buffer, in locations + Buffer(0) thru Buffer(11). + + loop for i <- 0 to 11 + C <- buffer(i) ^ decrypt_byte() + update_keys(C) + buffer(i) <- C + end loop + + Where decrypt_byte() is defined as: + + unsigned char decrypt_byte() + local unsigned short temp + temp <- Key(2) | 2 + decrypt_byte <- (temp * (temp ^ 1)) >> 8 + end decrypt_byte + + After the header is decrypted, the last 1 or 2 bytes in Buffer + should be the high-order word/byte of the CRC for the file being + decrypted, stored in Intel low-byte/high-byte order. Versions of + PKZIP prior to 2.0 used a 2 byte CRC check; a 1 byte CRC check is + used on versions after 2.0. This can be used to test if the password + supplied is correct or not. + + 6.1.7 Decrypting the compressed data stream + + The compressed data stream can be decrypted as follows: + + loop until done + read a character into C + Temp <- C ^ decrypt_byte() + update_keys(temp) + output Temp + end loop + + +7.0 Strong Encryption Specification +----------------------------------- + + 7.0.1 Portions of the Strong Encryption technology defined in this + specification are covered under patents and pending patent applications. + Refer to the section in this document entitled "Incorporating + PKWARE Proprietary Technology into Your Product" for more information. + +7.1 Strong Encryption Overview +------------------------------ + + 7.1.1 Version 5.x of this specification introduced support for strong + encryption algorithms. These algorithms can be used with either + a password or an X.509v3 digital certificate to encrypt each file. + This format specification supports either password or certificate + based encryption to meet the security needs of today, to enable + interoperability between users within both PKI and non-PKI + environments, and to ensure interoperability between different + computing platforms that are running a ZIP program. + + 7.1.2 Password based encryption is the most common form of encryption + people are familiar with. However, inherent weaknesses with + passwords (e.g. susceptibility to dictionary/brute force attack) + as well as password management and support issues make certificate + based encryption a more secure and scalable option. Industry + efforts and support are defining and moving towards more advanced + security solutions built around X.509v3 digital certificates and + Public Key Infrastructures(PKI) because of the greater scalability, + administrative options, and more robust security over traditional + password based encryption. + + 7.1.3 Most standard encryption algorithms are supported with this + specification. Reference implementations for many of these + algorithms are available from either commercial or open source + distributors. Readily available cryptographic toolkits make + implementation of the encryption features straight-forward. + This document is not intended to provide a treatise on data + encryption principles or theory. Its purpose is to document the + data structures required for implementing interoperable data + encryption within the .ZIP format. It is strongly recommended that + you have a good understanding of data encryption before reading + further. + + 7.1.4 The algorithms introduced in Version 5.0 of this specification + include: + + RC2 40 bit, 64 bit, and 128 bit + RC4 40 bit, 64 bit, and 128 bit + DES + 3DES 112 bit and 168 bit + + Version 5.1 adds support for the following: + + AES 128 bit, 192 bit, and 256 bit + + + 7.1.5 Version 6.1 introduces encryption data changes to support + interoperability with Smartcard and USB Token certificate storage + methods which do not support the OAEP strengthening standard. + + 7.1.6 Version 6.2 introduces support for encrypting metadata by compressing + and encrypting the central directory data structure to reduce information + leakage. Information leakage can occur in legacy ZIP applications + through exposure of information about a file even though that file is + stored encrypted. The information exposed consists of file + characteristics stored within the records and fields defined by this + specification. This includes data such as a file's name, its original + size, timestamp and CRC32 value. + + 7.1.7 Version 6.3 introduces support for encrypting data using the Blowfish + and Twofish algorithms. These are symmetric block ciphers developed + by Bruce Schneier. Blowfish supports using a variable length key from + 32 to 448 bits. Block size is 64 bits. Implementations should use 16 + rounds and the only mode supported within ZIP files is CBC. Twofish + supports key sizes 128, 192 and 256 bits. Block size is 128 bits. + Implementations should use 16 rounds and the only mode supported within + ZIP files is CBC. Information and source code for both Blowfish and + Twofish algorithms can be found on the internet. Consult with the author + of these algorithms for information on terms or restrictions on use. + + 7.1.8 Central Directory Encryption provides greater protection against + information leakage by encrypting the Central Directory structure and + by masking key values that are replicated in the unencrypted Local + Header. ZIP compatible programs that cannot interpret an encrypted + Central Directory structure cannot rely on the data in the corresponding + Local Header for decompression information. + + 7.1.9 Extra Field records that may contain information about a file that should + not be exposed should not be stored in the Local Header and should only + be written to the Central Directory where they can be encrypted. This + design currently does not support streaming. Information in the End of + Central Directory record, the Zip64 End of Central Directory Locator, + and the Zip64 End of Central Directory records are not encrypted. Access + to view data on files within a ZIP file with an encrypted Central Directory + requires the appropriate password or private key for decryption prior to + viewing any files, or any information about the files, in the archive. + + 7.1.10 Older ZIP compatible programs not familiar with the Central Directory + Encryption feature will no longer be able to recognize the Central + Directory and may assume the ZIP file is corrupt. Programs that + attempt streaming access using Local Headers will see invalid + information for each file. Central Directory Encryption need not be + used for every ZIP file. Its use is recommended for greater security. + ZIP files not using Central Directory Encryption should operate as + in the past. + + 7.1.11 This strong encryption feature specification is intended to provide for + scalable, cross-platform encryption needs ranging from simple password + encryption to authenticated public/private key encryption. + + 7.1.12 Encryption provides data confidentiality and privacy. It is + recommended that you combine X.509 digital signing with encryption + to add authentication and non-repudiation. + + +7.2 Single Password Symmetric Encryption Method +----------------------------------------------- + + 7.2.1 The Single Password Symmetric Encryption Method using strong + encryption algorithms operates similarly to the traditional + PKWARE encryption defined in this format. Additional data + structures are added to support the processing needs of the + strong algorithms. + + The Strong Encryption data structures are: + + 7.2.2 General Purpose Bits - Bits 0 and 6 of the General Purpose bit + flag in both local and central header records. Both bits set + indicates strong encryption. Bit 13, when set indicates the Central + Directory is encrypted and that selected fields in the Local Header + are masked to hide their actual value. + + + 7.2.3 Extra Field 0x0017 in central header only. + + Fields to consider in this record are: + + 7.2.3.1 Format - the data format identifier for this record. The only + value allowed at this time is the integer value 2. + + 7.2.3.2 AlgId - integer identifier of the encryption algorithm from the + following range + + 0x6601 - DES + 0x6602 - RC2 (version needed to extract < 5.2) + 0x6603 - 3DES 168 + 0x6609 - 3DES 112 + 0x660E - AES 128 + 0x660F - AES 192 + 0x6610 - AES 256 + 0x6702 - RC2 (version needed to extract >= 5.2) + 0x6720 - Blowfish + 0x6721 - Twofish + 0x6801 - RC4 + 0xFFFF - Unknown algorithm + + 7.2.3.3 Bitlen - Explicit bit length of key + + 32 - 448 bits + + 7.2.3.4 Flags - Processing flags needed for decryption + + 0x0001 - Password is required to decrypt + 0x0002 - Certificates only + 0x0003 - Password or certificate required to decrypt + + Values > 0x0003 reserved for certificate processing + + + 7.2.4 Decryption header record preceding compressed file data. + + -Decryption Header: + + Value Size Description + ----- ---- ----------- + IVSize 2 bytes Size of initialization vector (IV) + IVData IVSize Initialization vector for this file + Size 4 bytes Size of remaining decryption header data + Format 2 bytes Format definition for this record + AlgID 2 bytes Encryption algorithm identifier + Bitlen 2 bytes Bit length of encryption key + Flags 2 bytes Processing flags + ErdSize 2 bytes Size of Encrypted Random Data + ErdData ErdSize Encrypted Random Data + Reserved1 4 bytes Reserved certificate processing data + Reserved2 (var) Reserved for certificate processing data + VSize 2 bytes Size of password validation data + VData VSize-4 Password validation data + VCRC32 4 bytes Standard ZIP CRC32 of password validation data + + 7.2.4.1 IVData - The size of the IV should match the algorithm block size. + The IVData can be completely random data. If the size of + the randomly generated data does not match the block size + it should be complemented with zero's or truncated as + necessary. If IVSize is 0,then IV = CRC32 + Uncompressed + File Size (as a 64 bit little-endian, unsigned integer value). + + 7.2.4.2 Format - the data format identifier for this record. The only + value allowed at this time is the integer value 3. + + 7.2.4.3 AlgId - integer identifier of the encryption algorithm from the + following range + + 0x6601 - DES + 0x6602 - RC2 (version needed to extract < 5.2) + 0x6603 - 3DES 168 + 0x6609 - 3DES 112 + 0x660E - AES 128 + 0x660F - AES 192 + 0x6610 - AES 256 + 0x6702 - RC2 (version needed to extract >= 5.2) + 0x6720 - Blowfish + 0x6721 - Twofish + 0x6801 - RC4 + 0xFFFF - Unknown algorithm + + 7.2.4.4 Bitlen - Explicit bit length of key + + 32 - 448 bits + + 7.2.4.5 Flags - Processing flags needed for decryption + + 0x0001 - Password is required to decrypt + 0x0002 - Certificates only + 0x0003 - Password or certificate required to decrypt + + Values > 0x0003 reserved for certificate processing + + 7.2.4.6 ErdData - Encrypted random data is used to store random data that + is used to generate a file session key for encrypting + each file. SHA1 is used to calculate hash data used to + derive keys. File session keys are derived from a master + session key generated from the user-supplied password. + If the Flags field in the decryption header contains + the value 0x4000, then the ErdData field must be + decrypted using 3DES. If the value 0x4000 is not set, + then the ErdData field must be decrypted using AlgId. + + + 7.2.4.7 Reserved1 - Reserved for certificate processing, if value is + zero, then Reserved2 data is absent. See the explanation + under the Certificate Processing Method for details on + this data structure. + + 7.2.4.8 Reserved2 - If present, the size of the Reserved2 data structure + is located by skipping the first 4 bytes of this field + and using the next 2 bytes as the remaining size. See + the explanation under the Certificate Processing Method + for details on this data structure. + + 7.2.4.9 VSize - This size value will always include the 4 bytes of the + VCRC32 data and will be greater than 4 bytes. + + 7.2.4.10 VData - Random data for password validation. This data is VSize + in length and VSize must be a multiple of the encryption + block size. VCRC32 is a checksum value of VData. + VData and VCRC32 are stored encrypted and start the + stream of encrypted data for a file. + + + 7.2.5 Useful Tips + + 7.2.5.1 Strong Encryption is always applied to a file after compression. The + block oriented algorithms all operate in Cypher Block Chaining (CBC) + mode. The block size used for AES encryption is 16. All other block + algorithms use a block size of 8. Two IDs are defined for RC2 to + account for a discrepancy found in the implementation of the RC2 + algorithm in the cryptographic library on Windows XP SP1 and all + earlier versions of Windows. It is recommended that zero length files + not be encrypted, however programs should be prepared to extract them + if they are found within a ZIP file. + + 7.2.5.2 A pseudo-code representation of the encryption process is as follows: + + Password = GetUserPassword() + MasterSessionKey = DeriveKey(SHA1(Password)) + RD = CryptographicStrengthRandomData() + For Each File + IV = CryptographicStrengthRandomData() + VData = CryptographicStrengthRandomData() + VCRC32 = CRC32(VData) + FileSessionKey = DeriveKey(SHA1(IV + RD) + ErdData = Encrypt(RD,MasterSessionKey,IV) + Encrypt(VData + VCRC32 + FileData, FileSessionKey,IV) + Done + + 7.2.5.3 The function names and parameter requirements will depend on + the choice of the cryptographic toolkit selected. Almost any + toolkit supporting the reference implementations for each + algorithm can be used. The RSA BSAFE(r), OpenSSL, and Microsoft + CryptoAPI libraries are all known to work well. + + + 7.3 Single Password - Central Directory Encryption + -------------------------------------------------- + + 7.3.1 Central Directory Encryption is achieved within the .ZIP format by + encrypting the Central Directory structure. This encapsulates the metadata + most often used for processing .ZIP files. Additional metadata is stored for + redundancy in the Local Header for each file. The process of concealing + metadata by encrypting the Central Directory does not protect the data within + the Local Header. To avoid information leakage from the exposed metadata + in the Local Header, the fields containing information about a file are masked. + + 7.3.2 Local Header + + Masking replaces the true content of the fields for a file in the Local + Header with false information. When masked, the Local Header is not + suitable for streaming access and the options for data recovery of damaged + archives is reduced. Extra Data fields that may contain confidential + data should not be stored within the Local Header. The value set into + the Version needed to extract field should be the correct value needed to + extract the file without regard to Central Directory Encryption. The fields + within the Local Header targeted for masking when the Central Directory is + encrypted are: + + Field Name Mask Value + ------------------ --------------------------- + compression method 0 + last mod file time 0 + last mod file date 0 + crc-32 0 + compressed size 0 + uncompressed size 0 + file name (variable size) Base 16 value from the + range 1 - 0xFFFFFFFFFFFFFFFF + represented as a string whose + size will be set into the + file name length field + + The Base 16 value assigned as a masked file name is simply a sequentially + incremented value for each file starting with 1 for the first file. + Modifications to a ZIP file may cause different values to be stored for + each file. For compatibility, the file name field in the Local Header + should never be left blank. As of Version 6.2 of this specification, + the Compression Method and Compressed Size fields are not yet masked. + Fields having a value of 0xFFFF or 0xFFFFFFFF for the ZIP64 format + should not be masked. + + 7.3.3 Encrypting the Central Directory + + Encryption of the Central Directory does not include encryption of the + Central Directory Signature data, the Zip64 End of Central Directory + record, the Zip64 End of Central Directory Locator, or the End + of Central Directory record. The ZIP file comment data is never + encrypted. + + Before encrypting the Central Directory, it may optionally be compressed. + Compression is not required, but for storage efficiency it is assumed + this structure will be compressed before encrypting. Similarly, this + specification supports compressing the Central Directory without + requiring that it also be encrypted. Early implementations of this + feature will assume the encryption method applied to files matches the + encryption applied to the Central Directory. + + Encryption of the Central Directory is done in a manner similar to + that of file encryption. The encrypted data is preceded by a + decryption header. The decryption header is known as the Archive + Decryption Header. The fields of this record are identical to + the decryption header preceding each encrypted file. The location + of the Archive Decryption Header is determined by the value in the + Start of the Central Directory field in the Zip64 End of Central + Directory record. When the Central Directory is encrypted, the + Zip64 End of Central Directory record will always be present. + + The layout of the Zip64 End of Central Directory record for all + versions starting with 6.2 of this specification will follow the + Version 2 format. The Version 2 format is as follows: + + The leading fixed size fields within the Version 1 format for this + record remain unchanged. The record signature for both Version 1 + and Version 2 will be 0x06064b50. Immediately following the last + byte of the field known as the Offset of Start of Central + Directory With Respect to the Starting Disk Number will begin the + new fields defining Version 2 of this record. + + 7.3.4 New fields for Version 2 + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + Compression Method 2 bytes Method used to compress the + Central Directory + Compressed Size 8 bytes Size of the compressed data + Original Size 8 bytes Original uncompressed size + AlgId 2 bytes Encryption algorithm ID + BitLen 2 bytes Encryption key length + Flags 2 bytes Encryption flags + HashID 2 bytes Hash algorithm identifier + Hash Length 2 bytes Length of hash data + Hash Data (variable) Hash data + + The Compression Method accepts the same range of values as the + corresponding field in the Central Header. + + The Compressed Size and Original Size values will not include the + data of the Central Directory Signature which is compressed or + encrypted. + + The AlgId, BitLen, and Flags fields accept the same range of values + the corresponding fields within the 0x0017 record. + + Hash ID identifies the algorithm used to hash the Central Directory + data. This data does not have to be hashed, in which case the + values for both the HashID and Hash Length will be 0. Possible + values for HashID are: + + Value Algorithm + ------ --------- + 0x0000 none + 0x0001 CRC32 + 0x8003 MD5 + 0x8004 SHA1 + 0x8007 RIPEMD160 + 0x800C SHA256 + 0x800D SHA384 + 0x800E SHA512 + + 7.3.5 When the Central Directory data is signed, the same hash algorithm + used to hash the Central Directory for signing should be used. + This is recommended for processing efficiency, however, it is + permissible for any of the above algorithms to be used independent + of the signing process. + + The Hash Data will contain the hash data for the Central Directory. + The length of this data will vary depending on the algorithm used. + + The Version Needed to Extract should be set to 62. + + The value for the Total Number of Entries on the Current Disk will + be 0. These records will no longer support random access when + encrypting the Central Directory. + + 7.3.6 When the Central Directory is compressed and/or encrypted, the + End of Central Directory record will store the value 0xFFFFFFFF + as the value for the Total Number of Entries in the Central + Directory. The value stored in the Total Number of Entries in + the Central Directory on this Disk field will be 0. The actual + values will be stored in the equivalent fields of the Zip64 + End of Central Directory record. + + 7.3.7 Decrypting and decompressing the Central Directory is accomplished + in the same manner as decrypting and decompressing a file. + + 7.4 Certificate Processing Method + --------------------------------- + + The Certificate Processing Method for ZIP file encryption + defines the following additional data fields: + + 7.4.1 Certificate Flag Values + + Additional processing flags that can be present in the Flags field of both + the 0x0017 field of the central directory Extra Field and the Decryption + header record preceding compressed file data are: + + 0x0007 - reserved for future use + 0x000F - reserved for future use + 0x0100 - Indicates non-OAEP key wrapping was used. If this + this field is set, the version needed to extract must + be at least 61. This means OAEP key wrapping is not + used when generating a Master Session Key using + ErdData. + 0x4000 - ErdData must be decrypted using 3DES-168, otherwise use the + same algorithm used for encrypting the file contents. + 0x8000 - reserved for future use + + + 7.4.2 CertData - Extra Field 0x0017 record certificate data structure + + The data structure used to store certificate data within the section + of the Extra Field defined by the CertData field of the 0x0017 + record are as shown: + + Value Size Description + ----- ---- ----------- + RCount 4 bytes Number of recipients. + HashAlg 2 bytes Hash algorithm identifier + HSize 2 bytes Hash size + SRList (var) Simple list of recipients hashed public keys + + + RCount This defines the number intended recipients whose + public keys were used for encryption. This identifies + the number of elements in the SRList. + + HashAlg This defines the hash algorithm used to calculate + the public key hash of each public key used + for encryption. This field currently supports + only the following value for SHA-1 + + 0x8004 - SHA1 + + HSize This defines the size of a hashed public key. + + SRList This is a variable length list of the hashed + public keys for each intended recipient. Each + element in this list is HSize. The total size of + SRList is determined using RCount * HSize. + + + 7.4.3 Reserved1 - Certificate Decryption Header Reserved1 Data + + Value Size Description + ----- ---- ----------- + RCount 4 bytes Number of recipients. + + RCount This defines the number intended recipients whose + public keys were used for encryption. This defines + the number of elements in the REList field defined below. + + + 7.4.4 Reserved2 - Certificate Decryption Header Reserved2 Data Structures + + + Value Size Description + ----- ---- ----------- + HashAlg 2 bytes Hash algorithm identifier + HSize 2 bytes Hash size + REList (var) List of recipient data elements + + + HashAlg This defines the hash algorithm used to calculate + the public key hash of each public key used + for encryption. This field currently supports + only the following value for SHA-1 + + 0x8004 - SHA1 + + HSize This defines the size of a hashed public key + defined in REHData. + + REList This is a variable length of list of recipient data. + Each element in this list consists of a Recipient + Element data structure as follows: + + + Recipient Element (REList) Data Structure: + + Value Size Description + ----- ---- ----------- + RESize 2 bytes Size of REHData + REKData + REHData HSize Hash of recipients public key + REKData (var) Simple key blob + + + RESize This defines the size of an individual REList + element. This value is the combined size of the + REHData field + REKData field. REHData is defined by + HSize. REKData is variable and can be calculated + for each REList element using RESize and HSize. + + REHData Hashed public key for this recipient. + + REKData Simple Key Blob. The format of this data structure + is identical to that defined in the Microsoft + CryptoAPI and generated using the CryptExportKey() + function. The version of the Simple Key Blob + supported at this time is 0x02 as defined by + Microsoft. + +7.5 Certificate Processing - Central Directory Encryption +--------------------------------------------------------- + + 7.5.1 Central Directory Encryption using Digital Certificates will + operate in a manner similar to that of Single Password Central + Directory Encryption. This record will only be present when there + is data to place into it. Currently, data is placed into this + record when digital certificates are used for either encrypting + or signing the files within a ZIP file. When only password + encryption is used with no certificate encryption or digital + signing, this record is not currently needed. When present, this + record will appear before the start of the actual Central Directory + data structure and will be located immediately after the Archive + Decryption Header if the Central Directory is encrypted. + + 7.5.2 The Archive Extra Data record will be used to store the following + information. Additional data may be added in future versions. + + Extra Data Fields: + + 0x0014 - PKCS#7 Store for X.509 Certificates + 0x0016 - X.509 Certificate ID and Signature for central directory + 0x0019 - PKCS#7 Encryption Recipient Certificate List + + The 0x0014 and 0x0016 Extra Data records that otherwise would be + located in the first record of the Central Directory for digital + certificate processing. When encrypting or compressing the Central + Directory, the 0x0014 and 0x0016 records must be located in the + Archive Extra Data record and they should not remain in the first + Central Directory record. The Archive Extra Data record will also + be used to store the 0x0019 data. + + 7.5.3 When present, the size of the Archive Extra Data record will be + included in the size of the Central Directory. The data of the + Archive Extra Data record will also be compressed and encrypted + along with the Central Directory data structure. + +7.6 Certificate Processing Differences +-------------------------------------- + + 7.6.1 The Certificate Processing Method of encryption differs from the + Single Password Symmetric Encryption Method as follows. Instead + of using a user-defined password to generate a master session key, + cryptographically random data is used. The key material is then + wrapped using standard key-wrapping techniques. This key material + is wrapped using the public key of each recipient that will need + to decrypt the file using their corresponding private key. + + 7.6.2 This specification currently assumes digital certificates will follow + the X.509 V3 format for 1024 bit and higher RSA format digital + certificates. Implementation of this Certificate Processing Method + requires supporting logic for key access and management. This logic + is outside the scope of this specification. + +7.7 OAEP Processing with Certificate-based Encryption +----------------------------------------------------- + + 7.7.1 OAEP stands for Optimal Asymmetric Encryption Padding. It is a + strengthening technique used for small encoded items such as decryption + keys. This is commonly applied in cryptographic key-wrapping techniques + and is supported by PKCS #1. Versions 5.0 and 6.0 of this specification + were designed to support OAEP key-wrapping for certificate-based + decryption keys for additional security. + + 7.7.2 Support for private keys stored on Smartcards or Tokens introduced + a conflict with this OAEP logic. Most card and token products do + not support the additional strengthening applied to OAEP key-wrapped + data. In order to resolve this conflict, versions 6.1 and above of this + specification will no longer support OAEP when encrypting using + digital certificates. + + 7.7.3 Versions of PKZIP available during initial development of the + certificate processing method set a value of 61 into the + version needed to extract field for a file. This indicates that + non-OAEP key wrapping is used. This affects certificate encryption + only, and password encryption functions should not be affected by + this value. This means values of 61 may be found on files encrypted + with certificates only, or on files encrypted with both password + encryption and certificate encryption. Files encrypted with both + methods can safely be decrypted using the password methods documented. + +8.0 Splitting and Spanning ZIP files +------------------------------------- + + 8.1 Spanned ZIP files + + 8.1.1 Spanning is the process of segmenting a ZIP file across + multiple removable media. This support has typically only + been provided for DOS formatted floppy diskettes. + + 8.2 Split ZIP files + + 8.2.1 File splitting is a newer derivation of spanning. + Splitting follows the same segmentation process as + spanning, however, it does not require writing each + segment to a unique removable medium and instead supports + placing all pieces onto local or non-removable locations + such as file systems, local drives, folders, etc. + + 8.3 File Naming Differences + + 8.3.1 A key difference between spanned and split ZIP files is + that all pieces of a spanned ZIP file have the same name. + Since each piece is written to a separate volume, no name + collisions occur and each segment can reuse the original + .ZIP file name given to the archive. + + 8.3.2 Sequence ordering for DOS spanned archives uses the DOS + volume label to determine segment numbers. Volume labels + for each segment are written using the form PKBACK#xxx, + where xxx is the segment number written as a decimal + value from 001 - nnn. + + 8.3.3 Split ZIP files are typically written to the same location + and are subject to name collisions if the spanned name + format is used since each segment will reside on the same + drive. To avoid name collisions, split archives are named + as follows. + + Segment 1 = filename.z01 + Segment n-1 = filename.z(n-1) + Segment n = filename.zip + + 8.3.4 The .ZIP extension is used on the last segment to support + quickly reading the central directory. The segment number + n should be a decimal value. + + 8.4 Spanned Self-extracting ZIP Files + + 8.4.1 Spanned ZIP files may be PKSFX Self-extracting ZIP files. + PKSFX files may also be split, however, in this case + the first segment must be named filename.exe. The first + segment of a split PKSFX archive must be large enough to + include the entire executable program. + + 8.5 Capacities and Markers + + 8.5.1 Capacities for split archives are as follows: + + Maximum number of segments = 4,294,967,295 - 1 + Maximum .ZIP segment size = 4,294,967,295 bytes + Minimum segment size = 64K + Maximum PKSFX segment size = 2,147,483,647 bytes + + 8.5.2 Segment sizes may be different however by convention, all + segment sizes should be the same with the exception of the + last, which may be smaller. Local and central directory + header records must never be split across a segment boundary. + When writing a header record, if the number of bytes remaining + within a segment is less than the size of the header record, + end the current segment and write the header at the start + of the next segment. The central directory may span segment + boundaries, but no single record in the central directory + should be split across segments. + + 8.5.3 Spanned/Split archives created using PKZIP for Windows + (V2.50 or greater), PKZIP Command Line (V2.50 or greater), + or PKZIP Explorer will include a special spanning + signature as the first 4 bytes of the first segment of + the archive. This signature (0x08074b50) will be + followed immediately by the local header signature for + the first file in the archive. + + 8.5.4 A special spanning marker may also appear in spanned/split + archives if the spanning or splitting process starts but + only requires one segment. In this case the 0x08074b50 + signature will be replaced with the temporary spanning + marker signature of 0x30304b50. Split archives can + only be uncompressed by other versions of PKZIP that + know how to create a split archive. + + 8.5.5 The signature value 0x08074b50 is also used by some + ZIP implementations as a marker for the Data Descriptor + record. Conflict in this alternate assignment can be + avoided by ensuring the position of the signature + within the ZIP file to determine the use for which it + is intended. + +9.0 Change Process +------------------ + + 9.1 In order for the .ZIP file format to remain a viable technology, this + specification should be considered as open for periodic review and + revision. Although this format was originally designed with a + certain level of extensibility, not all changes in technology + (present or future) were or will be necessarily considered in its + design. + + 9.2 If your application requires new definitions to the + extensible sections in this format, or if you would like to + submit new data structures or new capabilities, please forward + your request to zipformat@pkware.com. All submissions will be + reviewed by the ZIP File Specification Committee for possible + inclusion into future versions of this specification. + + 9.3 Periodic revisions to this specification will be published as + DRAFT or as FINAL status to ensure interoperability. We encourage + comments and feedback that may help improve clarity or content. + + +10.0 Incorporating PKWARE Proprietary Technology into Your Product +------------------------------------------------------------------ + + 10.1 The Use or Implementation in a product of APPNOTE technological + components pertaining to either strong encryption or patching requires + a separate, executed license agreement from PKWARE. Please contact + PKWARE at zipformat@pkware.com or +1-414-289-9788 with regard to + acquiring such a license. + + 10.2 Additional information regarding PKWARE proprietray technology is + available at http://www.pkware.com/appnote. + +11.0 Acknowledgements +--------------------- + + In addition to the above mentioned contributors to PKZIP and PKUNZIP, + PKWARE would like to extend special thanks to Robert Mahoney for + suggesting the extension .ZIP for this software. + +12.0 References +--------------- + + Fiala, Edward R., and Greene, Daniel H., "Data compression with + finite windows", Communications of the ACM, Volume 32, Number 4, + April 1989, pages 490-505. + + Held, Gilbert, "Data Compression, Techniques and Applications, + Hardware and Software Considerations", John Wiley & Sons, 1987. + + Huffman, D.A., "A method for the construction of minimum-redundancy + codes", Proceedings of the IRE, Volume 40, Number 9, September 1952, + pages 1098-1101. + + Nelson, Mark, "LZW Data Compression", Dr. Dobbs Journal, Volume 14, + Number 10, October 1989, pages 29-37. + + Nelson, Mark, "The Data Compression Book", M&T Books, 1991. + + Storer, James A., "Data Compression, Methods and Theory", + Computer Science Press, 1988 + + Welch, Terry, "A Technique for High-Performance Data Compression", + IEEE Computer, Volume 17, Number 6, June 1984, pages 8-19. + + Ziv, J. and Lempel, A., "A universal algorithm for sequential data + compression", Communications of the ACM, Volume 30, Number 6, + June 1987, pages 520-540. + + Ziv, J. and Lempel, A., "Compression of individual sequences via + variable-rate coding", IEEE Transactions on Information Theory, + Volume 24, Number 5, September 1978, pages 530-536. + + +APPENDIX A - AS/400 Extra Field (0x0065) Attribute Definitions +-------------------------------------------------------------- + +A.1 Field Definition Structure: + + a. field length including length 2 bytes + b. field code 2 bytes + c. data x bytes + +A.2 Field Code Description + + 4001 Source type i.e. CLP etc + 4002 The text description of the library + 4003 The text description of the file + 4004 The text description of the member + 4005 x'F0' or 0 is PF-DTA, x'F1' or 1 is PF_SRC + 4007 Database Type Code 1 byte + 4008 Database file and fields definition + 4009 GZIP file type 2 bytes + 400B IFS code page 2 bytes + 400C IFS Creation Time 4 bytes + 400D IFS Access Time 4 bytes + 400E IFS Modification time 4 bytes + 005C Length of the records in the file 2 bytes + 0068 GZIP two words 8 bytes + +APPENDIX B - z/OS Extra Field (0x0065) Attribute Definitions +------------------------------------------------------------ + +B.1 Field Definition Structure: + + a. field length including length 2 bytes + b. field code 2 bytes + c. data x bytes + +B.2 Field Code Description + + 0001 File Type 2 bytes + 0002 NonVSAM Record Format 1 byte + 0003 Reserved + 0004 NonVSAM Block Size 2 bytes Big Endian + 0005 Primary Space Allocation 3 bytes Big Endian + 0006 Secondary Space Allocation 3 bytes Big Endian + 0007 Space Allocation Type1 byte flag + 0008 Modification Date Retired with PKZIP 5.0 + + 0009 Expiration Date Retired with PKZIP 5.0 + + 000A PDS Directory Block Allocation 3 bytes Big Endian binary value + 000B NonVSAM Volume List variable + 000C UNIT Reference Retired with PKZIP 5.0 + + 000D DF/SMS Management Class 8 bytes EBCDIC Text Value + 000E DF/SMS Storage Class 8 bytes EBCDIC Text Value + 000F DF/SMS Data Class 8 bytes EBCDIC Text Value + 0010 PDS/PDSE Member Info. 30 bytes + 0011 VSAM sub-filetype 2 bytes + 0012 VSAM LRECL 13 bytes EBCDIC "(num_avg num_max)" + 0013 VSAM Cluster Name Retired with PKZIP 5.0 + + 0014 VSAM KSDS Key Information 13 bytes EBCDIC "(num_length num_position)" + 0015 VSAM Average LRECL 5 bytes EBCDIC num_value padded with blanks + 0016 VSAM Maximum LRECL 5 bytes EBCDIC num_value padded with blanks + 0017 VSAM KSDS Key Length 5 bytes EBCDIC num_value padded with blanks + 0018 VSAM KSDS Key Position 5 bytes EBCDIC num_value padded with blanks + 0019 VSAM Data Name 1-44 bytes EBCDIC text string + 001A VSAM KSDS Index Name 1-44 bytes EBCDIC text string + 001B VSAM Catalog Name 1-44 bytes EBCDIC text string + 001C VSAM Data Space Type 9 bytes EBCDIC text string + 001D VSAM Data Space Primary 9 bytes EBCDIC num_value left-justified + 001E VSAM Data Space Secondary 9 bytes EBCDIC num_value left-justified + 001F VSAM Data Volume List variable EBCDIC text list of 6-character Volume IDs + 0020 VSAM Data Buffer Space 8 bytes EBCDIC num_value left-justified + 0021 VSAM Data CISIZE 5 bytes EBCDIC num_value left-justified + 0022 VSAM Erase Flag 1 byte flag + 0023 VSAM Free CI % 3 bytes EBCDIC num_value left-justified + 0024 VSAM Free CA % 3 bytes EBCDIC num_value left-justified + 0025 VSAM Index Volume List variable EBCDIC text list of 6-character Volume IDs + 0026 VSAM Ordered Flag 1 byte flag + 0027 VSAM REUSE Flag 1 byte flag + 0028 VSAM SPANNED Flag 1 byte flag + 0029 VSAM Recovery Flag 1 byte flag + 002A VSAM WRITECHK Flag 1 byte flag + 002B VSAM Cluster/Data SHROPTS 3 bytes EBCDIC "n,y" + 002C VSAM Index SHROPTS 3 bytes EBCDIC "n,y" + 002D VSAM Index Space Type 9 bytes EBCDIC text string + 002E VSAM Index Space Primary 9 bytes EBCDIC num_value left-justified + 002F VSAM Index Space Secondary 9 bytes EBCDIC num_value left-justified + 0030 VSAM Index CISIZE 5 bytes EBCDIC num_value left-justified + 0031 VSAM Index IMBED 1 byte flag + 0032 VSAM Index Ordered Flag 1 byte flag + 0033 VSAM REPLICATE Flag 1 byte flag + 0034 VSAM Index REUSE Flag 1 byte flag + 0035 VSAM Index WRITECHK Flag 1 byte flag Retired with PKZIP 5.0 + + 0036 VSAM Owner 8 bytes EBCDIC text string + 0037 VSAM Index Owner 8 bytes EBCDIC text string + 0038 Reserved + 0039 Reserved + 003A Reserved + 003B Reserved + 003C Reserved + 003D Reserved + 003E Reserved + 003F Reserved + 0040 Reserved + 0041 Reserved + 0042 Reserved + 0043 Reserved + 0044 Reserved + 0045 Reserved + 0046 Reserved + 0047 Reserved + 0048 Reserved + 0049 Reserved + 004A Reserved + 004B Reserved + 004C Reserved + 004D Reserved + 004E Reserved + 004F Reserved + 0050 Reserved + 0051 Reserved + 0052 Reserved + 0053 Reserved + 0054 Reserved + 0055 Reserved + 0056 Reserved + 0057 Reserved + 0058 PDS/PDSE Member TTR Info. 6 bytes Big Endian + 0059 PDS 1st LMOD Text TTR 3 bytes Big Endian + 005A PDS LMOD EP Rec # 4 bytes Big Endian + 005B Reserved + 005C Max Length of records 2 bytes Big Endian + 005D PDSE Flag 1 byte flag + 005E Reserved + 005F Reserved + 0060 Reserved + 0061 Reserved + 0062 Reserved + 0063 Reserved + 0064 Reserved + 0065 Last Date Referenced 4 bytes Packed Hex "yyyymmdd" + 0066 Date Created 4 bytes Packed Hex "yyyymmdd" + 0068 GZIP two words 8 bytes + 0071 Extended NOTE Location 12 bytes Big Endian + 0072 Archive device UNIT 6 bytes EBCDIC + 0073 Archive 1st Volume 6 bytes EBCDIC + 0074 Archive 1st VOL File Seq# 2 bytes Binary + +APPENDIX C - Zip64 Extensible Data Sector Mappings +--------------------------------------------------- + + -Z390 Extra Field: + + The following is the general layout of the attributes for the + ZIP 64 "extra" block for extended tape operations. + + Note: some fields stored in Big Endian format. All text is + in EBCDIC format unless otherwise specified. + + Value Size Description + ----- ---- ----------- + (Z390) 0x0065 2 bytes Tag for this "extra" block type + Size 4 bytes Size for the following data block + Tag 4 bytes EBCDIC "Z390" + Length71 2 bytes Big Endian + Subcode71 2 bytes Enote type code + FMEPos 1 byte + Length72 2 bytes Big Endian + Subcode72 2 bytes Unit type code + Unit 1 byte Unit + Length73 2 bytes Big Endian + Subcode73 2 bytes Volume1 type code + FirstVol 1 byte Volume + Length74 2 bytes Big Endian + Subcode74 2 bytes FirstVol file sequence + FileSeq 2 bytes Sequence + +APPENDIX D - Language Encoding (EFS) +------------------------------------ + +D.1 The ZIP format has historically supported only the original IBM PC character +encoding set, commonly referred to as IBM Code Page 437. This limits storing +file name characters to only those within the original MS-DOS range of values +and does not properly support file names in other character encodings, or +languages. To address this limitation, this specification will support the +following change. + +D.2 If general purpose bit 11 is unset, the file name and comment should conform +to the original ZIP character encoding. If general purpose bit 11 is set, the +filename and comment must support The Unicode Standard, Version 4.1.0 or +greater using the character encoding form defined by the UTF-8 storage +specification. The Unicode Standard is published by the The Unicode +Consortium (www.unicode.org). UTF-8 encoded data stored within ZIP files +is expected to not include a byte order mark (BOM). + +D.3 Applications may choose to supplement this file name storage through the use +of the 0x0008 Extra Field. Storage for this optional field is currently +undefined, however it will be used to allow storing extended information +on source or target encoding that may further assist applications with file +name, or file content encoding tasks. Please contact PKWARE with any +requirements on how this field should be used. + +D.4 The 0x0008 Extra Field storage may be used with either setting for general +purpose bit 11. Examples of the intended usage for this field is to store +whether "modified-UTF-8" (JAVA) is used, or UTF-8-MAC. Similarly, other +commonly used character encoding (code page) designations can be indicated +through this field. Formalized values for use of the 0x0008 record remain +undefined at this time. The definition for the layout of the 0x0008 field +will be published when available. Use of the 0x0008 Extra Field provides +for storing data within a ZIP file in an encoding other than IBM Code +Page 437 or UTF-8. + +D.5 General purpose bit 11 will not imply any encoding of file content or +password. Values defining character encoding for file content or +password must be stored within the 0x0008 Extended Language Encoding +Extra Field. + +D.6 Ed Gordon of the Info-ZIP group has defined a pair of "extra field" records +that can be used to store UTF-8 file name and file comment fields. These +records can be used for cases when the general purpose bit 11 method +for storing UTF-8 data in the standard file name and comment fields is +not desirable. A common case for this alternate method is if backward +compatibility with older programs is required. + +D.7 Definitions for the record structure of these fields are included above +in the section on 3rd party mappings for "extra field" records. These +records are identified by Header ID's 0x6375 (Info-ZIP Unicode Comment +Extra Field) and 0x7075 (Info-ZIP Unicode Path Extra Field). + +D.8 The choice of which storage method to use when writing a ZIP file is left +to the implementation. Developers should expect that a ZIP file may +contain either method and should provide support for reading data in +either format. Use of general purpose bit 11 reduces storage requirements +for file name data by not requiring additional "extra field" data for +each file, but can result in older ZIP programs not being able to extract +files. Use of the 0x6375 and 0x7075 records will result in a ZIP file +that should always be readable by older ZIP programs, but requires more +storage per file to write file name and/or file comment fields. diff --git a/docs/extrafld.txt b/docs/extrafld.txt new file mode 100644 index 0000000..624e05c --- /dev/null +++ b/docs/extrafld.txt @@ -0,0 +1,1372 @@ +The following are the known types of zipfile extra fields as of this +writing. Extra fields are documented in PKWARE's appnote.txt and are +intended to allow for backward- and forward-compatible extensions to +the zipfile format. Multiple extra-field types may be chained together, +provided that the total length of all extra-field data is less than 64KB. +(In fact, PKWARE requires that the total length of the entire file header, +including timestamp, file attributes, filename, comment, extra field, etc., +be no more than 64KB.) + +Each extra-field type (or subblock) must contain a four-byte header con- +sisting of a two-byte header ID and a two-byte length (little-endian) for +the remaining data in the subblock. If there are additional subblocks +within the extra field, the header for each one will appear immediately +following the data for the previous subblock (i.e., with no padding for +alignment). + +All integer fields in the descriptions below are in little-endian (Intel) +format unless otherwise specified. Note that "Short" means two bytes, +"Long" means four bytes, and "Long-Long" means eight bytes, regardless +of their native sizes. Unless specifically noted, all integer fields should +be interpreted as unsigned (non-negative) numbers. + +Christian Spieler, 20010517 + +Updated to include the Unicode extra fields. Added new Unix extra field. + +Ed Gordon, 20060819, 20070607, 20070909, 20080426, 20080509 + + ------------------------- + + Header ID's of 0 thru 31 are reserved for use by PKWARE. + The remaining ID's can be used by third party vendors for + proprietary usage. + + The current Header ID mappings defined by PKWARE are: + + 0x0001 ZIP64 extended information extra field + 0x0007 AV Info + 0x0009 OS/2 extended attributes (also Info-ZIP) + 0x000a NTFS (Win9x/WinNT FileTimes) + 0x000c OpenVMS (also Info-ZIP) + 0x000d Unix + 0x000f Patch Descriptor + 0x0014 PKCS#7 Store for X.509 Certificates + 0x0015 X.509 Certificate ID and Signature for + individual file + 0x0016 X.509 Certificate ID for Central Directory + + The Header ID mappings defined by Info-ZIP and third parties are: + + 0x0065 IBM S/390 attributes - uncompressed + 0x0066 IBM S/390 attributes - compressed + 0x07c8 Info-ZIP Macintosh (old, J. Lee) + 0x2605 ZipIt Macintosh (first version) + 0x2705 ZipIt Macintosh v 1.3.5 and newer (w/o full filename) + 0x334d Info-ZIP Macintosh (new, D. Haase's 'Mac3' field ) + 0x4154 Tandem NSK + 0x4341 Acorn/SparkFS (David Pilling) + 0x4453 Windows NT security descriptor (binary ACL) + 0x4704 VM/CMS + 0x470f MVS + 0x4854 Theos, old inofficial port + 0x4b46 FWKCS MD5 (see below) + 0x4c41 OS/2 access control list (text ACL) + 0x4d49 Info-ZIP OpenVMS (obsolete) + 0x4d63 Macintosh SmartZIP, by Macro Bambini + 0x4f4c Xceed original location extra field + 0x5356 AOS/VS (binary ACL) + 0x5455 extended timestamp + 0x5855 Info-ZIP Unix (original; also OS/2, NT, etc.) + 0x554e Xceed unicode extra field + 0x6375 Info-ZIP Unicode Comment + 0x6542 BeOS (BeBox, PowerMac, etc.) + 0x6854 Theos + 0x7075 Info-ZIP Unicode Path + 0x756e ASi Unix + 0x7855 Info-ZIP Unix (previous new) + 0x7875 Info-ZIP Unix (new) + 0xfb4a SMS/QDOS + +The following are detailed descriptions of the known extra-field block types: + + -OS/2 Extended Attributes Extra Field: + ==================================== + + The following is the layout of the OS/2 extended attributes "extra" + block. (Last Revision 19960922) + + Note: all fields stored in Intel low-byte/high-byte order. + + Local-header version: + + Value Size Description + ----- ---- ----------- + (OS/2) 0x0009 Short tag for this extra block type + TSize Short total data size for this block + BSize Long uncompressed EA data size + CType Short compression type + EACRC Long CRC value for uncompressed EA data + (var.) variable compressed EA data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (OS/2) 0x0009 Short tag for this extra block type + TSize Short total data size for this block (4) + BSize Long size of uncompressed local EA data + + The value of CType is interpreted according to the "compression + method" section above; i.e., 0 for stored, 8 for deflated, etc. + + The OS/2 extended attribute structure (FEA2LIST) is compressed and + then stored in its entirety within this structure. There will only + ever be one block of data in the variable-length field. + + + -OS/2 Access Control List Extra Field: + ==================================== + + The following is the layout of the OS/2 ACL extra block. + (Last Revision 19960922) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (ACL) 0x4c41 Short tag for this extra block type ("AL") + TSize Short total data size for this block + BSize Long uncompressed ACL data size + CType Short compression type + EACRC Long CRC value for uncompressed ACL data + (var.) variable compressed ACL data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (ACL) 0x4c41 Short tag for this extra block type ("AL") + TSize Short total data size for this block (4) + BSize Long size of uncompressed local ACL data + + The value of CType is interpreted according to the "compression + method" section above; i.e., 0 for stored, 8 for deflated, etc. + + The uncompressed ACL data consist of a text header of the form + "ACL1:%hX,%hd\n", where the first field is the OS/2 ACCINFO acc_attr + member and the second is acc_count, followed by acc_count strings + of the form "%s,%hx\n", where the first field is acl_ugname (user + group name) and the second acl_access. This block type will be + extended for other operating systems as needed. + + + -Windows NT Security Descriptor Extra Field: + ========================================== + + The following is the layout of the NT Security Descriptor (another + type of ACL) extra block. (Last Revision 19960922) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (SD) 0x4453 Short tag for this extra block type ("SD") + TSize Short total data size for this block + BSize Long uncompressed SD data size + Version Byte version of uncompressed SD data format + CType Short compression type + EACRC Long CRC value for uncompressed SD data + (var.) variable compressed SD data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (SD) 0x4453 Short tag for this extra block type ("SD") + TSize Short total data size for this block (4) + BSize Long size of uncompressed local SD data + + The value of CType is interpreted according to the "compression + method" section above; i.e., 0 for stored, 8 for deflated, etc. + Version specifies how the compressed data are to be interpreted + and allows for future expansion of this extra field type. Currently + only version 0 is defined. + + For version 0, the compressed data are to be interpreted as a single + valid Windows NT SECURITY_DESCRIPTOR data structure, in self-relative + format. + + + -PKWARE Win95/WinNT Extra Field: + ============================== + + The following description covers PKWARE's "NTFS" attributes + "extra" block, introduced with the release of PKZIP 2.50 for + Windows. (Last Revision 20001118) + + (Note: At this time the Mtime, Atime and Ctime values may + be used on any WIN32 system.) + [Info-ZIP note: In the current implementations, this field has + a fixed total data size of 32 bytes and is only stored as local + extra field.] + + Value Size Description + ----- ---- ----------- + (NTFS) 0x000a Short Tag for this "extra" block type + TSize Short Total Data Size for this block + Reserved Long for future use + Tag1 Short NTFS attribute tag value #1 + Size1 Short Size of attribute #1, in bytes + (var.) SubSize1 Attribute #1 data + . + . + . + TagN Short NTFS attribute tag value #N + SizeN Short Size of attribute #N, in bytes + (var.) SubSize1 Attribute #N data + + For NTFS, values for Tag1 through TagN are as follows: + (currently only one set of attributes is defined for NTFS) + + Tag Size Description + ----- ---- ----------- + 0x0001 2 bytes Tag for attribute #1 + Size1 2 bytes Size of attribute #1, in bytes (24) + Mtime 8 bytes 64-bit NTFS file last modification time + Atime 8 bytes 64-bit NTFS file last access time + Ctime 8 bytes 64-bit NTFS file creation time + + The total length for this block is 28 bytes, resulting in a + fixed size value of 32 for the TSize field of the NTFS block. + + The NTFS filetimes are 64-bit unsigned integers, stored in Intel + (least significant byte first) byte order. They determine the + number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch", + which is "01-Jan-1601 00:00:00 UTC". + + + -PKWARE OpenVMS Extra Field: + ========================== + + The following is the layout of PKWARE's OpenVMS attributes "extra" + block. (Last Revision 12/17/91) + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (VMS) 0x000c Short Tag for this "extra" block type + TSize Short Total Data Size for this block + CRC Long 32-bit CRC for remainder of the block + Tag1 Short OpenVMS attribute tag value #1 + Size1 Short Size of attribute #1, in bytes + (var.) Size1 Attribute #1 data + . + . + . + TagN Short OpenVMS attribute tage value #N + SizeN Short Size of attribute #N, in bytes + (var.) SizeN Attribute #N data + + Rules: + + 1. There will be one or more of attributes present, which + will each be preceded by the above TagX & SizeX values. + These values are identical to the ATR$C_XXXX and + ATR$S_XXXX constants which are defined in ATR.H under + OpenVMS C. Neither of these values will ever be zero. + + 2. No word alignment or padding is performed. + + 3. A well-behaved PKZIP/OpenVMS program should never produce + more than one sub-block with the same TagX value. Also, + there will never be more than one "extra" block of type + 0x000c in a particular directory record. + + + -Info-ZIP VMS Extra Field: + ======================== + + The following is the layout of Info-ZIP's VMS attributes extra + block for VAX or Alpha AXP. The local-header and central-header + versions are identical. (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (VMS2) 0x4d49 Short tag for this extra block type ("JM") + TSize Short total data size for this block + ID Long block ID + Flags Short info bytes + BSize Short uncompressed block size + Reserved Long (reserved) + (var.) variable compressed VMS file-attributes block + + The block ID is one of the following unterminated strings: + + "VFAB" struct FAB + "VALL" struct XABALL + "VFHC" struct XABFHC + "VDAT" struct XABDAT + "VRDT" struct XABRDT + "VPRO" struct XABPRO + "VKEY" struct XABKEY + "VMSV" version (e.g., "V6.1"; truncated at hyphen) + "VNAM" reserved + + The lower three bits of Flags indicate the compression method. The + currently defined methods are: + + 0 stored (not compressed) + 1 simple "RLE" + 2 deflated + + The "RLE" method simply replaces zero-valued bytes with zero-valued + bits and non-zero-valued bytes with a "1" bit followed by the byte + value. + + The variable-length compressed data contains only the data corre- + sponding to the indicated structure or string. Typically multiple + VMS2 extra fields are present (each with a unique block type). + + + -Info-ZIP Macintosh Extra Field: + ============================== + + The following is the layout of the (old) Info-ZIP resource-fork extra + block for Macintosh. The local-header and central-header versions + are identical. (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (Mac) 0x07c8 Short tag for this extra block type + TSize Short total data size for this block + "JLEE" beLong extra-field signature + FInfo 16 bytes Macintosh FInfo structure + CrDat beLong HParamBlockRec fileParam.ioFlCrDat + MdDat beLong HParamBlockRec fileParam.ioFlMdDat + Flags beLong info bits + DirID beLong HParamBlockRec fileParam.ioDirID + VolName 28 bytes volume name (optional) + + All fields but the first two are in native Macintosh format + (big-endian Motorola order, not little-endian Intel). The least + significant bit of Flags is 1 if the file is a data fork, 0 other- + wise. In addition, if this extra field is present, the filename + has an extra 'd' or 'r' appended to indicate data fork or resource + fork. The 28-byte VolName field may be omitted. + + + -ZipIt Macintosh Extra Field (long): + ================================== + + The following is the layout of the ZipIt extra block for Macintosh. + The local-header and central-header versions are identical. + (Last Revision 19970130) + + Value Size Description + ----- ---- ----------- + (Mac2) 0x2605 Short tag for this extra block type + TSize Short total data size for this block + "ZPIT" beLong extra-field signature + FnLen Byte length of FileName + FileName variable full Macintosh filename + FileType Byte[4] four-byte Mac file type string + Creator Byte[4] four-byte Mac creator string + + + -ZipIt Macintosh Extra Field (short): + =================================== + + The following is the layout of a shortened variant of the + ZipIt extra block for Macintosh (without "full name" entry). + This variant is used by ZipIt 1.3.5 and newer for entries that + do not need a "full Mac filename" record. + The local-header and central-header versions are identical. + (Last Revision 19980903) + + Value Size Description + ----- ---- ----------- + (Mac2b) 0x2705 Short tag for this extra block type + TSize Short total data size for this block (12) + "ZPIT" beLong extra-field signature + FileType Byte[4] four-byte Mac file type string + Creator Byte[4] four-byte Mac creator string + + + -Info-ZIP Macintosh Extra Field (new): + ==================================== + + The following is the layout of the (new) Info-ZIP extra + block for Macintosh, designed by Dirk Haase. + All values are in little-endian. + (Last Revision 19981005) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (Mac3) 0x334d Short tag for this extra block type ("M3") + TSize Short total data size for this block + BSize Long uncompressed finder attribute data size + Flags Short info bits + fdType Byte[4] Type of the File (4-byte string) + fdCreator Byte[4] Creator of the File (4-byte string) + (CType) Short compression type + (CRC) Long CRC value for uncompressed MacOS data + Attribs variable finder attribute data (see below) + + + Central-header version: + + Value Size Description + ----- ---- ----------- + (Mac3) 0x334d Short tag for this extra block type ("M3") + TSize Short total data size for this block + BSize Long uncompressed finder attribute data size + Flags Short info bits + fdType Byte[4] Type of the File (4-byte string) + fdCreator Byte[4] Creator of the File (4-byte string) + + The third bit of Flags in both headers indicates whether + the LOCAL extra field is uncompressed (and therefore whether CType + and CRC are omitted): + + Bits of the Flags: + bit 0 if set, file is a data fork; otherwise unset + bit 1 if set, filename will be not changed + bit 2 if set, Attribs is uncompressed (no CType, CRC) + bit 3 if set, date and times are in 64 bit + if zero date and times are in 32 bit. + bit 4 if set, timezone offsets fields for the native + Mac times are omitted (UTC support deactivated) + bits 5-15 reserved; + + + Attributes: + + Attribs is a Mac-specific block of data in little-endian format with + the following structure (if compressed, uncompress it first): + + Value Size Description + ----- ---- ----------- + fdFlags Short Finder Flags + fdLocation.v Short Finder Icon Location + fdLocation.h Short Finder Icon Location + fdFldr Short Folder containing file + + FXInfo 16 bytes Macintosh FXInfo structure + FXInfo-Structure: + fdIconID Short + fdUnused[3] Short unused but reserved 6 bytes + fdScript Byte Script flag and number + fdXFlags Byte More flag bits + fdComment Short Comment ID + fdPutAway Long Home Dir ID + + FVersNum Byte file version number + may be not used by MacOS + ACUser Byte directory access rights + + FlCrDat ULong date and time of creation + FlMdDat ULong date and time of last modification + FlBkDat ULong date and time of last backup + These time numbers are original Mac FileTime values (local time!). + Currently, date-time width is 32-bit, but future version may + support be 64-bit times (see flags) + + CrGMTOffs Long(signed!) difference "local Creat. time - UTC" + MdGMTOffs Long(signed!) difference "local Modif. time - UTC" + BkGMTOffs Long(signed!) difference "local Backup time - UTC" + These "local time - UTC" differences (stored in seconds) may be + used to support timestamp adjustment after inter-timezone transfer. + These fields are optional; bit 4 of the flags word controls their + presence. + + Charset Short TextEncodingBase (Charset) + valid for the following two fields + + FullPath variable Path of the current file. + Zero terminated string (C-String) + Currently coded in the native Charset. + + Comment variable Finder Comment of the current file. + Zero terminated string (C-String) + Currently coded in the native Charset. + + + -SmartZIP Macintosh Extra Field: + ==================================== + + The following is the layout of the SmartZIP extra + block for Macintosh, designed by Marco Bambini. + + Local-header version: + + Value Size Description + ----- ---- ----------- + 0x4d63 Short tag for this extra block type ("cM") + TSize Short total data size for this block (64) + "dZip" beLong extra-field signature + fdType Byte[4] Type of the File (4-byte string) + fdCreator Byte[4] Creator of the File (4-byte string) + fdFlags beShort Finder Flags + fdLocation.v beShort Finder Icon Location + fdLocation.h beShort Finder Icon Location + fdFldr beShort Folder containing file + CrDat beLong HParamBlockRec fileParam.ioFlCrDat + MdDat beLong HParamBlockRec fileParam.ioFlMdDat + frScroll.v Byte vertical pos. of folder's scroll bar + fdScript Byte Script flag and number + frScroll.h Byte horizontal pos. of folder's scroll bar + fdXFlags Byte More flag bits + FileName Byte[32] full Macintosh filename (pascal string) + + All fields but the first two are in native Macintosh format + (big-endian Motorola order, not little-endian Intel). + The extra field size is fixed to 64 bytes. + The local-header and central-header versions are identical. + + + -Acorn SparkFS Extra Field: + ========================= + + The following is the layout of David Pilling's SparkFS extra block + for Acorn RISC OS. The local-header and central-header versions are + identical. (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (Acorn) 0x4341 Short tag for this extra block type ("AC") + TSize Short total data size for this block (20) + "ARC0" Long extra-field signature + LoadAddr Long load address or file type + ExecAddr Long exec address + Attr Long file permissions + Zero Long reserved; always zero + + The following bits of Attr are associated with the given file + permissions: + + bit 0 user-writable ('W') + bit 1 user-readable ('R') + bit 2 reserved + bit 3 locked ('L') + bit 4 publicly writable ('w') + bit 5 publicly readable ('r') + bit 6 reserved + bit 7 reserved + + + -VM/CMS Extra Field: + ================== + + The following is the layout of the file-attributes extra block for + VM/CMS. The local-header and central-header versions are + identical. (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (VM/CMS) 0x4704 Short tag for this extra block type + TSize Short total data size for this block + flData variable file attributes data + + flData is an uncompressed fldata_t struct. + + + -MVS Extra Field: + =============== + + The following is the layout of the file-attributes extra block for + MVS. The local-header and central-header versions are identical. + (Last Revision 19960922) + + Value Size Description + ----- ---- ----------- + (MVS) 0x470f Short tag for this extra block type + TSize Short total data size for this block + flData variable file attributes data + + flData is an uncompressed fldata_t struct. + + + -PKWARE Unix Extra Field: + ======================== + + The following is the layout of PKWARE's Unix "extra" block. + It was introduced with the release of PKZIP for Unix 2.50. + Note: all fields are stored in Intel low-byte/high-byte order. + (Last Revision 19980901) + + This field has a minimum data size of 12 bytes and is only stored + as local extra field. + + Value Size Description + ----- ---- ----------- + (Unix0) 0x000d Short Tag for this "extra" block type + TSize Short Total Data Size for this block + AcTime Long time of last access (UTC/GMT) + ModTime Long time of last modification (UTC/GMT) + UID Short Unix user ID + GID Short Unix group ID + (var) variable Variable length data field + + The variable length data field will contain file type + specific data. Currently the only values allowed are + the original "linked to" file names for hard or symbolic + links, and the major and minor device node numbers for + character and block device nodes. Since device nodes + cannot be either symbolic or hard links, only one set of + variable length data is stored. Link files will have the + name of the original file stored. This name is NOT NULL + terminated. Its size can be determined by checking TSize - + 12. Device entries will have eight bytes stored as two 4 + byte entries (in little-endian format). The first entry + will be the major device number, and the second the minor + device number. + + [Info-ZIP note: The fixed part of this field has the same layout as + Info-ZIP's abandoned "Unix1 timestamps & owner ID info" extra field; + only the two tag bytes are different.] + + + -PATCH Descriptor Extra Field: + ============================ + + The following is the layout of the Patch Descriptor "extra" + block. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (Patch) 0x000f Short Tag for this "extra" block type + TSize Short Size of the total "extra" block + Version Short Version of the descriptor + Flags Long Actions and reactions (see below) + OldSize Long Size of the file about to be patched + OldCRC Long 32-bit CRC of the file about to be patched + NewSize Long Size of the resulting file + NewCRC Long 32-bit CRC of the resulting file + + + Actions and reactions + + Bits Description + ---- ---------------- + 0 Use for autodetection + 1 Treat as selfpatch + 2-3 RESERVED + 4-5 Action (see below) + 6-7 RESERVED + 8-9 Reaction (see below) to absent file + 10-11 Reaction (see below) to newer file + 12-13 Reaction (see below) to unknown file + 14-15 RESERVED + 16-31 RESERVED + + Actions + + Action Value + ------ ----- + none 0 + add 1 + delete 2 + patch 3 + + Reactions + + Reaction Value + -------- ----- + ask 0 + skip 1 + ignore 2 + fail 3 + + + -PKCS#7 Store for X.509 Certificates: + =================================== + + This field is contains the information about each + certificate a file is signed with. This field should only + appear in the first central directory record, and will be + ignored in any other record. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (Store) 0x0014 2 bytes Tag for this "extra" block type + SSize 2 bytes Size of the store data + SData (variable) Data about the store + + SData + Value Size Description + ----- ---- ----------- + Version 2 bytes Version number, 0x0001 for now + StoreD (variable) Actual store data + + The StoreD member is suitable for passing as the pbData + member of a CRYPT_DATA_BLOB to the CertOpenStore() function + in Microsoft's CryptoAPI. The SSize member above will be + cbData + 6, where cbData is the cbData member of the same + CRYPT_DATA_BLOB. The encoding type to pass to + CertOpenStore() should be + PKCS_7_ANS_ENCODING | X509_ASN_ENCODING. + + + -X.509 Certificate ID and Signature for individual file: + ====================================================== + + This field contains the information about which certificate + in the PKCS#7 Store was used to sign the particular file. + It also contains the signature data. This field can appear + multiple times, but can only appear once per certificate. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (CID) 0x0015 2 bytes Tag for this "extra" block type + CSize 2 bytes Size of Method + Method (variable) + + Method + Value Size Description + ----- ---- ----------- + Version 2 bytes Version number, for now 0x0001 + AlgID 2 bytes Algorithm ID used for signing + IDSize 2 bytes Size of Certificate ID data + CertID (variable) Certificate ID data + SigSize 2 bytes Size of Signature data + Sig (variable) Signature data + + CertID + Value Size Description + ----- ---- ----------- + Size1 4 bytes Size of CertID, should be (IDSize - 4) + Size1 4 bytes A bug in version one causes this value + to appear twice. + IssSize 4 bytes Issuer data size + Issuer (variable) Issuer data + SerSize 4 bytes Serial Number size + Serial (variable) Serial Number data + + The Issuer and IssSize members are suitable for creating a + CRYPT_DATA_BLOB to be the Issuer member of a CERT_INFO + struct. The Serial and SerSize members would be the + SerialNumber member of the same CERT_INFO struct. This + struct would be used to find the certificate in the store + the file was signed with. Those structures are from the MS + CryptoAPI. + + Sig and SigSize are the actual signature data and size + generated by signing the file with the MS CryptoAPI using a + hash created with the given AlgID. + + + -X.509 Certificate ID and Signature for central directory: + ======================================================== + + This field contains the information about which certificate + in the PKCS#7 Store was used to sign the central directory. + It should only appear with the first central directory + record, along with the store. The data structure is the + same as the CID, except that SigSize will be 0, and there + will be no Sig member. + + This field is also kept after the last central directory + record, as the signature data (ID 0x05054b50, it looks like + a central directory record of a different type). This + second copy of the data is the Signature Data member of the + record, and will have a SigSize that is non-zero, and will + have Sig data. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (CDID) 0x0016 2 bytes Tag for this "extra" block type + CSize 2 bytes Size of Method + Method (variable) + + + -ZIP64 Extended Information Extra Field: + ====================================== + + The following is the layout of the ZIP64 extended + information "extra" block. If one of the size or + offset fields in the Local or Central directory + record is too small to hold the required data, + a ZIP64 extended information record is created. + The order of the fields in the ZIP64 extended + information record is fixed, but the fields will + only appear if the corresponding Local or Central + directory record field is set to 0xFFFF or 0xFFFFFFFF. + + Note: all fields stored in Intel low-byte/high-byte order. + + Value Size Description + ----- ---- ----------- + (ZIP64) 0x0001 2 bytes Tag for this "extra" block type + Size 2 bytes Size of this "extra" block + Original + Size 8 bytes Original uncompresseed file size + Compressed + Size 8 bytes Size of compressed data + Relative Header + Offset 8 bytes Offset of local header record + Disk Start + Number 4 bytes Number of the disk on which + this file starts + + This entry in the Local header must include BOTH original + and compressed file sizes. + + + -Extended Timestamp Extra Field: + ============================== + + The following is the layout of the extended-timestamp extra block. + (Last Revision 19970118) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (time) 0x5455 Short tag for this extra block type ("UT") + TSize Short total data size for this block + Flags Byte info bits + (ModTime) Long time of last modification (UTC/GMT) + (AcTime) Long time of last access (UTC/GMT) + (CrTime) Long time of original creation (UTC/GMT) + + Central-header version: + + Value Size Description + ----- ---- ----------- + (time) 0x5455 Short tag for this extra block type ("UT") + TSize Short total data size for this block + Flags Byte info bits (refers to local header!) + (ModTime) Long time of last modification (UTC/GMT) + + The central-header extra field contains the modification time only, + or no timestamp at all. TSize is used to flag its presence or + absence. But note: + + If "Flags" indicates that Modtime is present in the local header + field, it MUST be present in the central header field, too! + This correspondence is required because the modification time + value may be used to support trans-timezone freshening and + updating operations with zip archives. + + The time values are in standard Unix signed-long format, indicating + the number of seconds since 1 January 1970 00:00:00. The times + are relative to Coordinated Universal Time (UTC), also sometimes + referred to as Greenwich Mean Time (GMT). To convert to local time, + the software must know the local timezone offset from UTC/GMT. + + The lower three bits of Flags in both headers indicate which time- + stamps are present in the LOCAL extra field: + + bit 0 if set, modification time is present + bit 1 if set, access time is present + bit 2 if set, creation time is present + bits 3-7 reserved for additional timestamps; not set + + Those times that are present will appear in the order indicated, but + any combination of times may be omitted. (Creation time may be + present without access time, for example.) TSize should equal + (1 + 4*(number of set bits in Flags)), as the block is currently + defined. Other timestamps may be added in the future. + + + -Info-ZIP Unix Extra Field (type 1): + ================================== + + The following is the layout of the old Info-ZIP extra block for + Unix. It has been replaced by the extended-timestamp extra block + (0x5455) and the Unix type 2 extra block (0x7855). + (Last Revision 19970118) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (Unix1) 0x5855 Short tag for this extra block type ("UX") + TSize Short total data size for this block + AcTime Long time of last access (UTC/GMT) + ModTime Long time of last modification (UTC/GMT) + UID Short Unix user ID (optional) + GID Short Unix group ID (optional) + + Central-header version: + + Value Size Description + ----- ---- ----------- + (Unix1) 0x5855 Short tag for this extra block type ("UX") + TSize Short total data size for this block + AcTime Long time of last access (GMT/UTC) + ModTime Long time of last modification (GMT/UTC) + + The file access and modification times are in standard Unix signed- + long format, indicating the number of seconds since 1 January 1970 + 00:00:00. The times are relative to Coordinated Universal Time + (UTC), also sometimes referred to as Greenwich Mean Time (GMT). To + convert to local time, the software must know the local timezone + offset from UTC/GMT. The modification time may be used by non-Unix + systems to support inter-timezone freshening and updating of zip + archives. + + The local-header extra block may optionally contain UID and GID + info for the file. The local-header TSize value is the only + indication of this. Note that Unix UIDs and GIDs are usually + specific to a particular machine, and they generally require root + access to restore. + + This extra field type is obsolete, but it has been in use since + mid-1994. Therefore future archiving software should continue to + support it. Some guidelines: + + An archive member should either contain the old "Unix1" + extra field block or the new extra field types "time" and/or + "Unix2". + + If both the old "Unix1" block type and one or both of the new + block types "time" and "Unix2" are found, the "Unix1" block + should be considered invalid and ignored. + + Unarchiving software should recognize both old and new extra + field block types, but the info from new types overrides the + old "Unix1" field. + + Archiving software should recognize "Unix1" extra fields for + timestamp comparison but never create it for updated, freshened + or new archive members. When copying existing members to a new + archive, any "Unix1" extra field blocks should be converted to + the new "time" and/or "Unix2" types. + + + -Info-ZIP Unix Extra Field (type 2): + ================================== + + The following is the layout of the new Info-ZIP extra block for + Unix. (Last Revision 19960922) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (Unix2) 0x7855 Short tag for this extra block type ("Ux") + TSize Short total data size for this block (4) + UID Short Unix user ID + GID Short Unix group ID + + Central-header version: + + Value Size Description + ----- ---- ----------- + (Unix2) 0x7855 Short tag for this extra block type ("Ux") + TSize Short total data size for this block (0) + + The data size of the central-header version is zero; it is used + solely as a flag that UID/GID info is present in the local-header + extra field. If additional fields are ever added to the local + version, the central version may be extended to indicate this. + + Note that Unix UIDs and GIDs are usually specific to a particular + machine, and they generally require root access to restore. + + + -ASi Unix Extra Field: + ==================== + + The following is the layout of the ASi extra block for Unix. The + local-header and central-header versions are identical. + (Last Revision 19960916) + + Value Size Description + ----- ---- ----------- + (Unix3) 0x756e Short tag for this extra block type ("nu") + TSize Short total data size for this block + CRC Long CRC-32 of the remaining data + Mode Short file permissions + SizDev Long symlink'd size OR major/minor dev num + UID Short user ID + GID Short group ID + (var.) variable symbolic link filename + + Mode is the standard Unix st_mode field from struct stat, containing + user/group/other permissions, setuid/setgid and symlink info, etc. + + If Mode indicates that this file is a symbolic link, SizDev is the + size of the file to which the link points. Otherwise, if the file + is a device, SizDev contains the standard Unix st_rdev field from + struct stat (includes the major and minor numbers of the device). + SizDev is undefined in other cases. + + If Mode indicates that the file is a symbolic link, the final field + will be the name of the file to which the link points. The file- + name length can be inferred from TSize. + + [Note that TSize may incorrectly refer to the data size not counting + the CRC; i.e., it may be four bytes too small.] + + + -BeOS Extra Field: + ================ + + The following is the layout of the file-attributes extra block for + BeOS. (Last Revision 19970531) + + Local-header version: + + Value Size Description + ----- ---- ----------- + (BeOS) 0x6542 Short tag for this extra block type ("Be") + TSize Short total data size for this block + BSize Long uncompressed file attribute data size + Flags Byte info bits + (CType) Short compression type + (CRC) Long CRC value for uncompressed file attribs + Attribs variable file attribute data + + Central-header version: + + Value Size Description + ----- ---- ----------- + (BeOS) 0x6542 Short tag for this extra block type ("Be") + TSize Short total data size for this block (5) + BSize Long size of uncompr. local EF block data + Flags Byte info bits + + The least significant bit of Flags in both headers indicates whether + the LOCAL extra field is uncompressed (and therefore whether CType + and CRC are omitted): + + bit 0 if set, Attribs is uncompressed (no CType, CRC) + bits 1-7 reserved; if set, assume error or unknown data + + Currently the only supported compression types are deflated (type 8) + and stored (type 0); the latter is not used by Info-ZIP's Zip but is + supported by UnZip. + + Attribs is a BeOS-specific block of data in big-endian format with + the following structure (if compressed, uncompress it first): + + Value Size Description + ----- ---- ----------- + Name variable attribute name (null-terminated string) + Type Long attribute type (32-bit unsigned integer) + Size Long Long data size for this sub-block (64 bits) + Data variable attribute data + + The attribute structure is repeated for every attribute. The Data + field may contain anything--text, flags, bitmaps, etc. + + + -SMS/QDOS Extra Field: + ==================== + + The following is the layout of the file-attributes extra block for + SMS/QDOS. The local-header and central-header versions are identical. + (Last Revision 19960929) + + Value Size Description + ----- ---- ----------- + (QDOS) 0xfb4a Short tag for this extra block type + TSize Short total data size for this block + LongID Long extra-field signature + (ExtraID) Long additional signature/flag bytes + QDirect 64 bytes qdirect structure + + LongID may be "QZHD" or "QDOS". In the latter case, ExtraID will + be present. Its first three bytes are "02\0"; the last byte is + currently undefined. + + QDirect contains the file's uncompressed directory info (qdirect + struct). Its elements are in native (big-endian) format: + + d_length beLong file length + d_access byte file access type + d_type byte file type + d_datalen beLong data length + d_reserved beLong unused + d_szname beShort size of filename + d_name 36 bytes filename + d_update beLong time of last update + d_refdate beLong file version number + d_backup beLong time of last backup (archive date) + + + -AOS/VS Extra Field: + ================== + + The following is the layout of the extra block for Data General + AOS/VS. The local-header and central-header versions are identical. + (Last Revision 19961125) + + Value Size Description + ----- ---- ----------- + (AOSVS) 0x5356 Short tag for this extra block type ("VS") + TSize Short total data size for this block + "FCI\0" Long extra-field signature + Version Byte version of AOS/VS extra block (10 = 1.0) + Fstat variable fstat packet + AclBuf variable raw ACL data ($MXACL bytes) + + Fstat contains the file's uncompressed fstat packet, which is one of + the following: + + normal fstat packet (P_FSTAT struct) + DIR/CPD fstat packet (P_FSTAT_DIR struct) + unit (device) fstat packet (P_FSTAT_UNIT struct) + IPC file fstat packet (P_FSTAT_IPC struct) + + AclBuf contains the raw ACL data; its length is $MXACL. + + + -Tandem NSK Extra Field: + ====================== + + The following is the layout of the file-attributes extra block for + Tandem NSK. The local-header and central-header versions are + identical. (Last Revision 19981221) + + Value Size Description + ----- ---- ----------- + (TA) 0x4154 Short tag for this extra block type ("TA") + TSize Short total data size for this block (20) + NSKattrs 20 Bytes NSK attributes + + + -THEOS Extra Field: + ================= + + The following is the layout of the file-attributes extra block for + Theos. The local-header and central-header versions are identical. + (Last Revision 19990206) + + Value Size Description + ----- ---- ----------- + (Theos) 0x6854 Short 'Th' signature + size Short size of extra block + flags Byte reserved for future use + filesize Long file size + fileorg Byte type of file (see below) + keylen Short key length for indexed and keyed files, + data segment size for 16 bits programs + reclen Short record length for indexed,keyed and direct, + text segment size for 16 bits programs + filegrow Byte growing factor for indexed,keyed and direct + protect Byte protections (see below) + reserved Short reserved for future use + + File types + ========== + + 0x80 library (keyed access list of files) + 0x40 directory + 0x10 stream file + 0x08 direct file + 0x04 keyed file + 0x02 indexed file + 0x0e reserved + 0x01 16 bits real mode program (obsolete) + 0x21 16 bits protected mode program + 0x41 32 bits protected mode program + + Protection codes + ================ + + User protection + --------------- + 0x01 non readable + 0x02 non writable + 0x04 non executable + 0x08 non erasable + + Other protection + ---------------- + 0x10 non readable + 0x20 non writable + 0x40 non executable Theos before 4.0 + 0x40 modified Theos 4.x + 0x80 not hidden + + + -THEOS old inofficial Extra Field: + ================================ + + The following is the layout of an inoffical former version of a + Theos file-attributes extra blocks. This layout was never published + and is no longer created. However, UnZip can optionally support it + when compiling with the option flag OLD_THEOS_EXTRA defined. + Both the local-header and central-header versions are identical. + (Last Revision 19990206) + + Value Size Description + ----- ---- ----------- + (THS0) 0x4854 Short 'TH' signature + size Short size of extra block + flags Short reserved for future use + filesize Long file size + reclen Short record length for indexed,keyed and direct, + text segment size for 16 bits programs + keylen Short key length for indexed and keyed files, + data segment size for 16 bits programs + filegrow Byte growing factor for indexed,keyed and direct + reserved 3 Bytes reserved for future use + + + -FWKCS MD5 Extra Field: + ===================== + + The FWKCS Contents_Signature System, used in automatically + identifying files independent of filename, optionally adds + and uses an extra field to support the rapid creation of + an enhanced contents_signature. + There is no local-header version; the following applies + only to the central header. (Last Revision 19961207) + + Central-header version: + + Value Size Description + ----- ---- ----------- + (MD5) 0x4b46 Short tag for this extra block type ("FK") + TSize Short total data size for this block (19) + "MD5" 3 bytes extra-field signature + MD5hash 16 bytes 128-bit MD5 hash of uncompressed data + (low byte first) + + When FWKCS revises a .ZIP file central directory to add + this extra field for a file, it also replaces the + central directory entry for that file's uncompressed + file length with a measured value. + + FWKCS provides an option to strip this extra field, if + present, from a .ZIP file central directory. In adding + this extra field, FWKCS preserves .ZIP file Authenticity + Verification; if stripping this extra field, FWKCS + preserves all versions of AV through PKZIP version 2.04g. + + FWKCS, and FWKCS Contents_Signature System, are + trademarks of Frederick W. Kantor. + + (1) R. Rivest, RFC1321.TXT, MIT Laboratory for Computer + Science and RSA Data Security, Inc., April 1992. + ll.76-77: "The MD5 algorithm is being placed in the + public domain for review and possible adoption as a + standard." + + + -Info-ZIP Unicode Path Extra Field: + ================================= + + Stores the UTF-8 version of the entry path as stored in the + local header and central directory header. + (Last Revision 20070912) + + Value Size Description + ----- ---- ----------- + (UPath) 0x7075 Short tag for this extra block type ("up") + TSize Short total data size for this block + Version 1 byte version of this extra field, currently 1 + NameCRC32 4 bytes File Name Field CRC32 Checksum + UnicodeName Variable UTF-8 version of the entry File Name + + Currently Version is set to the number 1. If there is a need + to change this field, the version will be incremented. Changes + may not be backward compatible so this extra field should not be + used if the version is not recognized. + + The NameCRC32 is the standard zip CRC32 checksum of the File Name + field in the header. This is used to verify that the header + File Name field has not changed since the Unicode Path extra field + was created. This can happen if a utility renames the entry but + does not update the UTF-8 path extra field. If the CRC check fails, + this UTF-8 Path Extra Field should be ignored and the File Name field + in the header used instead. + + The UnicodeName is the UTF-8 version of the contents of the File Name + field in the header. As UnicodeName is defined to be UTF-8, no UTF-8 + byte order mark (BOM) is used. The length of this field is determined + by subtracting the size of the previous fields from TSize. If both + the File Name and Comment fields are UTF-8, the new General Purpose + Bit Flag, bit 11 (Language encoding flag (EFS)), can be used to + indicate that both the header File Name and Comment fields are UTF-8 + and, in this case, the Unicode Path and Unicode Comment extra fields + are not needed and should not be created. Note that, for backward + compatibility, bit 11 should only be used if the native character set + of the paths and comments being zipped up are already in UTF-8. The + same method, either bit 11 or extra fields, should be used in both + the local and central directory headers. + + + -Info-ZIP Unicode Comment Extra Field: + ==================================== + + Stores the UTF-8 version of the entry comment as stored in the + central directory header. + (Last Revision 20070912) + + Value Size Description + ----- ---- ----------- + (UCom) 0x6375 Short tag for this extra block type ("uc") + TSize Short total data size for this block + Version 1 byte version of this extra field, currently 1 + ComCRC32 4 bytes Comment Field CRC32 Checksum + UnicodeCom Variable UTF-8 version of the entry comment + + Currently Version is set to the number 1. If there is a need + to change this field, the version will be incremented. Changes + may not be backward compatible so this extra field should not be + used if the version is not recognized. + + The ComCRC32 is the standard zip CRC32 checksum of the Comment + field in the central directory header. This is used to verify that + the comment field has not changed since the Unicode Comment extra field + was created. This can happen if a utility changes the Comment field + but does not update the UTF-8 Comment extra field. If the CRC check + fails, this Unicode Comment extra field should be ignored and the + Comment field in the header used. + + The UnicodeCom field is the UTF-8 version of the entry comment field + in the header. As UnicodeCom is defined to be UTF-8, no UTF-8 byte + order mark (BOM) is used. The length of this field is determined by + subtracting the size of the previous fields from TSize. If both the + File Name and Comment fields are UTF-8, the new General Purpose Bit + Flag, bit 11 (Language encoding flag (EFS)), can be used to indicate + both the header File Name and Comment fields are UTF-8 and, in this + case, the Unicode Path and Unicode Comment extra fields are not + needed and should not be created. Note that, for backward + compatibility, bit 11 should only be used if the native character set + of the paths and comments being zipped up are already in UTF-8. The + same method, either bit 11 or extra fields, should be used in both + the local and central directory headers. + + + -Info-ZIP New Unix Extra Field: + ==================================== + + Currently stores Unix UIDs/GIDs up to 32 bits. + (Last Revision 20080509) + + Value Size Description + ----- ---- ----------- + (UnixN) 0x7875 Short tag for this extra block type ("ux") + TSize Short total data size for this block + Version 1 byte version of this extra field, currently 1 + UIDSize 1 byte Size of UID field + UID Variable UID for this entry + GIDSize 1 byte Size of GID field + GID Variable GID for this entry + + Currently Version is set to the number 1. If there is a need + to change this field, the version will be incremented. Changes + may not be backward compatible so this extra field should not be + used if the version is not recognized. + + UIDSize is the size of the UID field in bytes. This size should + match the size of the UID field on the target OS. + + UID is the UID for this entry in standard little endian format. + + GIDSize is the size of the GID field in bytes. This size should + match the size of the GID field on the target OS. + + GID is the GID for this entry in standard little endian format. + + If both the old 16-bit Unix extra field (tag 0x7855, Info-ZIP Unix) + and this extra field are present, the values in this extra field + supercede the values in that extra field. diff --git a/examples/Makefile.in b/examples/Makefile.in deleted file mode 100644 index 2c86fa7..0000000 --- a/examples/Makefile.in +++ /dev/null @@ -1,600 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 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@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -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@ -noinst_PROGRAMS = in-memory$(EXEEXT) -subdir = examples -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -PROGRAMS = $(noinst_PROGRAMS) -in_memory_SOURCES = in-memory.c -in_memory_OBJECTS = in_memory-in-memory.$(OBJEXT) -in_memory_DEPENDENCIES = ${top_builddir}/lib/libzip.la -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = in-memory.c -DIST_SOURCES = in-memory.c -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -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@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANFMT = @MANFMT@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -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@ -PKG_CONFIG_RPATH = @PKG_CONFIG_RPATH@ -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_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -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@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -in_memory_CPPFLAGS = -I${top_srcdir}/lib -I../lib -in_memory_LDADD = ${top_builddir}/lib/libzip.la -EXTRA_DIST = CMakeLists.txt windows-open.c -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 examples/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign examples/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): - -clean-noinstPROGRAMS: - @list='$(noinst_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 - -in-memory$(EXEEXT): $(in_memory_OBJECTS) $(in_memory_DEPENDENCIES) $(EXTRA_in_memory_DEPENDENCIES) - @rm -f in-memory$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(in_memory_OBJECTS) $(in_memory_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_memory-in-memory.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -in_memory-in-memory.o: in-memory.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(in_memory_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_memory-in-memory.o -MD -MP -MF $(DEPDIR)/in_memory-in-memory.Tpo -c -o in_memory-in-memory.o `test -f 'in-memory.c' || echo '$(srcdir)/'`in-memory.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/in_memory-in-memory.Tpo $(DEPDIR)/in_memory-in-memory.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='in-memory.c' object='in_memory-in-memory.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(in_memory_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_memory-in-memory.o `test -f 'in-memory.c' || echo '$(srcdir)/'`in-memory.c - -in_memory-in-memory.obj: in-memory.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(in_memory_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_memory-in-memory.obj -MD -MP -MF $(DEPDIR)/in_memory-in-memory.Tpo -c -o in_memory-in-memory.obj `if test -f 'in-memory.c'; then $(CYGPATH_W) 'in-memory.c'; else $(CYGPATH_W) '$(srcdir)/in-memory.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/in_memory-in-memory.Tpo $(DEPDIR)/in_memory-in-memory.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='in-memory.c' object='in_memory-in-memory.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(in_memory_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_memory-in-memory.obj `if test -f 'in-memory.c'; then $(CYGPATH_W) 'in-memory.c'; else $(CYGPATH_W) '$(srcdir)/in-memory.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - 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-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - 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" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -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) -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: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -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 clean-noinstPROGRAMS \ - 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-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: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ - ctags-am 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-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 tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# 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/install-sh b/install-sh deleted file mode 100755 index b12c0f7..0000000 --- a/install-sh +++ /dev/null @@ -1,301 +0,0 @@ -#!/bin/sh -# -# $NetBSD: install-sh.in,v 1.6 2012/01/11 13:07:31 hans Exp $ -# This script now also installs multiple files, but might choke on installing -# multiple files with spaces in the file names. -# -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). -# -# Copyright 1991 by the Massachusetts Institute of Technology -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -awkprog="${AWKPROG-awk}" -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -instcmd="$cpprog" -instflags="" -pathcompchmodcmd="$chmodprog 755" -chmodcmd="$chmodprog 755" -chowncmd="" -chgrpcmd="" -stripcmd="" -stripflags="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -msrc="" -dst="" -dir_arg="" -suffix="" -suffixfmt="" - -while [ x"$1" != x ]; do - case $1 in - -b) suffix=".old" - shift - continue;; - - -B) suffixfmt="$2" - shift - shift - continue;; - - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -m*) - chmodcmd="$chmodprog ${1#-m}" - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -S) stripcmd="$stripprog" - stripflags="-S $2 $stripflags" - shift - shift - continue;; - - -p) instflags="-p" - shift - continue;; - - *) if [ x"$msrc" = x ] - then - msrc="$dst" - else - msrc="$msrc $dst" - fi - src="$dst" - dst="$1" - shift - continue;; - esac -done - -if [ x"$dir_arg" = x ] -then - dstisfile="" - if [ ! -d "$dst" ] - then - if [ x"$msrc" = x"$src" ] - then - dstisfile=true - else - echo "install: destination is not a directory" - exit 1 - fi - fi -else - msrc="$msrc $dst" -fi - -if [ x"$msrc" = x ] -then - echo "install: no destination specified" - exit 1 -fi - -for srcarg in $msrc; do - -if [ x"$dir_arg" != x ]; then - - dstarg="$srcarg" -else - dstarg="$dst" - -# Waiting for this to be detected by the "$instcmd $srcarg $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f "$srcarg" ] - then - doinst="$instcmd $instflags" - elif [ -d "$srcarg" ] - then - echo "install: $srcarg: not a regular file" - exit 1 - elif [ "$srcarg" = "/dev/null" ] - then - doinst="$cpprog" - else - echo "install: $srcarg does not exist" - exit 1 - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d "$dstarg" ] - then - dstarg="$dstarg"/`basename "$srcarg"` - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo "$dstarg" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $doit $mkdirprog "${pathcomp}" - if [ x"$chowncmd" != x ]; then $doit $chowncmd "${pathcomp}"; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "${pathcomp}"; else true ; fi && - if [ x"$pathcompchmodcmd" != x ]; then $doit $pathcompchmodcmd "${pathcomp}"; else true ; fi - - else - true - fi - - pathcomp="${pathcomp}/" -done -fi - - if [ x"$dir_arg" != x ] - then - if [ -d "$dstarg" ]; then - true - else - $doit $mkdirprog "$dstarg" && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dstarg"; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dstarg"; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dstarg"; else true ; fi - fi - else - - if [ x"$dstisfile" = x ] - then - file=$srcarg - else - file=$dst - fi - - dstfile=`basename "$file"` - dstfinal="$dstdir/$dstfile" - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Make a backup file name in the proper directory. - case x$suffixfmt in - *%*) suffix=`echo x | - $awkprog -v bname="$dstfinal" -v fmt="$suffixfmt" ' - { cnt = 0; - do { - sfx = sprintf(fmt, cnt++); - name = bname sfx; - } while (system("test -f " name) == 0); - print sfx; }' -`;; - x) ;; - *) suffix="$suffixfmt";; - esac - dstbackup="$dstfinal$suffix" - -# Move or copy the file name to the temp name - - $doit $doinst $srcarg "$dsttmp" && - - trap "rm -f ${dsttmp}" 0 && - -# 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 $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $stripflags "$dsttmp"; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else true;fi && - -# Now rename the file to the real destination. - - if [ x"$suffix" != x ] && [ -f "$dstfinal" ] - then - $doit $mvcmd "$dstfinal" "$dstbackup" - else - $doit $rmcmd -f "$dstfinal" - fi && - $doit $mvcmd "$dsttmp" "$dstfinal" - fi - -done && - - -exit 0 diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index feebb62..1596f30 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -53,6 +53,7 @@ MACRO(CREATE_LIBTOOL_FILE _target _install_DIR) ENDMACRO(CREATE_LIBTOOL_FILE) SET(LIBZIP_SOURCES + gladman-fcrypt.c zip_add.c zip_add_dir.c zip_add_entry.c @@ -83,6 +84,7 @@ SET(LIBZIP_SOURCES zip_file_rename.c zip_file_replace.c zip_file_set_comment.c + zip_file_set_encryption.c zip_file_set_external_attributes.c zip_file_set_mtime.c zip_file_strerror.c @@ -92,6 +94,7 @@ SET(LIBZIP_SOURCES zip_fopen_index.c zip_fopen_index_encrypted.c zip_fread.c + zip_fseek.c zip_get_archive_comment.c zip_get_archive_flag.c zip_get_compression_implementation.c @@ -139,6 +142,8 @@ SET(LIBZIP_SOURCES zip_source_tell.c zip_source_tell_write.c zip_source_window.c + zip_source_winzip_aes_decode.c + zip_source_winzip_aes_encode.c zip_source_write.c zip_source_zip.c zip_source_zip_new.c @@ -156,6 +161,7 @@ SET(LIBZIP_SOURCES IF(WIN32) SET(LIBZIP_OPSYS_FILES + zip_random_win32.c zip_source_win32a.c zip_source_win32handle.c zip_source_win32utf8.c @@ -163,11 +169,13 @@ IF(WIN32) ) ELSE(WIN32) SET(LIBZIP_OPSYS_FILES + zip_random_unix.c zip_source_file.c ) ENDIF(WIN32) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/gladman-fcrypt ${CMAKE_CURRENT_BINARY_DIR}/..) # TODO: distribute instead? diff --git a/lib/Makefile.am b/lib/Makefile.am index bc9cb03..42ecccd 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,28 +1,35 @@ +# for 'make dist' +SUBDIRS= gladman-fcrypt + AM_CFLAGS= @CFLAG_VISIBILITY@ libincludedir = ${libdir}/@PACKAGE@/include lib_LTLIBRARIES = libzip.la -noinst_HEADERS = zipint.h +noinst_HEADERS = zipint.h gladman-fcrypt.h include_HEADERS = zip.h nodist_libinclude_HEADERS = zipconf.h # also update CMakeLists.txt when changing version -libzip_la_LDFLAGS=-no-undefined -version-info 4:0:0 +libzip_la_LDFLAGS=-no-undefined -version-info 5:0:0 +libzip_la_CPPFLAGS=-I$(srcdir)/gladman-fcrypt libzip_la_LIBADD=@LTLIBOBJS@ if WIN32_HOST -IO_SOURCES=\ +OS_SOURCES=\ + zip_random_win32.c \ zip_source_win32a.c \ zip_source_win32handle.c \ zip_source_win32utf8.c \ zip_source_win32w.c else -IO_SOURCES=\ +OS_SOURCES=\ + zip_random_unix.c \ zip_source_file.c endif libzip_la_SOURCES=\ - ${IO_SOURCES} \ + ${OS_SOURCES} \ + gladman-fcrypt.c \ zip_add.c \ zip_add_dir.c \ zip_add_entry.c \ @@ -53,6 +60,7 @@ libzip_la_SOURCES=\ zip_file_rename.c \ zip_file_replace.c \ zip_file_set_comment.c \ + zip_file_set_encryption.c \ zip_file_set_external_attributes.c \ zip_file_set_mtime.c \ zip_file_strerror.c \ @@ -62,6 +70,8 @@ libzip_la_SOURCES=\ zip_fopen_index.c \ zip_fopen_index_encrypted.c \ zip_fread.c \ + zip_fseek.c \ + zip_ftell.c \ zip_get_archive_comment.c \ zip_get_archive_flag.c \ zip_get_compression_implementation.c \ @@ -109,6 +119,8 @@ libzip_la_SOURCES=\ zip_source_tell.c \ zip_source_tell_write.c \ zip_source_window.c \ + zip_source_winzip_aes_decode.c \ + zip_source_winzip_aes_encode.c \ zip_source_write.c \ zip_source_zip.c \ zip_source_zip_new.c \ diff --git a/lib/Makefile.in b/lib/Makefile.in deleted file mode 100644 index e8ec221..0000000 --- a/lib/Makefile.in +++ /dev/null @@ -1,1022 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 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@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -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@ -subdir = lib -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ - $(noinst_HEADERS) $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/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__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" \ - "$(DESTDIR)$(libincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libzip_la_DEPENDENCIES = @LTLIBOBJS@ -am__libzip_la_SOURCES_DIST = zip_source_file.c zip_source_win32a.c \ - zip_source_win32handle.c zip_source_win32utf8.c \ - zip_source_win32w.c zip_add.c zip_add_dir.c zip_add_entry.c \ - zip_buffer.c zip_close.c zip_delete.c zip_dir_add.c \ - zip_dirent.c zip_discard.c zip_entry.c zip_err_str.c \ - zip_error.c zip_error_clear.c zip_error_get.c \ - zip_error_get_sys_type.c zip_error_strerror.c \ - zip_error_to_str.c zip_extra_field.c zip_extra_field_api.c \ - zip_fclose.c zip_fdopen.c zip_file_add.c \ - zip_file_error_clear.c zip_file_error_get.c \ - zip_file_get_comment.c zip_file_get_external_attributes.c \ - zip_file_get_offset.c zip_file_rename.c zip_file_replace.c \ - zip_file_set_comment.c zip_file_set_external_attributes.c \ - zip_file_set_mtime.c zip_file_strerror.c zip_filerange_crc.c \ - zip_fopen.c zip_fopen_encrypted.c zip_fopen_index.c \ - zip_fopen_index_encrypted.c zip_fread.c \ - zip_get_archive_comment.c zip_get_archive_flag.c \ - zip_get_compression_implementation.c \ - zip_get_encryption_implementation.c zip_get_file_comment.c \ - zip_get_num_entries.c zip_get_num_files.c zip_get_name.c \ - zip_hash.c zip_io_util.c zip_memdup.c zip_name_locate.c \ - zip_new.c zip_open.c zip_rename.c zip_replace.c \ - zip_set_archive_comment.c zip_set_archive_flag.c \ - zip_set_default_password.c zip_set_file_comment.c \ - zip_set_file_compression.c zip_set_name.c \ - zip_source_begin_write.c zip_source_buffer.c zip_source_call.c \ - zip_source_close.c zip_source_commit_write.c zip_source_crc.c \ - zip_source_deflate.c zip_source_error.c zip_source_filep.c \ - zip_source_free.c zip_source_function.c \ - zip_source_is_deleted.c zip_source_layered.c zip_source_open.c \ - zip_source_pkware.c zip_source_read.c zip_source_remove.c \ - zip_source_rollback_write.c zip_source_seek.c \ - zip_source_seek_write.c zip_source_stat.c \ - zip_source_supports.c zip_source_tell.c \ - zip_source_tell_write.c zip_source_window.c zip_source_write.c \ - zip_source_zip.c zip_source_zip_new.c zip_stat.c \ - zip_stat_index.c zip_stat_init.c zip_strerror.c zip_string.c \ - zip_unchange.c zip_unchange_all.c zip_unchange_archive.c \ - zip_unchange_data.c zip_utf-8.c -@WIN32_HOST_FALSE@am__objects_1 = zip_source_file.lo -@WIN32_HOST_TRUE@am__objects_1 = zip_source_win32a.lo \ -@WIN32_HOST_TRUE@ zip_source_win32handle.lo \ -@WIN32_HOST_TRUE@ zip_source_win32utf8.lo zip_source_win32w.lo -am_libzip_la_OBJECTS = $(am__objects_1) zip_add.lo zip_add_dir.lo \ - zip_add_entry.lo zip_buffer.lo zip_close.lo zip_delete.lo \ - zip_dir_add.lo zip_dirent.lo zip_discard.lo zip_entry.lo \ - zip_err_str.lo zip_error.lo zip_error_clear.lo \ - zip_error_get.lo zip_error_get_sys_type.lo \ - zip_error_strerror.lo zip_error_to_str.lo zip_extra_field.lo \ - zip_extra_field_api.lo zip_fclose.lo zip_fdopen.lo \ - zip_file_add.lo zip_file_error_clear.lo zip_file_error_get.lo \ - zip_file_get_comment.lo zip_file_get_external_attributes.lo \ - zip_file_get_offset.lo zip_file_rename.lo zip_file_replace.lo \ - zip_file_set_comment.lo zip_file_set_external_attributes.lo \ - zip_file_set_mtime.lo zip_file_strerror.lo \ - zip_filerange_crc.lo zip_fopen.lo zip_fopen_encrypted.lo \ - zip_fopen_index.lo zip_fopen_index_encrypted.lo zip_fread.lo \ - zip_get_archive_comment.lo zip_get_archive_flag.lo \ - zip_get_compression_implementation.lo \ - zip_get_encryption_implementation.lo zip_get_file_comment.lo \ - zip_get_num_entries.lo zip_get_num_files.lo zip_get_name.lo \ - zip_hash.lo zip_io_util.lo zip_memdup.lo zip_name_locate.lo \ - zip_new.lo zip_open.lo zip_rename.lo zip_replace.lo \ - zip_set_archive_comment.lo zip_set_archive_flag.lo \ - zip_set_default_password.lo zip_set_file_comment.lo \ - zip_set_file_compression.lo zip_set_name.lo \ - zip_source_begin_write.lo zip_source_buffer.lo \ - zip_source_call.lo zip_source_close.lo \ - zip_source_commit_write.lo zip_source_crc.lo \ - zip_source_deflate.lo zip_source_error.lo zip_source_filep.lo \ - zip_source_free.lo zip_source_function.lo \ - zip_source_is_deleted.lo zip_source_layered.lo \ - zip_source_open.lo zip_source_pkware.lo zip_source_read.lo \ - zip_source_remove.lo zip_source_rollback_write.lo \ - zip_source_seek.lo zip_source_seek_write.lo zip_source_stat.lo \ - zip_source_supports.lo zip_source_tell.lo \ - zip_source_tell_write.lo zip_source_window.lo \ - zip_source_write.lo zip_source_zip.lo zip_source_zip_new.lo \ - zip_stat.lo zip_stat_index.lo zip_stat_init.lo zip_strerror.lo \ - zip_string.lo zip_unchange.lo zip_unchange_all.lo \ - zip_unchange_archive.lo zip_unchange_data.lo zip_utf-8.lo -libzip_la_OBJECTS = $(am_libzip_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -libzip_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libzip_la_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(libzip_la_SOURCES) -DIST_SOURCES = $(am__libzip_la_SOURCES_DIST) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -HEADERS = $(include_HEADERS) $(nodist_libinclude_HEADERS) \ - $(noinst_HEADERS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ - mkstemp.c -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -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@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANFMT = @MANFMT@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -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@ -PKG_CONFIG_RPATH = @PKG_CONFIG_RPATH@ -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_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -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@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AM_CFLAGS = @CFLAG_VISIBILITY@ -libincludedir = ${libdir}/@PACKAGE@/include -lib_LTLIBRARIES = libzip.la -noinst_HEADERS = zipint.h -include_HEADERS = zip.h -nodist_libinclude_HEADERS = zipconf.h - -# also update CMakeLists.txt when changing version -libzip_la_LDFLAGS = -no-undefined -version-info 4:0:0 -libzip_la_LIBADD = @LTLIBOBJS@ -@WIN32_HOST_FALSE@IO_SOURCES = \ -@WIN32_HOST_FALSE@ zip_source_file.c - -@WIN32_HOST_TRUE@IO_SOURCES = \ -@WIN32_HOST_TRUE@ zip_source_win32a.c \ -@WIN32_HOST_TRUE@ zip_source_win32handle.c \ -@WIN32_HOST_TRUE@ zip_source_win32utf8.c \ -@WIN32_HOST_TRUE@ zip_source_win32w.c - -libzip_la_SOURCES = \ - ${IO_SOURCES} \ - zip_add.c \ - zip_add_dir.c \ - zip_add_entry.c \ - zip_buffer.c \ - zip_close.c \ - zip_delete.c \ - zip_dir_add.c \ - zip_dirent.c \ - zip_discard.c \ - zip_entry.c \ - zip_err_str.c \ - zip_error.c \ - zip_error_clear.c \ - zip_error_get.c \ - zip_error_get_sys_type.c \ - zip_error_strerror.c \ - zip_error_to_str.c \ - zip_extra_field.c \ - zip_extra_field_api.c \ - zip_fclose.c \ - zip_fdopen.c \ - zip_file_add.c \ - zip_file_error_clear.c \ - zip_file_error_get.c \ - zip_file_get_comment.c \ - zip_file_get_external_attributes.c \ - zip_file_get_offset.c \ - zip_file_rename.c \ - zip_file_replace.c \ - zip_file_set_comment.c \ - zip_file_set_external_attributes.c \ - zip_file_set_mtime.c \ - zip_file_strerror.c \ - zip_filerange_crc.c \ - zip_fopen.c \ - zip_fopen_encrypted.c \ - zip_fopen_index.c \ - zip_fopen_index_encrypted.c \ - zip_fread.c \ - zip_get_archive_comment.c \ - zip_get_archive_flag.c \ - zip_get_compression_implementation.c \ - zip_get_encryption_implementation.c \ - zip_get_file_comment.c \ - zip_get_num_entries.c \ - zip_get_num_files.c \ - zip_get_name.c \ - zip_hash.c \ - zip_io_util.c \ - zip_memdup.c \ - zip_name_locate.c \ - zip_new.c \ - zip_open.c \ - zip_rename.c \ - zip_replace.c \ - zip_set_archive_comment.c \ - zip_set_archive_flag.c \ - zip_set_default_password.c \ - zip_set_file_comment.c \ - zip_set_file_compression.c \ - zip_set_name.c \ - zip_source_begin_write.c \ - zip_source_buffer.c \ - zip_source_call.c \ - zip_source_close.c \ - zip_source_commit_write.c \ - zip_source_crc.c \ - zip_source_deflate.c \ - zip_source_error.c \ - zip_source_filep.c \ - zip_source_free.c \ - zip_source_function.c \ - zip_source_is_deleted.c \ - zip_source_layered.c \ - zip_source_open.c \ - zip_source_pkware.c \ - zip_source_read.c \ - zip_source_remove.c \ - zip_source_rollback_write.c \ - zip_source_seek.c \ - zip_source_seek_write.c \ - zip_source_stat.c \ - zip_source_supports.c \ - zip_source_tell.c \ - zip_source_tell_write.c \ - zip_source_window.c \ - zip_source_write.c \ - zip_source_zip.c \ - zip_source_zip_new.c \ - zip_stat.c \ - zip_stat_index.c \ - zip_stat_init.c \ - zip_strerror.c \ - zip_string.c \ - zip_unchange.c \ - zip_unchange_all.c \ - zip_unchange_archive.c \ - zip_unchange_data.c \ - zip_utf-8.c - -BUILT_SOURCES = zipconf.h -CLEANFILES = ${BUILT_SOURCES} -EXTRA_DIST = CMakeLists.txt \ - compat.h \ - make_zip_err_str.sh \ - make_zipconf.sh \ - zip_source_win32a.c \ - zip_source_win32handle.c \ - zip_source_win32utf8.c \ - zip_source_win32w.c \ - zipwin32.h - -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) 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 lib/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign lib/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) - @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 " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - 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)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -libzip.la: $(libzip_la_OBJECTS) $(libzip_la_DEPENDENCIES) $(EXTRA_libzip_la_DEPENDENCIES) - $(AM_V_CCLD)$(libzip_la_LINK) -rpath $(libdir) $(libzip_la_OBJECTS) $(libzip_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mkstemp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_add.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_add_dir.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_add_entry.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_buffer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_close.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_delete.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_dir_add.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_dirent.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_discard.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_entry.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_err_str.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_error.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_error_clear.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_error_get.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_error_get_sys_type.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_error_strerror.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_error_to_str.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_extra_field.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_extra_field_api.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_fclose.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_fdopen.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_add.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_error_clear.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_error_get.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_get_comment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_get_external_attributes.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_get_offset.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_rename.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_replace.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_set_comment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_set_external_attributes.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_set_mtime.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_file_strerror.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_filerange_crc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_fopen.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_fopen_encrypted.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_fopen_index.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_fopen_index_encrypted.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_fread.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_get_archive_comment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_get_archive_flag.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_get_compression_implementation.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_get_encryption_implementation.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_get_file_comment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_get_name.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_get_num_entries.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_get_num_files.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_hash.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_io_util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_memdup.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_name_locate.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_new.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_open.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_rename.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_replace.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_set_archive_comment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_set_archive_flag.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_set_default_password.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_set_file_comment.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_set_file_compression.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_set_name.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_begin_write.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_buffer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_call.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_close.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_commit_write.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_crc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_deflate.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_error.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_file.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_filep.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_free.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_function.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_is_deleted.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_layered.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_open.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_pkware.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_read.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_remove.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_rollback_write.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_seek.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_seek_write.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_stat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_supports.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_tell.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_tell_write.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_win32a.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_win32handle.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_win32utf8.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_win32w.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_window.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_write.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_zip.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_source_zip_new.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_stat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_stat_index.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_stat_init.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_strerror.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_string.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_unchange.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_unchange_all.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_unchange_archive.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_unchange_data.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zip_utf-8.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ - fi; \ - 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|^.*/||'`; \ - dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) -install-nodist_libincludeHEADERS: $(nodist_libinclude_HEADERS) - @$(NORMAL_INSTALL) - @list='$(nodist_libinclude_HEADERS)'; test -n "$(libincludedir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(libincludedir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libincludedir)" || exit 1; \ - fi; \ - 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)$(libincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(libincludedir)" || exit $$?; \ - done - -uninstall-nodist_libincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_libinclude_HEADERS)'; test -n "$(libincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(libincludedir)'; $(am__uninstall_files_from_dir) - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - 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-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - 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" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -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: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(libincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) 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: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -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." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -rf $(DEPDIR) ./$(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 \ - install-nodist_libincludeHEADERS - -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) ./$(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 \ - uninstall-nodist_libincludeHEADERS - -.MAKE: all check install install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ - ctags-am 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-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-nodist_libincludeHEADERS 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 tags-am uninstall uninstall-am uninstall-includeHEADERS \ - uninstall-libLTLIBRARIES uninstall-nodist_libincludeHEADERS - -.PRECIOUS: Makefile - - -zip_err_str.c: zip.h make_zip_err_str.sh - sh $(srcdir)/make_zip_err_str.sh $(srcdir)/zip.h zip_err_str.c - -zipconf.h: ${top_builddir}/config.h make_zipconf.sh - sh ${srcdir}/make_zipconf.sh ${top_builddir}/config.h zipconf.h - -# 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/lib/compat.h b/lib/compat.h index 4cc6703..4c9e3a0 100644 --- a/lib/compat.h +++ b/lib/compat.h @@ -101,6 +101,12 @@ typedef char bool; #if !defined(HAVE__SETMODE) && defined(HAVE_SETMODE) #define _setmode setmode #endif +#if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64) +#define strtoll _strtoi64 +#endif +#if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64) +#define strtoull _strtoui64 +#endif #endif #ifndef HAVE_FSEEKO diff --git a/lib/gladman-fcrypt.c b/lib/gladman-fcrypt.c new file mode 100644 index 0000000..8488ae4 --- /dev/null +++ b/lib/gladman-fcrypt.c @@ -0,0 +1,44 @@ +/* + gladman-fcrypt.c -- wrapper functions for Dr Gladman's AES functions + Copyright (C) 2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 BUILDING_FCRYPT + +#include "gladman-fcrypt.h" + +#include "gladman-fcrypt/aescrypt.c" +#include "gladman-fcrypt/aeskey.c" +#include "gladman-fcrypt/aestab.c" +#include "gladman-fcrypt/fileenc.c" +#include "gladman-fcrypt/hmac.c" +#include "gladman-fcrypt/pwd2key.c" +#include "gladman-fcrypt/sha1.c" diff --git a/lib/gladman-fcrypt.h b/lib/gladman-fcrypt.h new file mode 100644 index 0000000..fc61b67 --- /dev/null +++ b/lib/gladman-fcrypt.h @@ -0,0 +1,49 @@ +/* + gladman-fcrypt.h -- wrapper functions for Dr Gladman's AES functions + Copyright (C) 2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 HAD_GLADMAN_FCRYPT_H +#define HAD_GLADMAN_FCRYPT_H + +/* implementation fetched from + * http://173.254.28.24/~brgladma//oldsite/cryptography_technology/fileencrypt/files.zip + * + * Files dated 01-27-2004 except main.c dated 11-18-2008. + */ + +#include "zipint.h" + +#define INTERNAL static + +#include "fileenc.h" + +#endif /* HAD_GLADMAN_FCRYPT_H */ diff --git a/lib/gladman-fcrypt/Makefile.am b/lib/gladman-fcrypt/Makefile.am new file mode 100644 index 0000000..9714d6b --- /dev/null +++ b/lib/gladman-fcrypt/Makefile.am @@ -0,0 +1,14 @@ +EXTRA_DIST= \ + aes.h \ + aescrypt.c \ + aeskey.c \ + aesopt.h \ + aestab.c \ + fileenc.c \ + fileenc.h \ + hmac.c \ + hmac.h \ + pwd2key.c \ + pwd2key.h \ + sha1.c \ + sha1.h diff --git a/lib/gladman-fcrypt/aes.h b/lib/gladman-fcrypt/aes.h new file mode 100644 index 0000000..d8a5f93 --- /dev/null +++ b/lib/gladman-fcrypt/aes.h @@ -0,0 +1,128 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file contains the definitions required to use AES and Rijndael in C. +*/ + +#ifndef _AES_H +#define _AES_H + +#if defined(__cplusplus) +extern "C" +{ +#if 0 +} +#endif +#endif + +/* If a table pointer is needed in the AES context, include the define */ +/* #define AES_TABLE_PTR */ + +#include "config.h" + +typedef zip_uint8_t aes_08t; +typedef zip_uint32_t aes_32t; + +/* This BLOCK_SIZE is in BYTES. It can have the values 16, 24, 32 or */ +/* undefined for use with aescrypt.c and aeskey.c, or 16, 20, 24, 28, */ +/* 32 or undefined for use with aescrypp.c and aeskeypp.c. When the */ +/* BLOCK_SIZE is left undefined a version that provides a dynamically */ +/* variable block size is produced but this is MUCH slower. */ + +#define BLOCK_SIZE 16 + +/* key schedule length (in 32-bit words) */ + +#if !defined(BLOCK_SIZE) +#define KS_LENGTH 128 +#else +#define KS_LENGTH (4 * BLOCK_SIZE) +#endif + +typedef unsigned int aes_fret; /* type for function return value */ +#define aes_bad 0 /* bad function return value */ +#define aes_good 1 /* good function return value */ +#ifndef AES_DLL /* implement normal or DLL functions */ +#define aes_rval aes_fret +#else +#define aes_rval aes_fret __declspec(dllexport) _stdcall +#endif + +typedef struct /* the AES context for encryption */ +{ aes_32t k_sch[KS_LENGTH]; /* the encryption key schedule */ + aes_32t n_rnd; /* the number of cipher rounds */ + aes_32t n_blk; /* the number of bytes in the state */ +#if defined(AES_TABLE_PTR) /* where global variables are not */ + void *t_ptr; /* available this pointer is used */ +#endif /* to point to the fixed tables */ +} aes_ctx; + +/* The block length (blen) is input in bytes when it is in the range */ +/* 16 <= blen <= 32 or in bits when in the range 128 <= blen <= 256 */ +/* Only 16 bytes (128 bits) is legal for AES but the files aescrypt.c */ +/* and aeskey.c provide support for 16, 24 and 32 byte (128, 192 and */ +/* 256 bit) blocks while aescrypp.c and aeskeypp.c provide support for */ +/* 16, 20, 24, 28 and 32 byte (128, 160, 192, 224 and 256 bit) blocks. */ +/* The value aes_good is returned if the requested block size is legal, */ +/* otherwise aes_bad is returned. */ + +#if !defined(BLOCK_SIZE) +INTERNAL aes_rval aes_set_block_size(unsigned int blen, aes_ctx cx[1]); +#endif + +/* The key length (klen) is input in bytes when it is in the range */ +/* 16 <= klen <= 32 or in bits when in the range 128 <= klen <= 256 */ +/* The files aescrypt.c and aeskey.c provide support for 16, 24 and */ +/* 32 byte (128, 192 and 256 bit) keys while aescrypp.c and aeskeypp.c */ +/* provide support for 16, 20, 24, 28 and 32 byte (128, 160, 192, 224 */ +/* and 256 bit) keys. The value aes_good is returned if the requested */ +/* key size is legal, otherwise aes_bad is returned. */ + +#ifdef BUILDING_FCRYPT +INTERNAL aes_rval aes_set_encrypt_key(const unsigned char in_key[], + unsigned int klen, aes_ctx cx[1]); +INTERNAL aes_rval aes_encrypt_block(const unsigned char in_blk[], + unsigned char out_blk[], const aes_ctx cx[1]); +#endif + +#if 0 /* not used */ +INTERNAL aes_rval aes_set_decrypt_key(const unsigned char in_key[], + unsigned int klen, aes_ctx cx[1]); +INTERNAL aes_rval aes_decrypt_block(const unsigned char in_blk[], + unsigned char out_blk[], const aes_ctx cx[1]); +#endif + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/lib/gladman-fcrypt/aescrypt.c b/lib/gladman-fcrypt/aescrypt.c new file mode 100644 index 0000000..b2c6c84 --- /dev/null +++ b/lib/gladman-fcrypt/aescrypt.c @@ -0,0 +1,450 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file contains the code for implementing encryption and decryption + for AES (Rijndael) for block and key sizes of 16, 24 and 32 bytes. It + can optionally be replaced by code written in assembler using NASM. +*/ + +#include "aesopt.h" + +#if defined(__cplusplus) +extern "C" +{ +#endif + +#if defined(BLOCK_SIZE) && (BLOCK_SIZE & 7) +#error An illegal block size has been specified. +#endif + +#define unused 77 /* Sunset Strip */ + +#define si(y,x,k,c) (s(y,c) = word_in(x + 4 * c) ^ k[c]) +#define so(y,x,c) word_out(y + 4 * c, s(x,c)) + +#if BLOCK_SIZE == 16 + +#if defined(ARRAYS) +#define locals(y,x) x[4],y[4] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,y##0,y##1,y##2,y##3 + /* + the following defines prevent the compiler requiring the declaration + of generated but unused variables in the fwd_var and inv_var macros + */ +#define b04 unused +#define b05 unused +#define b06 unused +#define b07 unused +#define b14 unused +#define b15 unused +#define b16 unused +#define b17 unused +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3) + +#elif BLOCK_SIZE == 24 + +#if defined(ARRAYS) +#define locals(y,x) x[6],y[6] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5, \ + y##0,y##1,y##2,y##3,y##4,y##5 +#define b06 unused +#define b07 unused +#define b16 unused +#define b17 unused +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); \ + s(y,4) = s(x,4); s(y,5) = s(x,5); +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); \ + si(y,x,k,3); si(y,x,k,4); si(y,x,k,5) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); \ + so(y,x,3); so(y,x,4); so(y,x,5) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); \ + rm(y,x,k,3); rm(y,x,k,4); rm(y,x,k,5) +#else + +#if defined(ARRAYS) +#define locals(y,x) x[8],y[8] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5,x##6,x##7, \ + y##0,y##1,y##2,y##3,y##4,y##5,y##6,y##7 +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); \ + s(y,4) = s(x,4); s(y,5) = s(x,5); \ + s(y,6) = s(x,6); s(y,7) = s(x,7); + +#if BLOCK_SIZE == 32 + +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3); \ + si(y,x,k,4); si(y,x,k,5); si(y,x,k,6); si(y,x,k,7) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3); \ + so(y,x,4); so(y,x,5); so(y,x,6); so(y,x,7) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3); \ + rm(y,x,k,4); rm(y,x,k,5); rm(y,x,k,6); rm(y,x,k,7) +#else + +#define state_in(y,x,k) \ +switch(nc) \ +{ case 8: si(y,x,k,7); si(y,x,k,6); \ + case 6: si(y,x,k,5); si(y,x,k,4); \ + case 4: si(y,x,k,3); si(y,x,k,2); \ + si(y,x,k,1); si(y,x,k,0); \ +} + +#define state_out(y,x) \ +switch(nc) \ +{ case 8: so(y,x,7); so(y,x,6); \ + case 6: so(y,x,5); so(y,x,4); \ + case 4: so(y,x,3); so(y,x,2); \ + so(y,x,1); so(y,x,0); \ +} + +#if defined(FAST_VARIABLE) + +#define round(rm,y,x,k) \ +switch(nc) \ +{ case 8: rm(y,x,k,7); rm(y,x,k,6); \ + rm(y,x,k,5); rm(y,x,k,4); \ + rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ + case 6: rm(y,x,k,5); rm(y,x,k,4); \ + rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ + case 4: rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ +} +#else + +#define round(rm,y,x,k) \ +switch(nc) \ +{ case 8: rm(y,x,k,7); rm(y,x,k,6); \ + case 6: rm(y,x,k,5); rm(y,x,k,4); \ + case 4: rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ +} + +#endif + +#endif +#endif + +#if defined(ENCRYPTION) && !defined(AES_ASM) + +/* Given the column (c) of the output state variable, the following + macros give the input state variables which are needed in its + computation for each row (r) of the state. All the alternative + macros give the same end values but expand into different ways + of calculating these values. In particular the complex macro + used for dynamically variable block sizes is designed to expand + to a compile time constant whenever possible but will expand to + conditional clauses on some branches (I am grateful to Frank + Yellin for this construction) +*/ + +#if defined(BLOCK_SIZE) +#if BLOCK_SIZE == 16 +# define fwd_var(x,r,c) s(x,((r+c)%nc)) +#else +#define fwd_var(x,r,c) s(x,(r+c+(((r>1)&&(nc>9-r))?1:0))%nc) +#endif +#else +#define fwd_var(x,r,c)\ + ( r == 0 ? s(x,c) \ + : r == 1 ? \ + ( c == 0 ? s(x,1) \ + : c == 1 ? s(x,2) \ + : c == 2 ? s(x,3) \ + : c == 3 ? nc == 4 ? s(x,0) : s(x,4) \ + : c == 4 ? s(x,5) \ + : c == 5 ? nc == 8 ? s(x,6) : s(x,0) \ + : c == 6 ? s(x,7) : s(x,0)) \ + : r == 2 ? \ + ( c == 0 ? nc == 8 ? s(x,3) : s(x,2) \ + : c == 1 ? nc == 8 ? s(x,4) : s(x,3) \ + : c == 2 ? nc == 4 ? s(x,0) : nc == 8 ? s(x,5) : s(x,4) \ + : c == 3 ? nc == 4 ? s(x,1) : nc == 8 ? s(x,6) : s(x,5) \ + : c == 4 ? nc == 8 ? s(x,7) : s(x,0) \ + : c == 5 ? nc == 8 ? s(x,0) : s(x,1) \ + : c == 6 ? s(x,1) : s(x,2)) \ + : \ + ( c == 0 ? nc == 8 ? s(x,4) : s(x,3) \ + : c == 1 ? nc == 4 ? s(x,0) : nc == 8 ? s(x,5) : s(x,4) \ + : c == 2 ? nc == 4 ? s(x,1) : nc == 8 ? s(x,6) : s(x,5) \ + : c == 3 ? nc == 4 ? s(x,2) : nc == 8 ? s(x,7) : s(x,0) \ + : c == 4 ? nc == 8 ? s(x,0) : s(x,1) \ + : c == 5 ? nc == 8 ? s(x,1) : s(x,2) \ + : c == 6 ? s(x,2) : s(x,3))) +#endif + +#if defined(FT4_SET) +#undef dec_fmvars +#define dec_fmvars +#define fwd_rnd(y,x,k,c) (s(y,c) = (k)[c] ^ four_tables(x,t_use(f,n),fwd_var,rf1,c)) +#elif defined(FT1_SET) +#undef dec_fmvars +#define dec_fmvars +#define fwd_rnd(y,x,k,c) (s(y,c) = (k)[c] ^ one_table(x,upr,t_use(f,n),fwd_var,rf1,c)) +#else +#define fwd_rnd(y,x,k,c) (s(y,c) = fwd_mcol(no_table(x,t_use(s,box),fwd_var,rf1,c)) ^ (k)[c]) +#endif + +#if defined(FL4_SET) +#define fwd_lrnd(y,x,k,c) (s(y,c) = (k)[c] ^ four_tables(x,t_use(f,l),fwd_var,rf1,c)) +#elif defined(FL1_SET) +#define fwd_lrnd(y,x,k,c) (s(y,c) = (k)[c] ^ one_table(x,ups,t_use(f,l),fwd_var,rf1,c)) +#else +#define fwd_lrnd(y,x,k,c) (s(y,c) = no_table(x,t_use(s,box),fwd_var,rf1,c) ^ (k)[c]) +#endif + +INTERNAL aes_rval aes_encrypt_block(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) +{ aes_32t locals(b0, b1); + const aes_32t *kp = cx->k_sch; + dec_fmvars /* declare variables for fwd_mcol() if needed */ + + if(!(cx->n_blk & 1)) return aes_bad; + + state_in(b0, in_blk, kp); + +#if (ENC_UNROLL == FULL) + + kp += (cx->n_rnd - 9) * nc; + + /*lint -e{616} control flows into case/default */ + switch(cx->n_rnd) + { + case 14: + round(fwd_rnd, b1, b0, kp - 4 * nc); + round(fwd_rnd, b0, b1, kp - 3 * nc); + /* fallthrough */ + case 12: + round(fwd_rnd, b1, b0, kp - 2 * nc); + round(fwd_rnd, b0, b1, kp - nc); + /* fallthrough */ + case 10: + round(fwd_rnd, b1, b0, kp ); + round(fwd_rnd, b0, b1, kp + nc); + round(fwd_rnd, b1, b0, kp + 2 * nc); + round(fwd_rnd, b0, b1, kp + 3 * nc); + round(fwd_rnd, b1, b0, kp + 4 * nc); + round(fwd_rnd, b0, b1, kp + 5 * nc); + round(fwd_rnd, b1, b0, kp + 6 * nc); + round(fwd_rnd, b0, b1, kp + 7 * nc); + round(fwd_rnd, b1, b0, kp + 8 * nc); + round(fwd_lrnd, b0, b1, kp + 9 * nc); + /* fallthrough */ + default: + ; + } +#else + +#if (ENC_UNROLL == PARTIAL) + { aes_32t rnd; + for(rnd = 0; rnd < (cx->n_rnd >> 1) - 1; ++rnd) + { + kp += nc; + round(fwd_rnd, b1, b0, kp); + kp += nc; + round(fwd_rnd, b0, b1, kp); + } + kp += nc; + round(fwd_rnd, b1, b0, kp); +#else + { aes_32t rnd, *p0 = b0, *p1 = b1, *pt; + for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) + { + kp += nc; + round(fwd_rnd, p1, p0, kp); + pt = p0, p0 = p1, p1 = pt; + } +#endif + kp += nc; + round(fwd_lrnd, b0, b1, kp); + } +#endif + + state_out(out_blk, b0); + return aes_good; +} + +#endif + +#if defined(DECRYPTION) && !defined(AES_ASM) + +/* Given the column (c) of the output state variable, the following + macros give the input state variables which are needed in its + computation for each row (r) of the state. All the alternative + macros give the same end values but expand into different ways + of calculating these values. In particular the complex macro + used for dynamically variable block sizes is designed to expand + to a compile time constant whenever possible but will expand to + conditional clauses on some branches (I am grateful to Frank + Yellin for this construction) +*/ + +#if defined(BLOCK_SIZE) +#if BLOCK_SIZE == 16 +#define inv_var(x,r,c) s(x,((4+c-r)%nc)) +#else +#define inv_var(x,r,c) s(x,(840+c-r-(((r>1)&&(nc>9-r))?1:0))%nc) +#endif +#else +#define inv_var(x,r,c)\ + ( r == 0 ? s(x,c) \ + : r == 1 ? \ + ( c == 0 ? nc == 4 ? s(x,3) : nc == 8 ? s(x,7) : s(x,5) \ + : c == 1 ? s(x,0) \ + : c == 2 ? s(x,1) \ + : c == 3 ? s(x,2) \ + : c == 4 ? s(x,3) \ + : c == 5 ? s(x,4) \ + : c == 6 ? s(x,5) : s(x,6)) \ + : r == 2 ? \ + ( c == 0 ? nc == 4 ? s(x,2) : nc == 8 ? s(x,5) : s(x,4) \ + : c == 1 ? nc == 4 ? s(x,3) : nc == 8 ? s(x,6) : s(x,5) \ + : c == 2 ? nc == 8 ? s(x,7) : s(x,0) \ + : c == 3 ? nc == 8 ? s(x,0) : s(x,1) \ + : c == 4 ? nc == 8 ? s(x,1) : s(x,2) \ + : c == 5 ? nc == 8 ? s(x,2) : s(x,3) \ + : c == 6 ? s(x,3) : s(x,4)) \ + : \ + ( c == 0 ? nc == 4 ? s(x,1) : nc == 8 ? s(x,4) : s(x,3) \ + : c == 1 ? nc == 4 ? s(x,2) : nc == 8 ? s(x,5) : s(x,4) \ + : c == 2 ? nc == 4 ? s(x,3) : nc == 8 ? s(x,6) : s(x,5) \ + : c == 3 ? nc == 8 ? s(x,7) : s(x,0) \ + : c == 4 ? nc == 8 ? s(x,0) : s(x,1) \ + : c == 5 ? nc == 8 ? s(x,1) : s(x,2) \ + : c == 6 ? s(x,2) : s(x,3))) +#endif + +#if defined(IT4_SET) +#undef dec_imvars +#define dec_imvars +#define inv_rnd(y,x,k,c) (s(y,c) = (k)[c] ^ four_tables(x,t_use(i,n),inv_var,rf1,c)) +#elif defined(IT1_SET) +#undef dec_imvars +#define dec_imvars +#define inv_rnd(y,x,k,c) (s(y,c) = (k)[c] ^ one_table(x,upr,t_use(i,n),inv_var,rf1,c)) +#else +#define inv_rnd(y,x,k,c) (s(y,c) = inv_mcol(no_table(x,t_use(i,box),inv_var,rf1,c) ^ (k)[c])) +#endif + +#if defined(IL4_SET) +#define inv_lrnd(y,x,k,c) (s(y,c) = (k)[c] ^ four_tables(x,t_use(i,l),inv_var,rf1,c)) +#elif defined(IL1_SET) +#define inv_lrnd(y,x,k,c) (s(y,c) = (k)[c] ^ one_table(x,ups,t_use(i,l),inv_var,rf1,c)) +#else +#define inv_lrnd(y,x,k,c) (s(y,c) = no_table(x,t_use(i,box),inv_var,rf1,c) ^ (k)[c]) +#endif + +INTERNAL aes_rval aes_decrypt_block(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) +{ aes_32t locals(b0, b1); + const aes_32t *kp = cx->k_sch + nc * cx->n_rnd; + dec_imvars /* declare variables for inv_mcol() if needed */ + + if(!(cx->n_blk & 2)) return aes_bad; + + state_in(b0, in_blk, kp); + +#if (DEC_UNROLL == FULL) + + kp = cx->k_sch + 9 * nc; + + /*lint -e{616} control flows into case/default */ + switch(cx->n_rnd) + { + case 14: + round(inv_rnd, b1, b0, kp + 4 * nc); + round(inv_rnd, b0, b1, kp + 3 * nc); + case 12: + round(inv_rnd, b1, b0, kp + 2 * nc); + round(inv_rnd, b0, b1, kp + nc ); + case 10: + round(inv_rnd, b1, b0, kp ); + round(inv_rnd, b0, b1, kp - nc); + round(inv_rnd, b1, b0, kp - 2 * nc); + round(inv_rnd, b0, b1, kp - 3 * nc); + round(inv_rnd, b1, b0, kp - 4 * nc); + round(inv_rnd, b0, b1, kp - 5 * nc); + round(inv_rnd, b1, b0, kp - 6 * nc); + round(inv_rnd, b0, b1, kp - 7 * nc); + round(inv_rnd, b1, b0, kp - 8 * nc); + round(inv_lrnd, b0, b1, kp - 9 * nc); + default: + ; + } +#else + +#if (DEC_UNROLL == PARTIAL) + { aes_32t rnd; + for(rnd = 0; rnd < (cx->n_rnd >> 1) - 1; ++rnd) + { + kp -= nc; + round(inv_rnd, b1, b0, kp); + kp -= nc; + round(inv_rnd, b0, b1, kp); + } + kp -= nc; + round(inv_rnd, b1, b0, kp); +#else + { aes_32t rnd, *p0 = b0, *p1 = b1, *pt; + for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) + { + kp -= nc; + round(inv_rnd, p1, p0, kp); + pt = p0, p0 = p1, p1 = pt; + } +#endif + kp -= nc; + round(inv_lrnd, b0, b1, kp); + } +#endif + + state_out(out_blk, b0); + return aes_good; +} + +#endif + +#if defined(__cplusplus) +} +#endif diff --git a/lib/gladman-fcrypt/aeskey.c b/lib/gladman-fcrypt/aeskey.c new file mode 100644 index 0000000..e03b48f --- /dev/null +++ b/lib/gladman-fcrypt/aeskey.c @@ -0,0 +1,416 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file contains the code for implementing the key schedule for AES and + Rijndael for block and key sizes of 16, 24, and 32 bytes. +*/ + +#include "aesopt.h" + +#if defined(__cplusplus) +extern "C" +{ +#endif + +#if defined(BLOCK_SIZE) && (BLOCK_SIZE & 7) +#error An illegal block size has been specified. +#endif + +/* Subroutine to set the block size (if variable). The value can be + in bytes, with legal values of 16, 24 and 32, or in bits, with + legal values of 128, 192 and 256. +*/ + +#if !defined(BLOCK_SIZE) + +INTERNAL aes_rval aes_set_block_size(unsigned int blen, aes_ctx cx[1]) +{ +#if !defined(FIXED_TABLES) +#ifdef GLOBALS + if(!t_use(in,it)) gen_tabs(); +#else + if(!cx->t_ptr || !t_use(in,it)) gen_tabs(cx); +#endif +#endif + if(((blen & 7) || blen < 16 || blen > 32) && ((blen & 63) || blen < 128 || blen > 256)) + { + cx->n_blk = 0; return aes_bad; + } + else + { + cx->n_blk = blen >> (blen < 128 ? 0 : 3); return aes_good; + } +} + +#endif + +/* Initialise the key schedule from the user supplied key. The key + length can be specified in bytes, with legal values of 16, 24 + and 32, or in bits, with legal values of 128, 192 and 256. These + values correspond with Nk values of 4, 6 and 8 respectively. + + The following macros implement a single cycle in the key + schedule generation process. The number of cycles needed + for each cx->n_col and nk value is: + + nk = 4 5 6 7 8 + ------------------------------ + cx->n_col = 4 10 9 8 7 7 + cx->n_col = 5 14 11 10 9 9 + cx->n_col = 6 19 15 12 11 11 + cx->n_col = 7 21 19 16 13 14 + cx->n_col = 8 29 23 19 17 14 +*/ + +#define ke4(k,i) \ +{ k[4*(i)+4] = ss[0] ^= ls_box(ss[3],3) ^ t_use(r,c)[i]; k[4*(i)+5] = ss[1] ^= ss[0]; \ + k[4*(i)+6] = ss[2] ^= ss[1]; k[4*(i)+7] = ss[3] ^= ss[2]; \ +} +#define kel4(k,i) \ +{ k[4*(i)+4] = ss[0] ^= ls_box(ss[3],3) ^ t_use(r,c)[i]; k[4*(i)+5] = ss[1] ^= ss[0]; \ + k[4*(i)+6] = ss[2] ^= ss[1]; k[4*(i)+7] = ss[3] ^= ss[2]; \ +} + +#define ke6(k,i) \ +{ k[6*(i)+ 6] = ss[0] ^= ls_box(ss[5],3) ^ t_use(r,c)[i]; k[6*(i)+ 7] = ss[1] ^= ss[0]; \ + k[6*(i)+ 8] = ss[2] ^= ss[1]; k[6*(i)+ 9] = ss[3] ^= ss[2]; \ + k[6*(i)+10] = ss[4] ^= ss[3]; k[6*(i)+11] = ss[5] ^= ss[4]; \ +} +#define kel6(k,i) \ +{ k[6*(i)+ 6] = ss[0] ^= ls_box(ss[5],3) ^ t_use(r,c)[i]; k[6*(i)+ 7] = ss[1] ^= ss[0]; \ + k[6*(i)+ 8] = ss[2] ^= ss[1]; k[6*(i)+ 9] = ss[3] ^= ss[2]; \ +} + +#define ke8(k,i) \ +{ k[8*(i)+ 8] = ss[0] ^= ls_box(ss[7],3) ^ t_use(r,c)[i]; k[8*(i)+ 9] = ss[1] ^= ss[0]; \ + k[8*(i)+10] = ss[2] ^= ss[1]; k[8*(i)+11] = ss[3] ^= ss[2]; \ + k[8*(i)+12] = ss[4] ^= ls_box(ss[3],0); k[8*(i)+13] = ss[5] ^= ss[4]; \ + k[8*(i)+14] = ss[6] ^= ss[5]; k[8*(i)+15] = ss[7] ^= ss[6]; \ +} +#define kel8(k,i) \ +{ k[8*(i)+ 8] = ss[0] ^= ls_box(ss[7],3) ^ t_use(r,c)[i]; k[8*(i)+ 9] = ss[1] ^= ss[0]; \ + k[8*(i)+10] = ss[2] ^= ss[1]; k[8*(i)+11] = ss[3] ^= ss[2]; \ +} + +#if defined(ENCRYPTION_KEY_SCHEDULE) + +INTERNAL aes_rval aes_set_encrypt_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) +{ aes_32t ss[8]; + +#if !defined(FIXED_TABLES) +#ifdef GLOBALS + if(!t_use(in,it)) gen_tabs(); +#else + if(!cx->t_ptr || !t_use(in,it)) gen_tabs(cx); +#endif +#endif + +#if !defined(BLOCK_SIZE) + if(!cx->n_blk) cx->n_blk = 16; +#else + cx->n_blk = BLOCK_SIZE; +#endif + + if(((klen & 7) || klen < 16 || klen > 32) && ((klen & 63) || klen < 128 || klen > 256)) + { + cx->n_rnd = 0; return aes_bad; + } + + klen >>= (klen < 128 ? 2 : 5); + cx->n_blk = (cx->n_blk & ~3U) | 1; + + cx->k_sch[0] = ss[0] = word_in(in_key ); + cx->k_sch[1] = ss[1] = word_in(in_key + 4); + cx->k_sch[2] = ss[2] = word_in(in_key + 8); + cx->k_sch[3] = ss[3] = word_in(in_key + 12); + +#if (BLOCK_SIZE == 16) && (ENC_UNROLL != NONE) + + switch(klen) + { + case 4: + ke4(cx->k_sch, 0); ke4(cx->k_sch, 1); + ke4(cx->k_sch, 2); ke4(cx->k_sch, 3); + ke4(cx->k_sch, 4); ke4(cx->k_sch, 5); + ke4(cx->k_sch, 6); ke4(cx->k_sch, 7); + ke4(cx->k_sch, 8); kel4(cx->k_sch, 9); + cx->n_rnd = 10; break; + case 6: + cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + ke6(cx->k_sch, 0); ke6(cx->k_sch, 1); + ke6(cx->k_sch, 2); ke6(cx->k_sch, 3); + ke6(cx->k_sch, 4); ke6(cx->k_sch, 5); + ke6(cx->k_sch, 6); kel6(cx->k_sch, 7); + cx->n_rnd = 12; break; + case 8: + cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + cx->k_sch[6] = ss[6] = word_in(in_key + 24); + cx->k_sch[7] = ss[7] = word_in(in_key + 28); + ke8(cx->k_sch, 0); ke8(cx->k_sch, 1); + ke8(cx->k_sch, 2); ke8(cx->k_sch, 3); + ke8(cx->k_sch, 4); ke8(cx->k_sch, 5); + kel8(cx->k_sch, 6); + cx->n_rnd = 14; break; + default: + ; + } +#else + cx->n_rnd = (klen > nc ? klen : nc) + 6; + { aes_32t i, l; + l = (nc * cx->n_rnd + nc - 1) / klen; + + switch(klen) + { + case 4: + for(i = 0; i < l; ++i) + ke4(cx->k_sch, i); + break; + case 6: + cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + for(i = 0; i < l; ++i) + ke6(cx->k_sch, i); + break; + case 8: + cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + cx->k_sch[6] = ss[6] = word_in(in_key + 24); + cx->k_sch[7] = ss[7] = word_in(in_key + 28); + for(i = 0; i < l; ++i) + ke8(cx->k_sch, i); + break; + default: + ; + } + } +#endif + + return aes_good; +} + +#endif + +#if defined(DECRYPTION_KEY_SCHEDULE) + +#if (DEC_ROUND != NO_TABLES) +#define d_vars dec_imvars +#define ff(x) inv_mcol(x) +#else +#define ff(x) (x) +#define d_vars +#endif + +#if 1 +#define kdf4(k,i) \ +{ ss[0] = ss[0] ^ ss[2] ^ ss[1] ^ ss[3]; ss[1] = ss[1] ^ ss[3]; ss[2] = ss[2] ^ ss[3]; ss[3] = ss[3]; \ + ss[4] = ls_box(ss[(i+3) % 4], 3) ^ t_use(r,c)[i]; ss[i % 4] ^= ss[4]; \ + ss[4] ^= k[4*(i)]; k[4*(i)+4] = ff(ss[4]); ss[4] ^= k[4*(i)+1]; k[4*(i)+5] = ff(ss[4]); \ + ss[4] ^= k[4*(i)+2]; k[4*(i)+6] = ff(ss[4]); ss[4] ^= k[4*(i)+3]; k[4*(i)+7] = ff(ss[4]); \ +} +#define kd4(k,i) \ +{ ss[4] = ls_box(ss[(i+3) % 4], 3) ^ t_use(r,c)[i]; ss[i % 4] ^= ss[4]; ss[4] = ff(ss[4]); \ + k[4*(i)+4] = ss[4] ^= k[4*(i)]; k[4*(i)+5] = ss[4] ^= k[4*(i)+1]; \ + k[4*(i)+6] = ss[4] ^= k[4*(i)+2]; k[4*(i)+7] = ss[4] ^= k[4*(i)+3]; \ +} +#define kdl4(k,i) \ +{ ss[4] = ls_box(ss[(i+3) % 4], 3) ^ t_use(r,c)[i]; ss[i % 4] ^= ss[4]; \ + k[4*(i)+4] = (ss[0] ^= ss[1]) ^ ss[2] ^ ss[3]; k[4*(i)+5] = ss[1] ^ ss[3]; \ + k[4*(i)+6] = ss[0]; k[4*(i)+7] = ss[1]; \ +} +#else +#define kdf4(k,i) \ +{ ss[0] ^= ls_box(ss[3],3) ^ t_use(r,c)[i]; k[4*(i)+ 4] = ff(ss[0]); ss[1] ^= ss[0]; k[4*(i)+ 5] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[4*(i)+ 6] = ff(ss[2]); ss[3] ^= ss[2]; k[4*(i)+ 7] = ff(ss[3]); \ +} +#define kd4(k,i) \ +{ ss[4] = ls_box(ss[3],3) ^ t_use(r,c)[i]; \ + ss[0] ^= ss[4]; ss[4] = ff(ss[4]); k[4*(i)+ 4] = ss[4] ^= k[4*(i)]; \ + ss[1] ^= ss[0]; k[4*(i)+ 5] = ss[4] ^= k[4*(i)+ 1]; \ + ss[2] ^= ss[1]; k[4*(i)+ 6] = ss[4] ^= k[4*(i)+ 2]; \ + ss[3] ^= ss[2]; k[4*(i)+ 7] = ss[4] ^= k[4*(i)+ 3]; \ +} +#define kdl4(k,i) \ +{ ss[0] ^= ls_box(ss[3],3) ^ t_use(r,c)[i]; k[4*(i)+ 4] = ss[0]; ss[1] ^= ss[0]; k[4*(i)+ 5] = ss[1]; \ + ss[2] ^= ss[1]; k[4*(i)+ 6] = ss[2]; ss[3] ^= ss[2]; k[4*(i)+ 7] = ss[3]; \ +} +#endif + +#define kdf6(k,i) \ +{ ss[0] ^= ls_box(ss[5],3) ^ t_use(r,c)[i]; k[6*(i)+ 6] = ff(ss[0]); ss[1] ^= ss[0]; k[6*(i)+ 7] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[6*(i)+ 8] = ff(ss[2]); ss[3] ^= ss[2]; k[6*(i)+ 9] = ff(ss[3]); \ + ss[4] ^= ss[3]; k[6*(i)+10] = ff(ss[4]); ss[5] ^= ss[4]; k[6*(i)+11] = ff(ss[5]); \ +} +#define kd6(k,i) \ +{ ss[6] = ls_box(ss[5],3) ^ t_use(r,c)[i]; \ + ss[0] ^= ss[6]; ss[6] = ff(ss[6]); k[6*(i)+ 6] = ss[6] ^= k[6*(i)]; \ + ss[1] ^= ss[0]; k[6*(i)+ 7] = ss[6] ^= k[6*(i)+ 1]; \ + ss[2] ^= ss[1]; k[6*(i)+ 8] = ss[6] ^= k[6*(i)+ 2]; \ + ss[3] ^= ss[2]; k[6*(i)+ 9] = ss[6] ^= k[6*(i)+ 3]; \ + ss[4] ^= ss[3]; k[6*(i)+10] = ss[6] ^= k[6*(i)+ 4]; \ + ss[5] ^= ss[4]; k[6*(i)+11] = ss[6] ^= k[6*(i)+ 5]; \ +} +#define kdl6(k,i) \ +{ ss[0] ^= ls_box(ss[5],3) ^ t_use(r,c)[i]; k[6*(i)+ 6] = ss[0]; ss[1] ^= ss[0]; k[6*(i)+ 7] = ss[1]; \ + ss[2] ^= ss[1]; k[6*(i)+ 8] = ss[2]; ss[3] ^= ss[2]; k[6*(i)+ 9] = ss[3]; \ +} + +#define kdf8(k,i) \ +{ ss[0] ^= ls_box(ss[7],3) ^ t_use(r,c)[i]; k[8*(i)+ 8] = ff(ss[0]); ss[1] ^= ss[0]; k[8*(i)+ 9] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[8*(i)+10] = ff(ss[2]); ss[3] ^= ss[2]; k[8*(i)+11] = ff(ss[3]); \ + ss[4] ^= ls_box(ss[3],0); k[8*(i)+12] = ff(ss[4]); ss[5] ^= ss[4]; k[8*(i)+13] = ff(ss[5]); \ + ss[6] ^= ss[5]; k[8*(i)+14] = ff(ss[6]); ss[7] ^= ss[6]; k[8*(i)+15] = ff(ss[7]); \ +} +#define kd8(k,i) \ +{ aes_32t g = ls_box(ss[7],3) ^ t_use(r,c)[i]; \ + ss[0] ^= g; g = ff(g); k[8*(i)+ 8] = g ^= k[8*(i)]; \ + ss[1] ^= ss[0]; k[8*(i)+ 9] = g ^= k[8*(i)+ 1]; \ + ss[2] ^= ss[1]; k[8*(i)+10] = g ^= k[8*(i)+ 2]; \ + ss[3] ^= ss[2]; k[8*(i)+11] = g ^= k[8*(i)+ 3]; \ + g = ls_box(ss[3],0); \ + ss[4] ^= g; g = ff(g); k[8*(i)+12] = g ^= k[8*(i)+ 4]; \ + ss[5] ^= ss[4]; k[8*(i)+13] = g ^= k[8*(i)+ 5]; \ + ss[6] ^= ss[5]; k[8*(i)+14] = g ^= k[8*(i)+ 6]; \ + ss[7] ^= ss[6]; k[8*(i)+15] = g ^= k[8*(i)+ 7]; \ +} +#define kdl8(k,i) \ +{ ss[0] ^= ls_box(ss[7],3) ^ t_use(r,c)[i]; k[8*(i)+ 8] = ss[0]; ss[1] ^= ss[0]; k[8*(i)+ 9] = ss[1]; \ + ss[2] ^= ss[1]; k[8*(i)+10] = ss[2]; ss[3] ^= ss[2]; k[8*(i)+11] = ss[3]; \ +} + +INTERNAL aes_rval aes_set_decrypt_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) +{ aes_32t ss[8]; + d_vars + +#if !defined(FIXED_TABLES) +#ifdef GLOBALS + if(!t_use(in,it)) gen_tabs(); +#else + if(!cx->t_ptr || !t_use(in,it)) gen_tabs(cx); +#endif +#endif + +#if !defined(BLOCK_SIZE) + if(!cx->n_blk) cx->n_blk = 16; +#else + cx->n_blk = BLOCK_SIZE; +#endif + + if(((klen & 7) || klen < 16 || klen > 32) && ((klen & 63) || klen < 128 || klen > 256)) + { + cx->n_rnd = 0; return aes_bad; + } + + klen >>= (klen < 128 ? 2 : 5); + cx->n_blk = (cx->n_blk & ~3) | 2; + + cx->k_sch[0] = ss[0] = word_in(in_key ); + cx->k_sch[1] = ss[1] = word_in(in_key + 4); + cx->k_sch[2] = ss[2] = word_in(in_key + 8); + cx->k_sch[3] = ss[3] = word_in(in_key + 12); + +#if (BLOCK_SIZE == 16) && (DEC_UNROLL != NONE) + + switch(klen) + { + case 4: + kdf4(cx->k_sch, 0); kd4(cx->k_sch, 1); + kd4(cx->k_sch, 2); kd4(cx->k_sch, 3); + kd4(cx->k_sch, 4); kd4(cx->k_sch, 5); + kd4(cx->k_sch, 6); kd4(cx->k_sch, 7); + kd4(cx->k_sch, 8); kdl4(cx->k_sch, 9); + cx->n_rnd = 10; break; + case 6: + cx->k_sch[4] = ff(ss[4] = word_in(in_key + 16)); + cx->k_sch[5] = ff(ss[5] = word_in(in_key + 20)); + kdf6(cx->k_sch, 0); kd6(cx->k_sch, 1); + kd6(cx->k_sch, 2); kd6(cx->k_sch, 3); + kd6(cx->k_sch, 4); kd6(cx->k_sch, 5); + kd6(cx->k_sch, 6); kdl6(cx->k_sch, 7); + cx->n_rnd = 12; break; + case 8: + cx->k_sch[4] = ff(ss[4] = word_in(in_key + 16)); + cx->k_sch[5] = ff(ss[5] = word_in(in_key + 20)); + cx->k_sch[6] = ff(ss[6] = word_in(in_key + 24)); + cx->k_sch[7] = ff(ss[7] = word_in(in_key + 28)); + kdf8(cx->k_sch, 0); kd8(cx->k_sch, 1); + kd8(cx->k_sch, 2); kd8(cx->k_sch, 3); + kd8(cx->k_sch, 4); kd8(cx->k_sch, 5); + kdl8(cx->k_sch, 6); + cx->n_rnd = 14; break; + default: + ; + } +#else + cx->n_rnd = (klen > nc ? klen : nc) + 6; + { aes_32t i, l; + l = (nc * cx->n_rnd + nc - 1) / klen; + + switch(klen) + { + case 4: + for(i = 0; i < l; ++i) + ke4(cx->k_sch, i); + break; + case 6: + cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + for(i = 0; i < l; ++i) + ke6(cx->k_sch, i); + break; + case 8: + cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + cx->k_sch[6] = ss[6] = word_in(in_key + 24); + cx->k_sch[7] = ss[7] = word_in(in_key + 28); + for(i = 0; i < l; ++i) + ke8(cx->k_sch, i); + break; + default: + ; + } +#if (DEC_ROUND != NO_TABLES) + for(i = nc; i < nc * cx->n_rnd; ++i) + cx->k_sch[i] = inv_mcol(cx->k_sch[i]); +#endif + } +#endif + + return aes_good; +} + +#endif + +#if defined(__cplusplus) +} +#endif diff --git a/lib/gladman-fcrypt/aesopt.h b/lib/gladman-fcrypt/aesopt.h new file mode 100644 index 0000000..12db549 --- /dev/null +++ b/lib/gladman-fcrypt/aesopt.h @@ -0,0 +1,900 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file contains the compilation options for AES (Rijndael) and code + that is common across encryption, key scheduling and table generation. + + OPERATION + + These source code files implement the AES algorithm Rijndael designed by + Joan Daemen and Vincent Rijmen. The version in aes.c is designed for + block and key sizes of 128, 192 and 256 bits (16, 24 and 32 bytes) while + that in aespp.c provides for block and keys sizes of 128, 160, 192, 224 + and 256 bits (16, 20, 24, 28 and 32 bytes). This file is a common header + file for these two implementations and for aesref.c, which is a reference + implementation. + + This version is designed for flexibility and speed using operations on + 32-bit words rather than operations on bytes. It provides aes_both fixed + and dynamic block and key lengths and can also run with either big or + little endian internal byte order (see aes.h). It inputs block and key + lengths in bytes with the legal values being 16, 24 and 32 for aes.c and + 16, 20, 24, 28 and 32 for aespp.c + + THE CIPHER INTERFACE + + aes_08t (an unsigned 8-bit type) + aes_32t (an unsigned 32-bit type) + aes_fret (a signed 16 bit type for function return values) + aes_good (value != 0, a good return) + aes_bad (value == 0, an error return) + struct aes_ctx (structure for the cipher encryption context) + struct aes_ctx (structure for the cipher decryption context) + aes_rval the function return type (aes_fret if not DLL) + + C subroutine calls: + + aes_rval aes_set_block_size(unsigned int blen, aes_ctx cx[1]); + aes_rval aes_set_encrypt_key(const unsigned char in_key[], + unsigned int klen, aes_ctx cx[1]); + aes_rval aes_encrypt_block(const unsigned char in_blk[], + unsigned char out_blk[], const aes_ctx cx[1]); + + aes_rval aes_dec_len(unsigned int blen, aes_ctx cx[1]); + aes_rval aes_set_decrypt_key(const unsigned char in_key[], + unsigned int klen, aes_ctx cx[1]); + aes_rval aes_decrypt_block(const unsigned char in_blk[], + unsigned char out_blk[], const aes_ctx cx[1]); + + IMPORTANT NOTE: If you are using this C interface and your compiler does + not set the memory used for objects to zero before use, you will need to + ensure that cx.n_blk is set to zero before using these subroutine calls. + + C++ aes class subroutines: + + class AESclass for encryption + class AESclass for decryption + + aes_rval len(unsigned int blen = 16); + aes_rval key(const unsigned char in_key[], unsigned int klen); + aes_rval blk(const unsigned char in_blk[], unsigned char out_blk[]); + + aes_rval len(unsigned int blen = 16); + aes_rval key(const unsigned char in_key[], unsigned int klen); + aes_rval blk(const unsigned char in_blk[], unsigned char out_blk[]); + + The block length inputs to set_block and set_key are in numbers of + BYTES, not bits. The calls to subroutines must be made in the above + order but multiple calls can be made without repeating earlier calls + if their parameters have not changed. If the cipher block length is + variable but set_blk has not been called before cipher operations a + value of 16 is assumed (that is, the AES block size). In contrast to + earlier versions the block and key length parameters are now checked + for correctness and the encryption and decryption routines check to + ensure that an appropriate key has been set before they are called. + + COMPILATION + + The files used to provide AES (Rijndael) are + + a. aes.h for the definitions needed for use in C. + b. aescpp.h for the definitions needed for use in C++. + c. aesopt.h for setting compilation options (also includes common + code). + d. aescrypt.c for encryption and decrytpion, or + e. aescrypt.asm for encryption and decryption using assembler code. + f. aeskey.c for key scheduling. + g. aestab.c for table loading or generation. + + The assembler code uses the NASM assembler. The above files provice + block and key lengths of 16, 24 and 32 bytes (128, 192 and 256 bits). + If aescrypp.c and aeskeypp.c are used instead of aescrypt.c and + aeskey.c respectively, the block and key lengths can then be 16, 20, + 24, 28 or 32 bytes. However this code has not been optimised to the + same extent and is hence slower (esepcially for the AES block size + of 16 bytes). + + To compile AES (Rijndael) for use in C code use aes.h and exclude + the AES_DLL define in aes.h + + To compile AES (Rijndael) for use in in C++ code use aescpp.h and + exclude the AES_DLL define in aes.h + + To compile AES (Rijndael) in C as a Dynamic Link Library DLL) use + aes.h, include the AES_DLL define and compile the DLL. If using + the test files to test the DLL, exclude aes.c from the test build + project and compile it with the same defines as used for the DLL + (ensure that the DLL path is correct) + + CONFIGURATION OPTIONS (here and in aes.h) + + a. define BLOCK_SIZE in aes.h to set the cipher block size (16, 24 + or 32 for the standard code, or 16, 20, 24, 28 or 32 for the + extended code) or leave this undefined for dynamically variable + block size (this will result in much slower code). + b. set AES_DLL in aes.h if AES (Rijndael) is to be compiled as a DLL + c. You may need to set PLATFORM_BYTE_ORDER to define the byte order. + d. If you want the code to run in a specific internal byte order, then + INTERNAL_BYTE_ORDER must be set accordingly. + e. set other configuration options decribed below. +*/ + +#ifndef _AESOPT_H +#define _AESOPT_H + +#if defined(__cplusplus) +extern "C" +{ +#if 0 +} +#endif +#endif + +/* START OF CONFIGURATION OPTIONS + + USE OF DEFINES + + Later in this section there are a number of defines that control the + operation of the code. In each section, the purpose of each define is + explained so that the relevant form can be included or excluded by + setting either 1's or 0's respectively on the branches of the related + #if clauses. +*/ + +/* DO NOT CHANGE THE FOLLOWING EIGHT DEFINES */ + +#define NO_TABLES 0 +#define ONE_TABLE 1 +#define FOUR_TABLES 4 +#define NONE 0 +#define PARTIAL 1 +#define FULL 2 +#define AES_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */ +#define AES_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */ + +/* 1. PLATFORM SPECIFIC INCLUDES */ + +#include "aes.h" + +#include "config.h" + +#if defined(WORDS_BIGENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +#else +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +#endif + +/* 2. BYTE ORDER IN 32-BIT WORDS + + To obtain the highest speed on processors with 32-bit words, this code + needs to determine the order in which bytes are packed into such words. + The following block of code is an attempt to capture the most obvious + ways in which various environemnts define byte order. It may well fail, + in which case the definitions will need to be set by editing at the + points marked **** EDIT HERE IF NECESSARY **** below. +*/ +#if !defined(PLATFORM_BYTE_ORDER) +#if defined(LITTLE_ENDIAN) || defined(BIG_ENDIAN) +# if defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) +# if defined(BYTE_ORDER) +# if (BYTE_ORDER == LITTLE_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# elif (BYTE_ORDER == BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +# endif +# elif defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# elif !defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +#elif defined(_LITTLE_ENDIAN) || defined(_BIG_ENDIAN) +# if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) +# if defined(_BYTE_ORDER) +# if (_BYTE_ORDER == _LITTLE_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# elif (_BYTE_ORDER == _BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +# endif +# elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# elif !defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +#elif 0 /* **** EDIT HERE IF NECESSARY **** */ +#define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +#elif 0 /* **** EDIT HERE IF NECESSARY **** */ +#define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +#elif (('1234' >> 24) == '1') +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +#elif (('4321' >> 24) == '1') +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +#endif +#endif + +#if !defined(PLATFORM_BYTE_ORDER) +# error Please set undetermined byte order (lines 241 or 243 of aesopt.h). +#endif + +/* 3. FUNCTIONS REQUIRED + + This implementation provides five main subroutines which provide for + setting block length, setting encryption and decryption keys and for + encryption and decryption. When the assembler code is not being used + the following definition blocks allow the selection of the routines + that are to be included in the compilation. +*/ +#if 1 +#define ENCRYPTION +#define ENCRYPTION_KEY_SCHEDULE +#endif + +#if 0 +#define DECRYPTION +#define DECRYPTION_KEY_SCHEDULE +#endif + +/* 4. ASSEMBLER SUPPORT + + This define (which can be on the command line) enables the use of the + assembler code routines for encryption and decryption with the C code + only providing key scheduling +*/ +#if 0 +#define AES_ASM +#endif + +/* 5. BYTE ORDER WITHIN 32 BIT WORDS + + The fundamental data processing units in Rijndael are 8-bit bytes. The + input, output and key input are all enumerated arrays of bytes in which + bytes are numbered starting at zero and increasing to one less than the + number of bytes in the array in question. This enumeration is only used + for naming bytes and does not imply any adjacency or order relationship + from one byte to another. When these inputs and outputs are considered + as bit sequences, bits 8*n to 8*n+7 of the bit sequence are mapped to + byte[n] with bit 8n+i in the sequence mapped to bit 7-i within the byte. + In this implementation bits are numbered from 0 to 7 starting at the + numerically least significant end of each byte (bit n represents 2^n). + + However, Rijndael can be implemented more efficiently using 32-bit + words by packing bytes into words so that bytes 4*n to 4*n+3 are placed + into word[n]. While in principle these bytes can be assembled into words + in any positions, this implementation only supports the two formats in + which bytes in adjacent positions within words also have adjacent byte + numbers. This order is called big-endian if the lowest numbered bytes + in words have the highest numeric significance and little-endian if the + opposite applies. + + This code can work in either order irrespective of the order used by the + machine on which it runs. Normally the internal byte order will be set + to the order of the processor on which the code is to be run but this + define can be used to reverse this in special situations +*/ +#if 1 +#define INTERNAL_BYTE_ORDER PLATFORM_BYTE_ORDER +#elif 0 +#define INTERNAL_BYTE_ORDER AES_LITTLE_ENDIAN +#elif 0 +#define INTERNAL_BYTE_ORDER AES_BIG_ENDIAN +#else +#error The internal byte order is not defined +#endif + +/* 6. FAST INPUT/OUTPUT OPERATIONS. + + On some machines it is possible to improve speed by transferring the + bytes in the input and output arrays to and from the internal 32-bit + variables by addressing these arrays as if they are arrays of 32-bit + words. On some machines this will always be possible but there may + be a large performance penalty if the byte arrays are not aligned on + the normal word boundaries. On other machines this technique will + lead to memory access errors when such 32-bit word accesses are not + properly aligned. The option SAFE_IO avoids such problems but will + often be slower on those machines that support misaligned access + (especially so if care is taken to align the input and output byte + arrays on 32-bit word boundaries). If SAFE_IO is not defined it is + assumed that access to byte arrays as if they are arrays of 32-bit + words will not cause problems when such accesses are misaligned. +*/ +#if 1 && !defined(_MSC_VER) +#define SAFE_IO +#endif + +/* 7. LOOP UNROLLING + + The code for encryption and decrytpion cycles through a number of rounds + that can be implemented either in a loop or by expanding the code into a + long sequence of instructions, the latter producing a larger program but + one that will often be much faster. The latter is called loop unrolling. + There are also potential speed advantages in expanding two iterations in + a loop with half the number of iterations, which is called partial loop + unrolling. The following options allow partial or full loop unrolling + to be set independently for encryption and decryption +*/ +#if 1 +#define ENC_UNROLL FULL +#elif 0 +#define ENC_UNROLL PARTIAL +#else +#define ENC_UNROLL NONE +#endif + +#if 1 +#define DEC_UNROLL FULL +#elif 0 +#define DEC_UNROLL PARTIAL +#else +#define DEC_UNROLL NONE +#endif + +/* 8. FAST FINITE FIELD OPERATIONS + + If this section is included, tables are used to provide faster finite + field arithmetic (this has no effect if FIXED_TABLES is defined). +*/ +#if 1 +#define FF_TABLES +#endif + +/* 9. INTERNAL STATE VARIABLE FORMAT + + The internal state of Rijndael is stored in a number of local 32-bit + word varaibles which can be defined either as an array or as individual + names variables. Include this section if you want to store these local + varaibles in arrays. Otherwise individual local variables will be used. +*/ +#if 1 +#define ARRAYS +#endif + +/* In this implementation the columns of the state array are each held in + 32-bit words. The state array can be held in various ways: in an array + of words, in a number of individual word variables or in a number of + processor registers. The following define maps a variable name x and + a column number c to the way the state array variable is to be held. + The first define below maps the state into an array x[c] whereas the + second form maps the state into a number of individual variables x0, + x1, etc. Another form could map individual state colums to machine + register names. +*/ + +#if defined(ARRAYS) +#define s(x,c) x[c] +#else +#define s(x,c) x##c +#endif + +/* 10. VARIABLE BLOCK SIZE SPEED + + This section is only relevant if you wish to use the variable block + length feature of the code. Include this section if you place more + emphasis on speed rather than code size. +*/ +#if 1 +#define FAST_VARIABLE +#endif + +/* 11. FIXED OR DYNAMIC TABLES + + When this section is included the tables used by the code are comipled + statically into the binary file. Otherwise they are computed once when + the code is first used. +*/ +#if 1 +#define FIXED_TABLES +#endif + +/* 12. GLOBAL VARIABLES + + In some circumstances global variables to hold the fixed tables are not + possible so the tables have to be placed in a structure that is passed + around at run time through the AES API calls. In this case FIXED_TABLES + cannot be used. GLOBALS must be defined in order to use the assembler + version of this code. If GLOBALS is not defined, then AES_TABLE_PTR must + be defined either on the command line or early in aes.h in order to + provide space for the table pointer in the AES context. +*/ +#if 1 || defined(AES_ASM) +#define GLOBALS +#elif !defined(AES_TABLE_PTR) +#error no context space for table pointer (compile with AES_TABLE_PTR defined) +#elif defined(FIXED_TABLES) +#undef FIXED_TABLES +#endif + +/* 13. INTERNAL TABLE CONFIGURATION + + This cipher proceeds by repeating in a number of cycles known as 'rounds' + which are implemented by a round function which can optionally be speeded + up using tables. The basic tables are each 256 32-bit words, with either + one or four tables being required for each round function depending on + how much speed is required. The encryption and decryption round functions + are different and the last encryption and decrytpion round functions are + different again making four different round functions in all. + + This means that: + 1. Normal encryption and decryption rounds can each use either 0, 1 + or 4 tables and table spaces of 0, 1024 or 4096 bytes each. + 2. The last encryption and decryption rounds can also use either 0, 1 + or 4 tables and table spaces of 0, 1024 or 4096 bytes each. + + Include or exclude the appropriate definitions below to set the number + of tables used by this implementation. +*/ + +#if 1 /* set tables for the normal encryption round */ +#define ENC_ROUND FOUR_TABLES +#elif 0 +#define ENC_ROUND ONE_TABLE +#else +#define ENC_ROUND NO_TABLES +#endif + +#if 1 /* set tables for the last encryption round */ +#define LAST_ENC_ROUND FOUR_TABLES +#elif 0 +#define LAST_ENC_ROUND ONE_TABLE +#else +#define LAST_ENC_ROUND NO_TABLES +#endif + +#if 1 /* set tables for the normal decryption round */ +#define DEC_ROUND FOUR_TABLES +#elif 0 +#define DEC_ROUND ONE_TABLE +#else +#define DEC_ROUND NO_TABLES +#endif + +#if 1 /* set tables for the last decryption round */ +#define LAST_DEC_ROUND FOUR_TABLES +#elif 0 +#define LAST_DEC_ROUND ONE_TABLE +#else +#define LAST_DEC_ROUND NO_TABLES +#endif + +/* The decryption key schedule can be speeded up with tables in the same + way that the round functions can. Include or exclude the following + defines to set this requirement. +*/ +#if 1 +#define KEY_SCHED FOUR_TABLES +#elif 0 +#define KEY_SCHED ONE_TABLE +#else +#define KEY_SCHED NO_TABLES +#endif + +/* END OF CONFIGURATION OPTIONS */ + +#if defined(BLOCK_SIZE) && ((BLOCK_SIZE & 3) || BLOCK_SIZE < 16 || BLOCK_SIZE > 32) +#error An illegal block size has been specified. +#endif + +#if !defined(BLOCK_SIZE) +#define RC_LENGTH 29 +#else +#define RC_LENGTH (5 * BLOCK_SIZE / 4 - (BLOCK_SIZE == 16 ? 10 : 11)) +#endif + +/* Disable at least some poor combinations of options */ + +#if ENC_ROUND == NO_TABLES && LAST_ENC_ROUND != NO_TABLES +#undef LAST_ENC_ROUND +#define LAST_ENC_ROUND NO_TABLES +#elif ENC_ROUND == ONE_TABLE && LAST_ENC_ROUND == FOUR_TABLES +#undef LAST_ENC_ROUND +#define LAST_ENC_ROUND ONE_TABLE +#endif + +#if ENC_ROUND == NO_TABLES && ENC_UNROLL != NONE +#undef ENC_UNROLL +#define ENC_UNROLL NONE +#endif + +#if DEC_ROUND == NO_TABLES && LAST_DEC_ROUND != NO_TABLES +#undef LAST_DEC_ROUND +#define LAST_DEC_ROUND NO_TABLES +#elif DEC_ROUND == ONE_TABLE && LAST_DEC_ROUND == FOUR_TABLES +#undef LAST_DEC_ROUND +#define LAST_DEC_ROUND ONE_TABLE +#endif + +#if DEC_ROUND == NO_TABLES && DEC_UNROLL != NONE +#undef DEC_UNROLL +#define DEC_UNROLL NONE +#endif + +/* upr(x,n): rotates bytes within words by n positions, moving bytes to + higher index positions with wrap around into low positions + ups(x,n): moves bytes by n positions to higher index positions in + words but without wrap around + bval(x,n): extracts a byte from a word + + NOTE: The definitions given here are intended only for use with + unsigned variables and with shift counts that are compile + time constants +*/ + +#if (INTERNAL_BYTE_ORDER == AES_LITTLE_ENDIAN) +#define upr(x,n) (((aes_32t)(x) << (8 * (n))) | ((aes_32t)(x) >> (32 - 8 * (n)))) +#define ups(x,n) ((aes_32t) (x) << (8 * (n))) +#define bval(x,n) ((aes_08t)((x) >> (8 * (n)))) +#define bytes2word(b0, b1, b2, b3) \ + (((aes_32t)(b3) << 24) | ((aes_32t)(b2) << 16) | ((aes_32t)(b1) << 8) | (b0)) +#endif + +#if (INTERNAL_BYTE_ORDER == AES_BIG_ENDIAN) +#define upr(x,n) (((aes_32t)(x) >> (8 * (n))) | ((aes_32t)(x) << (32 - 8 * (n)))) +#define ups(x,n) ((aes_32t) (x) >> (8 * (n)))) +#define bval(x,n) ((aes_08t)((x) >> (24 - 8 * (n)))) +#define bytes2word(b0, b1, b2, b3) \ + (((aes_32t)(b0) << 24) | ((aes_32t)(b1) << 16) | ((aes_32t)(b2) << 8) | (b3)) +#endif + +#if defined(SAFE_IO) + +#define word_in(x) bytes2word((x)[0], (x)[1], (x)[2], (x)[3]) +#define word_out(x,v) { (x)[0] = bval(v,0); (x)[1] = bval(v,1); \ + (x)[2] = bval(v,2); (x)[3] = bval(v,3); } + +#elif (INTERNAL_BYTE_ORDER == PLATFORM_BYTE_ORDER) + +#define word_in(x) (*(aes_32t*)(x)) +#define word_out(x,v) (*(aes_32t*)(x) = (v)) + +#else + +#if !defined(bswap_32) +#define brot(x,n) (((aes_32t)(x) << n) | ((aes_32t)(x) >> (32 - n))) +#define bswap_32(x) ((brot((x),8) & 0x00ff00ff) | (brot((x),24) & 0xff00ff00)) +#endif + +#define word_in(x) bswap_32(*(aes_32t*)(x)) +#define word_out(x,v) (*(aes_32t*)(x) = bswap_32(v)) + +#endif + +/* the finite field modular polynomial and elements */ + +#define WPOLY 0x011b +#define BPOLY 0x1b + +/* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + +#define m1 0x80808080 +#define m2 0x7f7f7f7f +#define FFmulX(x) ((((x) & m2) << 1) ^ ((((x) & m1) >> 7) * BPOLY)) + +/* The following defines provide alternative definitions of FFmulX that might + give improved performance if a fast 32-bit multiply is not available. Note + that a temporary variable u needs to be defined where FFmulX is used. + +#define FFmulX(x) (u = (x) & m1, u |= (u >> 1), ((x) & m2) << 1) ^ ((u >> 3) | (u >> 6)) +#define m4 (0x01010101 * BPOLY) +#define FFmulX(x) (u = (x) & m1, ((x) & m2) << 1) ^ ((u - (u >> 7)) & m4) +*/ + +/* Work out which tables are needed for the different options */ + +#ifdef AES_ASM +#ifdef ENC_ROUND +#undef ENC_ROUND +#endif +#define ENC_ROUND FOUR_TABLES +#ifdef LAST_ENC_ROUND +#undef LAST_ENC_ROUND +#endif +#define LAST_ENC_ROUND FOUR_TABLES +#ifdef DEC_ROUND +#undef DEC_ROUND +#endif +#define DEC_ROUND FOUR_TABLES +#ifdef LAST_DEC_ROUND +#undef LAST_DEC_ROUND +#endif +#define LAST_DEC_ROUND FOUR_TABLES +#ifdef KEY_SCHED +#undef KEY_SCHED +#define KEY_SCHED FOUR_TABLES +#endif +#endif + +#if defined(ENCRYPTION) || defined(AES_ASM) +#if ENC_ROUND == ONE_TABLE +#define FT1_SET +#elif ENC_ROUND == FOUR_TABLES +#define FT4_SET +#else +#define SBX_SET +#endif +#if LAST_ENC_ROUND == ONE_TABLE +#define FL1_SET +#elif LAST_ENC_ROUND == FOUR_TABLES +#define FL4_SET +#elif !defined(SBX_SET) +#define SBX_SET +#endif +#endif + +#if defined(DECRYPTION) || defined(AES_ASM) +#if DEC_ROUND == ONE_TABLE +#define IT1_SET +#elif DEC_ROUND == FOUR_TABLES +#define IT4_SET +#else +#define ISB_SET +#endif +#if LAST_DEC_ROUND == ONE_TABLE +#define IL1_SET +#elif LAST_DEC_ROUND == FOUR_TABLES +#define IL4_SET +#elif !defined(ISB_SET) +#define ISB_SET +#endif +#endif + +#if defined(ENCRYPTION_KEY_SCHEDULE) || defined(DECRYPTION_KEY_SCHEDULE) +#if KEY_SCHED == ONE_TABLE +#define LS1_SET +#define IM1_SET +#elif KEY_SCHED == FOUR_TABLES +#define LS4_SET +#define IM4_SET +#elif !defined(SBX_SET) +#define SBX_SET +#endif +#endif + +/* If there are no global variables, the AES tables are placed in + a structure and a pointer is added to the AES context. If this + facility is used, the calling program has to ensure that this + pointer is managed appropriately. In particular, the value of + the t_dec(in,it) item in the table structure must be set to zero + in order to ensure that the tables are initialised. In practice + the three code sequences in aeskey.c that control the calls to + gen_tabs() and the gen_tabs() routine itself will require some + changes for a specific implementation. If global variables are + available it will generally be preferable to use them with the + precomputed FIXED_TABLES option that uses static global tables. + + The following defines can be used to control the way the tables + are defined, initialised and used in embedded environments that + require special features for these purposes + + the 't_dec' construction is used to declare fixed table arrays + the 't_set' construction is used to set fixed table values + the 't_use' construction is used to access fixed table values + + 256 byte tables: + + t_xxx(s,box) => forward S box + t_xxx(i,box) => inverse S box + + 256 32-bit word OR 4 x 256 32-bit word tables: + + t_xxx(f,n) => forward normal round + t_xxx(f,l) => forward last round + t_xxx(i,n) => inverse normal round + t_xxx(i,l) => inverse last round + t_xxx(l,s) => key schedule table + t_xxx(i,m) => key schedule table + + Other variables and tables: + + t_xxx(in,it) => the table initialsation flag + t_xxx(r,c) => the rcon table +*/ + +#define t_dec(m,n) t_##m##n +#define t_set(m,n) t_##m##n /* may be redefined once below */ +#define t_use(m,n) t_##m##n /* may be redefined once below */ + +#ifdef FIXED_TABLES + +#define prefx INTERNAL const +#elif defined(GLOBALS) +#define prefx extern +extern aes_08t t_dec(in,it); +void gen_tabs(void); +#else +#define prefx +void gen_tabs(aes_ctx cx[1]); + +typedef struct { +#endif + +prefx aes_32t t_dec(r,c)[RC_LENGTH]; + +#ifdef SBX_SET +prefx aes_08t t_dec(s,box)[256]; +#endif + +#ifdef ISB_SET +prefx aes_08t t_dec(i,box)[256]; +#endif + +#ifdef FT1_SET +prefx aes_32t t_dec(f,n)[256]; +#endif + +#ifdef FT4_SET +prefx aes_32t t_dec(f,n)[4][256]; +#endif + +#ifdef FL1_SET +prefx aes_32t t_dec(f,l)[256]; +#endif + +#ifdef FL4_SET +prefx aes_32t t_dec(f,l)[4][256]; +#endif + +#ifdef IT1_SET +prefx aes_32t t_dec(i,n)[256]; +#endif + +#ifdef IT4_SET +prefx aes_32t t_dec(i,n)[4][256]; +#endif + +#ifdef IL1_SET +prefx aes_32t t_dec(i,l)[256]; +#endif + +#ifdef IL4_SET +prefx aes_32t t_dec(i,l)[4][256]; +#endif + +#ifdef LS1_SET +#ifdef FL1_SET +#undef LS1_SET +#else +prefx aes_32t t_dec(l,s)[256]; +#endif +#endif + +#ifdef LS4_SET +#ifdef FL4_SET +#undef LS4_SET +#else +prefx aes_32t t_dec(l,s)[4][256]; +#endif +#endif + +#ifdef IM1_SET +prefx aes_32t t_dec(i,m)[256]; +#endif + +#ifdef IM4_SET +prefx aes_32t t_dec(i,m)[4][256]; +#endif + +prefx aes_08t t_dec(in,it); + +#ifndef GLOBALS +} s_ty; + +extern s_ty s_t; + +/* modify the table set macro to cope with a static structure */ +#undef t_set +#define t_set(m,n) (s_t.t_##m##n) + +/* modify the table use macro to cope with a context pointer */ +#undef t_use +#define t_use(m,n) (((s_ty*)cx->t_ptr)->t_##m##n) + +#endif + +/* Set the number of columns in nc. Note that it is important + that nc is a constant which is known at compile time if the + highest speed version of the code is needed. +*/ + +#if defined(BLOCK_SIZE) +#define nc (BLOCK_SIZE >> 2) +#else +#define nc (cx->n_blk >> 2) +#endif + +/* generic definitions of Rijndael macros that use tables */ + +#define no_table(x,box,vf,rf,c) bytes2word( \ + box[bval(vf(x,0,c),rf(0,c))], \ + box[bval(vf(x,1,c),rf(1,c))], \ + box[bval(vf(x,2,c),rf(2,c))], \ + box[bval(vf(x,3,c),rf(3,c))]) + +#define one_table(x,op,tab,vf,rf,c) \ + ( tab[bval(vf(x,0,c),rf(0,c))] \ + ^ op(tab[bval(vf(x,1,c),rf(1,c))],1) \ + ^ op(tab[bval(vf(x,2,c),rf(2,c))],2) \ + ^ op(tab[bval(vf(x,3,c),rf(3,c))],3)) + +#define four_tables(x,tab,vf,rf,c) \ + ( tab[0][bval(vf(x,0,c),rf(0,c))] \ + ^ tab[1][bval(vf(x,1,c),rf(1,c))] \ + ^ tab[2][bval(vf(x,2,c),rf(2,c))] \ + ^ tab[3][bval(vf(x,3,c),rf(3,c))]) + +#define vf1(x,r,c) (x) +#define rf1(r,c) (r) +#define rf2(r,c) ((8+r-c)&3) + +/* perform forward and inverse column mix operation on four bytes in long word x in */ +/* parallel. NOTE: x must be a simple variable, NOT an expression in these macros. */ + +#define dec_fmvars +#if defined(FM4_SET) /* not currently used */ +#define fwd_mcol(x) four_tables(x,t_use(f,m),vf1,rf1,0) +#elif defined(FM1_SET) /* not currently used */ +#define fwd_mcol(x) one_table(x,upr,t_use(f,m),vf1,rf1,0) +#else +#undef dec_fmvars +#define dec_fmvars aes_32t f1, f2; +#define fwd_mcol(x) (f1 = (x), f2 = FFmulX(f1), f2 ^ upr(f1 ^ f2, 3) ^ upr(f1, 2) ^ upr(f1, 1)) +#endif + +#define dec_imvars +#if defined(IM4_SET) +#define inv_mcol(x) four_tables(x,t_use(i,m),vf1,rf1,0) +#elif defined(IM1_SET) +#define inv_mcol(x) one_table(x,upr,t_use(i,m),vf1,rf1,0) +#else +#undef dec_imvars +#define dec_imvars aes_32t f2, f4, f8, f9; +#define inv_mcol(x) \ + (f9 = (x), f2 = FFmulX(f9), f4 = FFmulX(f2), f8 = FFmulX(f4), f9 ^= f8, \ + f2 ^= f4 ^ f8 ^ upr(f2 ^ f9,3) ^ upr(f4 ^ f9,2) ^ upr(f9,1)) +#endif + +#if defined(FL4_SET) +#define ls_box(x,c) four_tables(x,t_use(f,l),vf1,rf2,c) +#elif defined(LS4_SET) +#define ls_box(x,c) four_tables(x,t_use(l,s),vf1,rf2,c) +#elif defined(FL1_SET) +#define ls_box(x,c) one_table(x,upr,t_use(f,l),vf1,rf2,c) +#elif defined(LS1_SET) +#define ls_box(x,c) one_table(x,upr,t_use(l,s),vf1,rf2,c) +#else +#define ls_box(x,c) no_table(x,t_use(s,box),vf1,rf2,c) +#endif + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/lib/gladman-fcrypt/aestab.c b/lib/gladman-fcrypt/aestab.c new file mode 100644 index 0000000..7b202be --- /dev/null +++ b/lib/gladman-fcrypt/aestab.c @@ -0,0 +1,529 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file contains the code for generating the fixed tables needed for AES +*/ + +#include "aesopt.h" + +#if defined(__cplusplus) +extern "C" +{ +#endif + +#if defined(FIXED_TABLES) || !defined(FF_TABLES) + +/* finite field arithmetic operations */ + +#define f2(x) ((x<<1) ^ (((x>>7) & 1) * WPOLY)) +#define f4(x) ((x<<2) ^ (((x>>6) & 1) * WPOLY) ^ (((x>>6) & 2) * WPOLY)) +#define f8(x) ((x<<3) ^ (((x>>5) & 1) * WPOLY) ^ (((x>>5) & 2) * WPOLY) \ + ^ (((x>>5) & 4) * WPOLY)) +#define f3(x) (f2(x) ^ x) +#define f9(x) (f8(x) ^ x) +#define fb(x) (f8(x) ^ f2(x) ^ x) +#define fd(x) (f8(x) ^ f4(x) ^ x) +#define fe(x) (f8(x) ^ f4(x) ^ f2(x)) + +#endif + +#if defined(FIXED_TABLES) + +#define sb_data(w) \ + w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5),\ + w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76),\ + w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0),\ + w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0),\ + w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc),\ + w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15),\ + w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a),\ + w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75),\ + w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0),\ + w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84),\ + w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b),\ + w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf),\ + w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85),\ + w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8),\ + w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5),\ + w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2),\ + w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17),\ + w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73),\ + w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88),\ + w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb),\ + w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c),\ + w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79),\ + w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9),\ + w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08),\ + w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6),\ + w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a),\ + w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e),\ + w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e),\ + w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94),\ + w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf),\ + w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68),\ + w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16) + +#define isb_data(w) \ + w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), w(0x38),\ + w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), w(0xd7), w(0xfb),\ + w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), w(0x2f), w(0xff), w(0x87),\ + w(0x34), w(0x8e), w(0x43), w(0x44), w(0xc4), w(0xde), w(0xe9), w(0xcb),\ + w(0x54), w(0x7b), w(0x94), w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d),\ + w(0xee), w(0x4c), w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e),\ + w(0x08), w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2),\ + w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), w(0x25),\ + w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), w(0x98), w(0x16),\ + w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), w(0x65), w(0xb6), w(0x92),\ + w(0x6c), w(0x70), w(0x48), w(0x50), w(0xfd), w(0xed), w(0xb9), w(0xda),\ + w(0x5e), w(0x15), w(0x46), w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84),\ + w(0x90), w(0xd8), w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a),\ + w(0xf7), w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06),\ + w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), w(0x02),\ + w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), w(0x8a), w(0x6b),\ + w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), w(0x67), w(0xdc), w(0xea),\ + w(0x97), w(0xf2), w(0xcf), w(0xce), w(0xf0), w(0xb4), w(0xe6), w(0x73),\ + w(0x96), w(0xac), w(0x74), w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85),\ + w(0xe2), w(0xf9), w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e),\ + w(0x47), w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89),\ + w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), w(0x1b),\ + w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), w(0x79), w(0x20),\ + w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), w(0xcd), w(0x5a), w(0xf4),\ + w(0x1f), w(0xdd), w(0xa8), w(0x33), w(0x88), w(0x07), w(0xc7), w(0x31),\ + w(0xb1), w(0x12), w(0x10), w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f),\ + w(0x60), w(0x51), w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d),\ + w(0x2d), w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef),\ + w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), w(0xb0),\ + w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), w(0x99), w(0x61),\ + w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), w(0x77), w(0xd6), w(0x26),\ + w(0xe1), w(0x69), w(0x14), w(0x63), w(0x55), w(0x21), w(0x0c), w(0x7d), + +#define mm_data(w) \ + w(0x00), w(0x01), w(0x02), w(0x03), w(0x04), w(0x05), w(0x06), w(0x07),\ + w(0x08), w(0x09), w(0x0a), w(0x0b), w(0x0c), w(0x0d), w(0x0e), w(0x0f),\ + w(0x10), w(0x11), w(0x12), w(0x13), w(0x14), w(0x15), w(0x16), w(0x17),\ + w(0x18), w(0x19), w(0x1a), w(0x1b), w(0x1c), w(0x1d), w(0x1e), w(0x1f),\ + w(0x20), w(0x21), w(0x22), w(0x23), w(0x24), w(0x25), w(0x26), w(0x27),\ + w(0x28), w(0x29), w(0x2a), w(0x2b), w(0x2c), w(0x2d), w(0x2e), w(0x2f),\ + w(0x30), w(0x31), w(0x32), w(0x33), w(0x34), w(0x35), w(0x36), w(0x37),\ + w(0x38), w(0x39), w(0x3a), w(0x3b), w(0x3c), w(0x3d), w(0x3e), w(0x3f),\ + w(0x40), w(0x41), w(0x42), w(0x43), w(0x44), w(0x45), w(0x46), w(0x47),\ + w(0x48), w(0x49), w(0x4a), w(0x4b), w(0x4c), w(0x4d), w(0x4e), w(0x4f),\ + w(0x50), w(0x51), w(0x52), w(0x53), w(0x54), w(0x55), w(0x56), w(0x57),\ + w(0x58), w(0x59), w(0x5a), w(0x5b), w(0x5c), w(0x5d), w(0x5e), w(0x5f),\ + w(0x60), w(0x61), w(0x62), w(0x63), w(0x64), w(0x65), w(0x66), w(0x67),\ + w(0x68), w(0x69), w(0x6a), w(0x6b), w(0x6c), w(0x6d), w(0x6e), w(0x6f),\ + w(0x70), w(0x71), w(0x72), w(0x73), w(0x74), w(0x75), w(0x76), w(0x77),\ + w(0x78), w(0x79), w(0x7a), w(0x7b), w(0x7c), w(0x7d), w(0x7e), w(0x7f),\ + w(0x80), w(0x81), w(0x82), w(0x83), w(0x84), w(0x85), w(0x86), w(0x87),\ + w(0x88), w(0x89), w(0x8a), w(0x8b), w(0x8c), w(0x8d), w(0x8e), w(0x8f),\ + w(0x90), w(0x91), w(0x92), w(0x93), w(0x94), w(0x95), w(0x96), w(0x97),\ + w(0x98), w(0x99), w(0x9a), w(0x9b), w(0x9c), w(0x9d), w(0x9e), w(0x9f),\ + w(0xa0), w(0xa1), w(0xa2), w(0xa3), w(0xa4), w(0xa5), w(0xa6), w(0xa7),\ + w(0xa8), w(0xa9), w(0xaa), w(0xab), w(0xac), w(0xad), w(0xae), w(0xaf),\ + w(0xb0), w(0xb1), w(0xb2), w(0xb3), w(0xb4), w(0xb5), w(0xb6), w(0xb7),\ + w(0xb8), w(0xb9), w(0xba), w(0xbb), w(0xbc), w(0xbd), w(0xbe), w(0xbf),\ + w(0xc0), w(0xc1), w(0xc2), w(0xc3), w(0xc4), w(0xc5), w(0xc6), w(0xc7),\ + w(0xc8), w(0xc9), w(0xca), w(0xcb), w(0xcc), w(0xcd), w(0xce), w(0xcf),\ + w(0xd0), w(0xd1), w(0xd2), w(0xd3), w(0xd4), w(0xd5), w(0xd6), w(0xd7),\ + w(0xd8), w(0xd9), w(0xda), w(0xdb), w(0xdc), w(0xdd), w(0xde), w(0xdf),\ + w(0xe0), w(0xe1), w(0xe2), w(0xe3), w(0xe4), w(0xe5), w(0xe6), w(0xe7),\ + w(0xe8), w(0xe9), w(0xea), w(0xeb), w(0xec), w(0xed), w(0xee), w(0xef),\ + w(0xf0), w(0xf1), w(0xf2), w(0xf3), w(0xf4), w(0xf5), w(0xf6), w(0xf7),\ + w(0xf8), w(0xf9), w(0xfa), w(0xfb), w(0xfc), w(0xfd), w(0xfe), w(0xff) + +#define h0(x) (x) + +/* These defines are used to ensure tables are generated in the + right format depending on the internal byte order required +*/ + +#define w0(p) bytes2word(p, 0, 0, 0) +#define w1(p) bytes2word(0, p, 0, 0) +#define w2(p) bytes2word(0, 0, p, 0) +#define w3(p) bytes2word(0, 0, 0, p) + +/* Number of elements required in this table for different + block and key lengths is: + + Rcon Table key length (bytes) + Length 16 20 24 28 32 + --------------------- + block 16 | 10 9 8 7 7 + length 20 | 14 11 10 9 9 + (bytes) 24 | 19 15 12 11 11 + 28 | 24 19 16 13 13 + 32 | 29 23 19 17 14 + + this table can be a table of bytes if the key schedule + code is adjusted accordingly +*/ + +#define u0(p) bytes2word(f2(p), p, p, f3(p)) +#define u1(p) bytes2word(f3(p), f2(p), p, p) +#define u2(p) bytes2word(p, f3(p), f2(p), p) +#define u3(p) bytes2word(p, p, f3(p), f2(p)) + +#define v0(p) bytes2word(fe(p), f9(p), fd(p), fb(p)) +#define v1(p) bytes2word(fb(p), fe(p), f9(p), fd(p)) +#define v2(p) bytes2word(fd(p), fb(p), fe(p), f9(p)) +#define v3(p) bytes2word(f9(p), fd(p), fb(p), fe(p)) + +INTERNAL const aes_32t t_dec(r,c)[RC_LENGTH] = +{ + w0(0x01), w0(0x02), w0(0x04), w0(0x08), w0(0x10), + w0(0x20), w0(0x40), w0(0x80), w0(0x1b), w0(0x36), +#if RC_LENGTH > 10 + w0(0x6c), w0(0xd8), w0(0xab), w0(0x4d), +#endif +#if RC_LENGTH > 14 + w0(0x9a), w0(0x2f), w0(0x5e), w0(0xbc), w0(0x63), +#endif +#if RC_LENGTH > 19 + w0(0xc6), w0(0x97), w0(0x35), w0(0x6a), w0(0xd4), +#endif +#if RC_LENGTH > 24 + w0(0xb3), w0(0x7d), w0(0xfa), w0(0xef), w0(0xc5) +#endif +}; + +#ifdef SBX_SET +INTERNAL const aes_08t t_dec(s,box)[256] = { sb_data(h0) }; +#endif +#ifdef ISB_SET +INTERNAL const aes_08t t_dec(i,box)[256] = { isb_data(h0) }; +#endif + +#ifdef FT1_SET +INTERNAL const aes_32t t_dec(f,n)[256] = { sb_data(u0) }; +#endif +#ifdef FT4_SET +INTERNAL const aes_32t t_dec(f,n)[4][256] = + { { sb_data(u0) }, { sb_data(u1) }, { sb_data(u2) }, { sb_data(u3) } }; +#endif + +#ifdef FL1_SET +INTERNAL const aes_32t t_dec(f,l)[256] = { sb_data(w0) }; +#endif +#ifdef FL4_SET +INTERNAL const aes_32t t_dec(f,l)[4][256] = + { { sb_data(w0) }, { sb_data(w1) }, { sb_data(w2) }, { sb_data(w3) } }; +#endif + +#ifdef IT1_SET +INTERNAL const aes_32t t_dec(i,n)[256] = { isb_data(v0) }; +#endif +#ifdef IT4_SET +INTERNAL const aes_32t t_dec(i,n)[4][256] = + { { isb_data(v0) }, { isb_data(v1) }, { isb_data(v2) }, { isb_data(v3) } }; +#endif + +#ifdef IL1_SET +INTERNAL const aes_32t t_dec(i,l)[256] = { isb_data(w0) }; +#endif +#ifdef IL4_SET +INTERNAL const aes_32t t_dec(i,l)[4][256] = + { { isb_data(w0) }, { isb_data(w1) }, { isb_data(w2) }, { isb_data(w3) } }; +#endif + +#ifdef LS1_SET +INTERNAL const aes_32t t_dec(l,s)[256] = { sb_data(w0) }; +#endif +#ifdef LS4_SET +INTERNAL const aes_32t t_dec(l,s)[4][256] = + { { sb_data(w0) }, { sb_data(w1) }, { sb_data(w2) }, { sb_data(w3) } }; +#endif + +#ifdef IM1_SET +INTERNAL const aes_32t t_dec(i,m)[256] = { mm_data(v0) }; +#endif +#ifdef IM4_SET +INTERNAL const aes_32t t_dec(i,m)[4][256] = + { { mm_data(v0) }, { mm_data(v1) }, { mm_data(v2) }, { mm_data(v3) } }; +#endif + +#else /* dynamic table generation */ + +#ifdef GLOBALS + +aes_08t t_dec(in,it) = 0; + +aes_32t t_dec(r,c)[RC_LENGTH]; + +#ifdef SBX_SET +aes_08t t_dec(s,box)[256]; +#endif +#ifdef ISB_SET +aes_08t t_dec(i,box)[256]; +#endif + +#ifdef FT1_SET +aes_32t t_dec(f,n)[256]; +#endif +#ifdef FT4_SET +aes_32t t_dec(f,n)[4][256]; +#endif + +#ifdef FL1_SET +aes_32t t_dec(f,l)[256]; +#endif +#ifdef FL4_SET +aes_32t t_dec(f,l)[4][256]; +#endif + +#ifdef IT1_SET +aes_32t t_dec(i,n)[256]; +#endif +#ifdef IT4_SET +aes_32t t_dec(i,n)[4][256]; +#endif + +#ifdef IL1_SET +aes_32t t_dec(i,l)[256]; +#endif +#ifdef IL4_SET +aes_32t t_dec(i,l)[4][256]; +#endif + +#ifdef LS1_SET +aes_32t t_dec(l,s)[256]; +#endif +#ifdef LS4_SET +aes_32t t_dec(l,s)[4][256]; +#endif + +#ifdef IM1_SET +aes_32t t_dec(i,m)[256]; +#endif +#ifdef IM4_SET +aes_32t t_dec(i,m)[4][256]; +#endif + +#else +s_ty s_t; +#endif + +#if !defined(FF_TABLES) + +/* Generate the tables for the dynamic table option + + It will generally be sensible to use tables to compute finite + field multiplies and inverses but where memory is scarse this + code might sometimes be better. But it only has effect during + initialisation so its pretty unimportant in overall terms. +*/ + +/* return 2 ^ (n - 1) where n is the bit number of the highest bit + set in x with x in the range 1 < x < 0x00000200. This form is + used so that locals within fi can be bytes rather than words +*/ + +static aes_08t hibit(const aes_32t x) +{ aes_08t r = (aes_08t)((x >> 1) | (x >> 2)); + + r |= (r >> 2); + r |= (r >> 4); + return (r + 1) >> 1; +} + +/* return the inverse of the finite field element x */ + +static aes_08t fi(const aes_08t x) +{ aes_08t p1 = x, p2 = BPOLY, n1 = hibit(x), n2 = 0x80, v1 = 1, v2 = 0; + + if(x < 2) return x; + + for(;;) + { + if(!n1) return v1; + + while(n2 >= n1) + { + n2 /= n1; p2 ^= p1 * n2; v2 ^= v1 * n2; n2 = hibit(p2); + } + + if(!n2) return v2; + + while(n1 >= n2) + { + n1 /= n2; p1 ^= p2 * n1; v1 ^= v2 * n1; n1 = hibit(p1); + } + } +} + +#else + +/* define the finite field multiplies required for Rijndael */ + +#define f2(x) ((x) ? pow[log[x] + 0x19] : 0) +#define f3(x) ((x) ? pow[log[x] + 0x01] : 0) +#define f9(x) ((x) ? pow[log[x] + 0xc7] : 0) +#define fb(x) ((x) ? pow[log[x] + 0x68] : 0) +#define fd(x) ((x) ? pow[log[x] + 0xee] : 0) +#define fe(x) ((x) ? pow[log[x] + 0xdf] : 0) +#define fi(x) ((x) ? pow[255 - log[x]]: 0) + +#endif + +/* The forward and inverse affine transformations used in the S-box */ + +#define fwd_affine(x) \ + (w = (aes_32t)x, w ^= (w<<1)^(w<<2)^(w<<3)^(w<<4), 0x63^(aes_08t)(w^(w>>8))) + +#define inv_affine(x) \ + (w = (aes_32t)x, w = (w<<1)^(w<<3)^(w<<6), 0x05^(aes_08t)(w^(w>>8))) + +#ifdef GLOBALS +INTERNAL void gen_tabs(void) +#else +INTERNAL void gen_tabs(aes_ctx cx[1]) +#endif +{ aes_32t i, w; + +#if defined(FF_TABLES) + + aes_08t pow[512], log[256]; + + /* log and power tables for GF(2^8) finite field with + WPOLY as modular polynomial - the simplest primitive + root is 0x03, used here to generate the tables + */ + + i = 0; w = 1; + do + { + pow[i] = (aes_08t)w; + pow[i + 255] = (aes_08t)w; + log[w] = (aes_08t)i++; + w ^= (w << 1) ^ (w & 0x80 ? WPOLY : 0); + } + while (w != 1); + +#endif + +#ifndef GLOBALS + if(!cx->t_ptr) + cx->t_ptr = &s_t; +#endif + + for(i = 0, w = 1; i < RC_LENGTH; ++i) + { + t_set(r,c)[i] = bytes2word(w, 0, 0, 0); + w = f2(w); + } + + for(i = 0; i < 256; ++i) + { aes_08t b; + + b = fwd_affine(fi((aes_08t)i)); + w = bytes2word(f2(b), b, b, f3(b)); + +#ifdef SBX_SET + t_set(s,box)[i] = b; +#endif + +#ifdef FT1_SET /* tables for a normal encryption round */ + t_set(f,n)[i] = w; +#endif +#ifdef FT4_SET + t_set(f,n)[0][i] = w; + t_set(f,n)[1][i] = upr(w,1); + t_set(f,n)[2][i] = upr(w,2); + t_set(f,n)[3][i] = upr(w,3); +#endif + w = bytes2word(b, 0, 0, 0); + +#ifdef FL1_SET /* tables for last encryption round (may also */ + t_set(f,l)[i] = w; /* be used in the key schedule) */ +#endif +#ifdef FL4_SET + t_set(f,l)[0][i] = w; + t_set(f,l)[1][i] = upr(w,1); + t_set(f,l)[2][i] = upr(w,2); + t_set(f,l)[3][i] = upr(w,3); +#endif + +#ifdef LS1_SET /* table for key schedule if t_set(f,l) above is */ + t_set(l,s)[i] = w; /* not of the required form */ +#endif +#ifdef LS4_SET + t_set(l,s)[0][i] = w; + t_set(l,s)[1][i] = upr(w,1); + t_set(l,s)[2][i] = upr(w,2); + t_set(l,s)[3][i] = upr(w,3); +#endif + + b = fi(inv_affine((aes_08t)i)); + w = bytes2word(fe(b), f9(b), fd(b), fb(b)); + +#ifdef IM1_SET /* tables for the inverse mix column operation */ + t_set(i,m)[b] = w; +#endif +#ifdef IM4_SET + t_set(i,m)[0][b] = w; + t_set(i,m)[1][b] = upr(w,1); + t_set(i,m)[2][b] = upr(w,2); + t_set(i,m)[3][b] = upr(w,3); +#endif + +#ifdef ISB_SET + t_set(i,box)[i] = b; +#endif +#ifdef IT1_SET /* tables for a normal decryption round */ + t_set(i,n)[i] = w; +#endif +#ifdef IT4_SET + t_set(i,n)[0][i] = w; + t_set(i,n)[1][i] = upr(w,1); + t_set(i,n)[2][i] = upr(w,2); + t_set(i,n)[3][i] = upr(w,3); +#endif + w = bytes2word(b, 0, 0, 0); +#ifdef IL1_SET /* tables for last decryption round */ + t_set(i,l)[i] = w; +#endif +#ifdef IL4_SET + t_set(i,l)[0][i] = w; + t_set(i,l)[1][i] = upr(w,1); + t_set(i,l)[2][i] = upr(w,2); + t_set(i,l)[3][i] = upr(w,3); +#endif + } + + t_set(in,it) = 1; +} + +#endif + +#if defined(__cplusplus) +} +#endif + diff --git a/lib/gladman-fcrypt/fileenc.c b/lib/gladman-fcrypt/fileenc.c new file mode 100644 index 0000000..a96083b --- /dev/null +++ b/lib/gladman-fcrypt/fileenc.c @@ -0,0 +1,144 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file implements password based file encryption and authentication + using AES in CTR mode, HMAC-SHA1 authentication and RFC2898 password + based key derivation. + +*/ + +#include + +#include "fileenc.h" + +#if defined(__cplusplus) +extern "C" +{ +#endif + +/* subroutine for data encryption/decryption */ +/* this could be speeded up a lot by aligning */ +/* buffers and using 32 bit operations */ + +static void encr_data(unsigned char data[], unsigned long d_len, fcrypt_ctx cx[1]) + { unsigned long i = 0; + unsigned int pos = cx->encr_pos; + + while(i < d_len) + { + if(pos == BLOCK_SIZE) + { unsigned int j = 0; + /* increment encryption nonce */ + while(j < 8 && !++cx->nonce[j]) + ++j; + /* encrypt the nonce to form next xor buffer */ + aes_encrypt_block(cx->nonce, cx->encr_bfr, cx->encr_ctx); + pos = 0; + } + + data[i++] ^= cx->encr_bfr[pos++]; + } + + cx->encr_pos = pos; +} + +int _zip_fcrypt_init( + unsigned int mode, /* the mode to be used (input) */ + const unsigned char pwd[], /* the user specified password (input) */ + unsigned int pwd_len, /* the length of the password (input) */ + const unsigned char salt[], /* the salt (input) */ +#ifdef PASSWORD_VERIFIER + unsigned char pwd_ver[PWD_VER_LENGTH], /* 2 byte password verifier (output) */ +#endif + fcrypt_ctx cx[1]) /* the file encryption context (output) */ +{ unsigned char kbuf[2 * MAX_KEY_LENGTH + PWD_VER_LENGTH]; + + if(pwd_len > MAX_PWD_LENGTH) + return PASSWORD_TOO_LONG; + + if(mode < 1 || mode > 3) + return BAD_MODE; + + cx->mode = mode; + cx->pwd_len = pwd_len; + + /* derive the encryption and authetication keys and the password verifier */ + derive_key(pwd, pwd_len, salt, SALT_LENGTH(mode), KEYING_ITERATIONS, + kbuf, 2 * KEY_LENGTH(mode) + PWD_VER_LENGTH); + + /* initialise the encryption nonce and buffer pos */ + cx->encr_pos = BLOCK_SIZE; + /* if we need a random component in the encryption */ + /* nonce, this is where it would have to be set */ + memset(cx->nonce, 0, BLOCK_SIZE * sizeof(unsigned char)); + + /* initialise for encryption using key 1 */ + aes_set_encrypt_key(kbuf, KEY_LENGTH(mode), cx->encr_ctx); + + /* initialise for authentication using key 2 */ + hmac_sha1_begin(cx->auth_ctx); + hmac_sha1_key(kbuf + KEY_LENGTH(mode), KEY_LENGTH(mode), cx->auth_ctx); + +#ifdef PASSWORD_VERIFIER + memcpy(pwd_ver, kbuf + 2 * KEY_LENGTH(mode), PWD_VER_LENGTH); +#endif + + return GOOD_RETURN; +} + +/* perform 'in place' encryption and authentication */ + +void _zip_fcrypt_encrypt(unsigned char data[], unsigned int data_len, fcrypt_ctx cx[1]) +{ + encr_data(data, data_len, cx); + hmac_sha1_data(data, data_len, cx->auth_ctx); +} + +/* perform 'in place' authentication and decryption */ + +void _zip_fcrypt_decrypt(unsigned char data[], unsigned int data_len, fcrypt_ctx cx[1]) +{ + hmac_sha1_data(data, data_len, cx->auth_ctx); + encr_data(data, data_len, cx); +} + +/* close encryption/decryption and return the MAC value */ + +int _zip_fcrypt_end(unsigned char mac[], fcrypt_ctx cx[1]) +{ + hmac_sha1_end(mac, MAC_LENGTH(cx->mode), cx->auth_ctx); + return MAC_LENGTH(cx->mode); /* return MAC length in bytes */ +} + +#if defined(__cplusplus) +} +#endif diff --git a/lib/gladman-fcrypt/fileenc.h b/lib/gladman-fcrypt/fileenc.h new file mode 100644 index 0000000..d7b5234 --- /dev/null +++ b/lib/gladman-fcrypt/fileenc.h @@ -0,0 +1,121 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file contains the header file for fileenc.c, which implements password + based file encryption and authentication using AES in CTR mode, HMAC-SHA1 + authentication and RFC2898 password based key derivation. +*/ + +#ifndef _FENC_H +#define _FENC_H + +#include "aes.h" +#include "hmac.h" +#include "pwd2key.h" + +#define PASSWORD_VERIFIER + +#define MAX_KEY_LENGTH 32 +#define MAX_PWD_LENGTH 128 +#define MAX_SALT_LENGTH 16 +#define KEYING_ITERATIONS 1000 + +#ifdef PASSWORD_VERIFIER +#define PWD_VER_LENGTH 2 +#else +#define PWD_VER_LENGTH 0 +#endif + +#define GOOD_RETURN 0 +#define PASSWORD_TOO_LONG -100 +#define BAD_MODE -101 + +/* + Field lengths (in bytes) versus File Encryption Mode (0 < mode < 4) + + Mode Key Salt MAC Overhead + 1 16 8 10 18 + 2 24 12 10 22 + 3 32 16 10 26 + + The following macros assume that the mode value is correct. +*/ + +#define KEY_LENGTH(mode) (8 * (mode & 3) + 8) +#define SALT_LENGTH(mode) (4 * (mode & 3) + 4) +#define MAC_LENGTH(mode) (10) + +/* the context for file encryption */ + +#if defined(__cplusplus) +extern "C" +{ +#endif + +typedef struct +{ unsigned char nonce[BLOCK_SIZE]; /* the CTR nonce */ + unsigned char encr_bfr[BLOCK_SIZE]; /* encrypt buffer */ + aes_ctx encr_ctx[1]; /* encryption context */ + hmac_ctx auth_ctx[1]; /* authentication context */ + unsigned int encr_pos; /* block position (enc) */ + unsigned int pwd_len; /* password length */ + unsigned int mode; /* File encryption mode */ +} fcrypt_ctx; + +/* initialise file encryption or decryption */ + +int _zip_fcrypt_init( + unsigned int mode, /* the mode to be used (input) */ + const unsigned char pwd[], /* the user specified password (input) */ + unsigned int pwd_len, /* the length of the password (input) */ + const unsigned char salt[], /* the salt (input) */ +#ifdef PASSWORD_VERIFIER + unsigned char pwd_ver[PWD_VER_LENGTH], /* 2 byte password verifier (output) */ +#endif + fcrypt_ctx cx[1]); /* the file encryption context (output) */ + +/* perform 'in place' encryption or decryption and authentication */ + +void _zip_fcrypt_encrypt(unsigned char data[], unsigned int data_len, fcrypt_ctx cx[1]); +void _zip_fcrypt_decrypt(unsigned char data[], unsigned int data_len, fcrypt_ctx cx[1]); + +/* close encryption/decryption and return the MAC value */ +/* the return value is the length of the MAC */ + +int _zip_fcrypt_end(unsigned char mac[], /* the MAC value (output) */ + fcrypt_ctx cx[1]); /* the context (input) */ + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/lib/gladman-fcrypt/hmac.c b/lib/gladman-fcrypt/hmac.c new file mode 100644 index 0000000..d031a9d --- /dev/null +++ b/lib/gladman-fcrypt/hmac.c @@ -0,0 +1,150 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This is an implementation of HMAC, the FIPS standard keyed hash function +*/ + +#include "hmac.h" + +#if defined(__cplusplus) +extern "C" +{ +#endif + +/* initialise the HMAC context to zero */ +INTERNAL void hmac_sha1_begin(hmac_ctx cx[1]) +{ + memset(cx, 0, sizeof(hmac_ctx)); +} + +/* input the HMAC key (can be called multiple times) */ +INTERNAL int hmac_sha1_key(const unsigned char key[], unsigned int key_len, hmac_ctx cx[1]) +{ + if(cx->klen == HMAC_IN_DATA) /* error if further key input */ + return HMAC_BAD_MODE; /* is attempted in data mode */ + + if(cx->klen + key_len > IN_BLOCK_LENGTH) /* if the key has to be hashed */ + { + if(cx->klen <= IN_BLOCK_LENGTH) /* if the hash has not yet been */ + { /* started, initialise it and */ + sha1_begin(cx->ctx); /* hash stored key characters */ + sha1_hash(cx->key, cx->klen, cx->ctx); + } + + sha1_hash(key, key_len, cx->ctx); /* hash long key data into hash */ + } + else /* otherwise store key data */ + memcpy(cx->key + cx->klen, key, key_len); + + cx->klen += key_len; /* update the key length count */ + return HMAC_OK; +} + +/* input the HMAC data (can be called multiple times) - */ +/* note that this call terminates the key input phase */ +INTERNAL void hmac_sha1_data(const unsigned char data[], unsigned int data_len, hmac_ctx cx[1]) +{ unsigned int i; + + if(cx->klen != HMAC_IN_DATA) /* if not yet in data phase */ + { + if(cx->klen > IN_BLOCK_LENGTH) /* if key is being hashed */ + { /* complete the hash and */ + sha1_end(cx->key, cx->ctx); /* store the result as the */ + cx->klen = OUT_BLOCK_LENGTH; /* key and set new length */ + } + + /* pad the key if necessary */ + if (cx->klen < IN_BLOCK_LENGTH) + { + memset(cx->key + cx->klen, 0, IN_BLOCK_LENGTH - cx->klen); + } + + /* xor ipad into key value */ + for(i = 0; i < (IN_BLOCK_LENGTH >> 2); ++i) + ((sha1_32t*)cx->key)[i] ^= 0x36363636; + + /* and start hash operation */ + sha1_begin(cx->ctx); + sha1_hash(cx->key, IN_BLOCK_LENGTH, cx->ctx); + + /* mark as now in data mode */ + cx->klen = HMAC_IN_DATA; + } + + /* hash the data (if any) */ + if(data_len) + sha1_hash(data, data_len, cx->ctx); +} + +/* compute and output the MAC value */ +INTERNAL void hmac_sha1_end(unsigned char mac[], unsigned long mac_len, hmac_ctx cx[1]) +{ unsigned char dig[OUT_BLOCK_LENGTH]; + unsigned int i; + + /* if no data has been entered perform a null data phase */ + if(cx->klen != HMAC_IN_DATA) + hmac_sha1_data((const unsigned char*)0, 0, cx); + + sha1_end(dig, cx->ctx); /* complete the inner hash */ + + /* set outer key value using opad and removing ipad */ + for(i = 0; i < (IN_BLOCK_LENGTH >> 2); ++i) + ((sha1_32t*)cx->key)[i] ^= 0x36363636 ^ 0x5c5c5c5c; + + /* perform the outer hash operation */ + sha1_begin(cx->ctx); + sha1_hash(cx->key, IN_BLOCK_LENGTH, cx->ctx); + sha1_hash(dig, OUT_BLOCK_LENGTH, cx->ctx); + sha1_end(dig, cx->ctx); + + /* output the hash value */ + for(i = 0; i < mac_len; ++i) + mac[i] = dig[i]; +} + +#if 0 /* not used */ +/* 'do it all in one go' subroutine */ +INTERNAL void hmac_sha1(const unsigned char key[], unsigned int key_len, + const unsigned char data[], unsigned int data_len, + unsigned char mac[], unsigned int mac_len) +{ hmac_ctx cx[1]; + + hmac_sha1_begin(cx); + hmac_sha1_key(key, key_len, cx); + hmac_sha1_data(data, data_len, cx); + hmac_sha1_end(mac, mac_len, cx); +} +#endif + +#if defined(__cplusplus) +} +#endif diff --git a/lib/gladman-fcrypt/hmac.h b/lib/gladman-fcrypt/hmac.h new file mode 100644 index 0000000..f84bdcf --- /dev/null +++ b/lib/gladman-fcrypt/hmac.h @@ -0,0 +1,81 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This is an implementation of HMAC, the FIPS standard keyed hash function +*/ + +#ifndef _HMAC_H +#define _HMAC_H + +#include + +#include "sha1.h" + +#define IN_BLOCK_LENGTH SHA1_BLOCK_SIZE +#define OUT_BLOCK_LENGTH SHA1_DIGEST_SIZE +#define HMAC_IN_DATA 0xffffffff + +#define HMAC_OK 0 +#define HMAC_BAD_MODE -1 + +#if defined(__cplusplus) +extern "C" +{ +#endif + +typedef struct +{ unsigned char key[IN_BLOCK_LENGTH]; + sha1_ctx ctx[1]; + unsigned int klen; +} hmac_ctx; + +#ifdef BUILDING_FCRYPT +INTERNAL void hmac_sha1_begin(hmac_ctx cx[1]); + +INTERNAL int hmac_sha1_key(const unsigned char key[], unsigned int key_len, hmac_ctx cx[1]); + +INTERNAL void hmac_sha1_data(const unsigned char data[], unsigned int data_len, hmac_ctx cx[1]); + +INTERNAL void hmac_sha1_end(unsigned char mac[], unsigned long mac_len, hmac_ctx cx[1]); +#endif + +#if 0 /* not used */ +INTERNAL void hmac_sha1(const unsigned char key[], unsigned int key_len, + const unsigned char data[], unsigned int data_len, + unsigned char mac[], unsigned int mac_len); +#endif + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/lib/gladman-fcrypt/main.c b/lib/gladman-fcrypt/main.c new file mode 100644 index 0000000..e5e5095 --- /dev/null +++ b/lib/gladman-fcrypt/main.c @@ -0,0 +1,291 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 18th November 2008 + + A simple file encryption application based on + + a. RFC2898 for key derivation (using HMAC-SHA1) + b. AES in CTR mode for encryption + c. HMAC-SHA1 for authentication + d. A Random Data Pool based on Peter Gutmann's ideas + +The command line is: + + encfile password infile + + If the last file name extension is ".enc", the file is assumed to be an + encrypted file and an attempt is made to decrypt it with the given password, + writing the output to a file with the same name except for the ".enc" on the + end. Otherwise the file is encrypted with the given password and the output + is written to a file with the same name except that ".enc" is added on the + end. +*/ + +#include +#include +#include +#include +#include + +#include "fileenc.h" +#include "prng.h" + +/* error numbers */ +#define ERROR_USAGE 1 +#define ERROR_PASSWORD_LENGTH 2 +#define ERROR_OUT_OF_MEMORY 3 +#define ERROR_INPUT_FILE 4 +#define ERROR_OUTPUT_FILE 5 +#define ERROR_BAD_PASSWORD 6 +#define ERROR_BAD_AUTHENTICATION 7 + +/* error messages */ +char *err_string[] = +{ + "\nusage: encfile password infile outfile\n", + "\npassword is too short\n", + "\nmemory allocation has failed\n", + "\ncannot open the input file (%s)\n", + "\ncannot open the output file (%s)\n", + "\nbad password\n", + "\ndamaged file or incorrect password\n" +}; + +/* simple entropy collection function that uses the fast timer */ +/* since we are not using the random pool for generating secret */ +/* keys we don't need to be too worried about the entropy quality */ + +/* Modified in 2008 to add revised entropy generation courtesy of */ +/* WinZip Inc. This code now performs the following sequence of */ +/* entropy generation operations on sequential calls: */ +/* */ +/* - the current 8-byte Windows performance counter value */ +/* - an 8-byte representation of the current date/time */ +/* - an 8-byte value built from the current process ID */ +/* and thread ID */ +/* - all subsequent calls return the then-current 8-byte */ +/* performance counter value */ + +int entropy_fun(unsigned char buf[], unsigned int len) +{ unsigned __int64 pentium_tsc[1]; + unsigned int i; + static unsigned int num = 0; + + switch(num) + { + /* use a value that is unlikely to repeat across system reboots */ + case 1: + ++num; + GetSystemTimeAsFileTime((FILETIME *)pentium_tsc); + break; + /* use a value that distinguishes between different instances of this */ + /* code that might be running on different processors at the same time */ + case 2: + ++num; + { unsigned __int32 processtest = GetCurrentProcessId(); + unsigned __int32 threadtest = GetCurrentThreadId(); + + pentium_tsc[0] = processtest; + pentium_tsc[0] = (pentium_tsc[0] << 32) + threadtest; + } + break; + + /* use a rapidly-changing value -- check QueryPerformanceFrequency() */ + /* to ensure that QueryPerformanceCounter() will work */ + case 0: + ++num; + default: + QueryPerformanceCounter((LARGE_INTEGER *)pentium_tsc); + break; + } + + for(i = 0; i < 8 && i < len; ++i) + buf[i] = ((unsigned char*)pentium_tsc)[i]; + return i; +} + +/* this is the main file encryption/decryption routine code */ + +int main(int argc, char *argv[]) +{ FILE *inf, *outf; + unsigned char buf[1024], tmp_buf1[16], tmp_buf2[16], salt[16], *fname, *cp; + fcrypt_ctx zcx[1]; + int len, flen, err = 0; + unsigned char mode; + + if(argc != 3) /* the command line is bad */ + { + err = ERROR_USAGE; goto error_0; + } + + + len = (int)strlen(argv[1]); + + if(len < 8) /* password is too short */ + { + err = ERROR_PASSWORD_LENGTH; goto error_0; + } + + /* set the key length based on password length assuming that there */ + /* are about 4 bits of entropy per password character (the key */ + /* length and other mode dependent parameter values are set using */ + /* macros defined in fileenc.h) */ + mode = (len < 32 ? 1 : len < 48 ? 2 : 3); + + /* save input file name to a temporary memory area with extra space */ + /* for the extension ".enc" to be added */ + fname = (unsigned char*)malloc(strlen(argv[2]) + 5); + if(fname == NULL) + { + err = ERROR_OUT_OF_MEMORY; goto error_0; + } + + /* open the input file */ + strcpy(fname, argv[2]); + if((inf = fopen(fname, "rb")) == NULL) + { + err = ERROR_INPUT_FILE; goto error_1; + } + + /* if the file name extension is ".enc" assume this is an encrypted */ + /* file */ + if((cp = strrchr(fname, '.')) && strcmp(cp, ".enc") == 0) + { + *cp = 0; + mode |= 4; /* signal decryption */ + } + else /* add ".enc" to file name to mark the */ + strcat(fname, ".enc"); /* the file as an encrypted one */ + + /* open output file for binary output */ + if((outf = fopen(fname, "wb")) == NULL) + { + err = ERROR_OUTPUT_FILE; goto error_2; + } + + if(!(mode & 4)) /* encryption operation */ + { + prng_ctx rng[1]; /* the context for the random number pool */ + prng_init(entropy_fun, rng); /* initialise RNG */ + prng_rand(salt, SALT_LENGTH(mode), rng); /* and the salt */ + + /* write salt value */ + fwrite(salt, sizeof(unsigned char), SALT_LENGTH(mode), outf); + + /* initialise encryption and authentication */ +#ifdef PASSWORD_VERIFIER + fcrypt_init(mode, argv[1], (unsigned int)strlen(argv[1]), salt, tmp_buf1, zcx); + /* write password verifier (if used) */ + fwrite(tmp_buf1, sizeof(unsigned char), PWD_VER_LENGTH, outf); +#else + fcrypt_init(mode, argv[1], (unsigned int)strlen(argv[1]), salt, zcx); +#endif + /* encrypt and authenticate the file */ + len = (int)fread(buf, sizeof(unsigned char), 1024, inf); + while(len) + { + fcrypt_encrypt(buf, len, zcx); + fwrite(buf, sizeof(unsigned char), len, outf); + len = (int)fread(buf, sizeof(unsigned char), len, inf); + } + + /* write the MAC */ + fcrypt_end(tmp_buf1, zcx); + fwrite(tmp_buf1, sizeof(unsigned char), MAC_LENGTH(mode), outf); + + /* and close random pool */ + prng_end(rng); + } + else /* decryption operation */ + { + /* we need to know the file length to avoid reading the MAC */ + fseek(inf, 0, SEEK_END); + flen = ftell(inf); + fseek(inf, 0, SEEK_SET); + mode &= 3; + + /* recover the password salt */ + fread(salt, sizeof(unsigned char), SALT_LENGTH(mode), inf); flen -= SALT_LENGTH(mode); +#ifdef PASSWORD_VERIFIER + /* initialise encryption and authentication */ + fcrypt_init(mode, argv[1], (unsigned int)strlen(argv[1]), salt, tmp_buf2, zcx); + /* recover the password verifier (if used) */ + fread(tmp_buf1, sizeof(unsigned char), PWD_VER_LENGTH, inf); flen -= PWD_VER_LENGTH; + /* check password verifier */ + if(memcmp(tmp_buf1, tmp_buf2, PWD_VER_LENGTH)) + { + err = ERROR_BAD_PASSWORD; fclose(outf); goto error_2; + } +#else + /* initialise encryption and authentication */ + fcrypt_init(mode, argv[1], (unsigned int)strlen(argv[1]), salt, zcx); +#endif + + flen -= MAC_LENGTH(mode); /* avoid reading the MAC */ + /* decrypt the file */ + len = (int)fread(buf, sizeof(unsigned char), + (size_t)(flen < 1024 ? flen : 1024), inf); + while(len) + { flen -= len; + fcrypt_decrypt(buf, len, zcx); + fwrite(buf, sizeof(unsigned char), len, outf); + len = (int)fread(buf, sizeof(unsigned char), + (size_t)(flen < 1024 ? flen : 1024), inf); + } + + /* calculate the MAC value */ + fcrypt_end(tmp_buf2, zcx); + + /* now read the stored MAC value */ + fread(tmp_buf1, sizeof(unsigned char), MAC_LENGTH(mode), inf); + + /* compare the stored and calculated MAC values */ + if(memcmp(tmp_buf1, tmp_buf2, MAC_LENGTH(mode))) + { /* authentication failed */ + + err = ERROR_BAD_AUTHENTICATION; + fclose(outf); + /* delete the (bad) output file */ + remove(fname); + goto error_2; + } + } + + fclose(outf); +error_2: + fclose(inf); +error_1: + free(fname); +error_0: + if(err) + printf(err_string[err - 1], fname); + return -err; +} diff --git a/lib/gladman-fcrypt/prng.c b/lib/gladman-fcrypt/prng.c new file mode 100644 index 0000000..cdb3ca3 --- /dev/null +++ b/lib/gladman-fcrypt/prng.c @@ -0,0 +1,155 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file implements a random data pool based on the use of an external + entropy function. It is based on the ideas advocated by Peter Gutmann in + his work on pseudo random sequence generators. It is not a 'paranoid' + random sequence generator and no attempt is made to protect the pool + from prying eyes either by memory locking or by techniques to obscure + its location in memory. +*/ + +#include +#include "prng.h" + +#if defined(__cplusplus) +extern "C" +{ +#endif + +/* mix a random data pool using the SHA1 compression function (as */ +/* suggested by Peter Gutmann in his paper on random pools) */ + +static void prng_mix(unsigned char buf[]) +{ unsigned int i, len; + sha1_ctx ctx[1]; + + /*lint -e{663} unusual array to pointer conversion */ + for(i = 0; i < PRNG_POOL_SIZE; i += SHA1_DIGEST_SIZE) + { + /* copy digest size pool block into SHA1 hash block */ + memcpy(ctx->hash, buf + (i ? i : PRNG_POOL_SIZE) + - SHA1_DIGEST_SIZE, SHA1_DIGEST_SIZE); + + /* copy data from pool into the SHA1 data buffer */ + len = PRNG_POOL_SIZE - i; + memcpy(ctx->wbuf, buf + i, (len > SHA1_BLOCK_SIZE ? SHA1_BLOCK_SIZE : len)); + + if(len < SHA1_BLOCK_SIZE) + memcpy(((char*)ctx->wbuf) + len, buf, SHA1_BLOCK_SIZE - len); + + /* compress using the SHA1 compression function */ + sha1_compile(ctx); + + /* put digest size block back into the random pool */ + memcpy(buf + i, ctx->hash, SHA1_DIGEST_SIZE); + } +} + +/* refresh the output buffer and update the random pool by adding */ +/* entropy and remixing */ + +static void update_pool(prng_ctx ctx[1]) +{ unsigned int i = 0; + + /* transfer random pool data to the output buffer */ + memcpy(ctx->obuf, ctx->rbuf, PRNG_POOL_SIZE); + + /* enter entropy data into the pool */ + while(i < PRNG_POOL_SIZE) + i += ctx->entropy(ctx->rbuf + i, PRNG_POOL_SIZE - i); + + /* invert and xor the original pool data into the pool */ + for(i = 0; i < PRNG_POOL_SIZE; ++i) + ctx->rbuf[i] ^= ~ctx->obuf[i]; + + /* mix the pool and the output buffer */ + prng_mix(ctx->rbuf); + prng_mix(ctx->obuf); +} + +INTERNAL void prng_init(prng_entropy_fn fun, prng_ctx ctx[1]) +{ int i; + + /* clear the buffers and the counter in the context */ + memset(ctx, 0, sizeof(prng_ctx)); + + /* set the pointer to the entropy collection function */ + ctx->entropy = fun; + + /* initialise the random data pool */ + update_pool(ctx); + + /* mix the pool a minimum number of times */ + for(i = 0; i < PRNG_MIN_MIX; ++i) + prng_mix(ctx->rbuf); + + /* update the pool to prime the pool output buffer */ + update_pool(ctx); +} + +/* provide random bytes from the random data pool */ + +INTERNAL void prng_rand(unsigned char data[], unsigned int data_len, prng_ctx ctx[1]) +{ unsigned char *rp = data; + unsigned int len, pos = ctx->pos; + + while(data_len) + { + /* transfer 'data_len' bytes (or the number of bytes remaining */ + /* the pool output buffer if less) into the output */ + len = (data_len < PRNG_POOL_SIZE - pos ? data_len : PRNG_POOL_SIZE - pos); + memcpy(rp, ctx->obuf + pos, len); + rp += len; /* update ouput buffer position pointer */ + pos += len; /* update pool output buffer pointer */ + data_len -= len; /* update the remaining data count */ + + /* refresh the random pool if necessary */ + if(pos == PRNG_POOL_SIZE) + { + update_pool(ctx); pos = 0; + } + } + + ctx->pos = pos; +} + +INTERNAL void prng_end(prng_ctx ctx[1]) +{ + /* ensure the data in the context is destroyed */ + memset(ctx, 0, sizeof(prng_ctx)); +} + +#if defined(__cplusplus) +} +#endif + diff --git a/lib/gladman-fcrypt/prng.h b/lib/gladman-fcrypt/prng.h new file mode 100644 index 0000000..87c99d1 --- /dev/null +++ b/lib/gladman-fcrypt/prng.h @@ -0,0 +1,82 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This is the header file for an implementation of a random data pool based on + the use of an external entropy function (inspired by Peter Gutmann's work). +*/ + +#ifndef _PRNG_H +#define _PRNG_H + +#include "sha1.h" + +#define PRNG_POOL_LEN 256 /* minimum random pool size */ +#define PRNG_MIN_MIX 20 /* min initial pool mixing iterations */ + +/* ensure that pool length is a multiple of the SHA1 digest size */ + +#define PRNG_POOL_SIZE (SHA1_DIGEST_SIZE * (1 + (PRNG_POOL_LEN - 1) / SHA1_DIGEST_SIZE)) + +#if defined(__cplusplus) +extern "C" +{ +#endif + +/* A function for providing entropy is a parameter in the prng_init() */ +/* call. This function has the following form and returns a maximum */ +/* of 'len' bytes of pseudo random data in the buffer 'buf'. It can */ +/* return less than 'len' bytes but will be repeatedly called for more */ +/* data in this case. */ + +typedef int (*prng_entropy_fn)(unsigned char buf[], unsigned int len); + +typedef struct +{ unsigned char rbuf[PRNG_POOL_SIZE]; /* the random pool */ + unsigned char obuf[PRNG_POOL_SIZE]; /* pool output buffer */ + unsigned int pos; /* output buffer position */ + prng_entropy_fn entropy; /* entropy function pointer */ +} prng_ctx; + +/* initialise the random stream generator */ +INTERNAL void prng_init(prng_entropy_fn fun, prng_ctx ctx[1]); + +/* obtain random bytes from the generator */ +INTERNAL void prng_rand(unsigned char data[], unsigned int data_len, prng_ctx ctx[1]); + +/* close the random stream generator */ +INTERNAL void prng_end(prng_ctx ctx[1]); + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/lib/gladman-fcrypt/pwd2key.c b/lib/gladman-fcrypt/pwd2key.c new file mode 100644 index 0000000..3bda272 --- /dev/null +++ b/lib/gladman-fcrypt/pwd2key.c @@ -0,0 +1,159 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This is an implementation of RFC2898, which specifies key derivation from + a password and a salt value. +*/ + +#include +#include "hmac.h" + +#if defined(__cplusplus) +extern "C" +{ +#endif + +INTERNAL void derive_key(const unsigned char pwd[], /* the PASSWORD */ + unsigned int pwd_len, /* and its length */ + const unsigned char salt[], /* the SALT and its */ + unsigned int salt_len, /* length */ + unsigned int iter, /* the number of iterations */ + unsigned char key[], /* space for the output key */ + unsigned int key_len)/* and its required length */ +{ + unsigned int i, j, k, n_blk; + unsigned char uu[OUT_BLOCK_LENGTH], ux[OUT_BLOCK_LENGTH]; + hmac_ctx c1[1], c2[1], c3[1]; + + /* set HMAC context (c1) for password */ + hmac_sha1_begin(c1); + hmac_sha1_key(pwd, pwd_len, c1); + + /* set HMAC context (c2) for password and salt */ + memcpy(c2, c1, sizeof(hmac_ctx)); + hmac_sha1_data(salt, salt_len, c2); + + /* find the number of SHA blocks in the key */ + n_blk = 1 + (key_len - 1) / OUT_BLOCK_LENGTH; + + for(i = 0; i < n_blk; ++i) /* for each block in key */ + { + /* ux[] holds the running xor value */ + memset(ux, 0, OUT_BLOCK_LENGTH); + + /* set HMAC context (c3) for password and salt */ + memcpy(c3, c2, sizeof(hmac_ctx)); + + /* enter additional data for 1st block into uu */ + uu[0] = (unsigned char)((i + 1) >> 24); + uu[1] = (unsigned char)((i + 1) >> 16); + uu[2] = (unsigned char)((i + 1) >> 8); + uu[3] = (unsigned char)(i + 1); + + /* this is the key mixing iteration */ + for(j = 0, k = 4; j < iter; ++j) + { + /* add previous round data to HMAC */ + hmac_sha1_data(uu, k, c3); + + /* obtain HMAC for uu[] */ + hmac_sha1_end(uu, OUT_BLOCK_LENGTH, c3); + + /* xor into the running xor block */ + for(k = 0; k < OUT_BLOCK_LENGTH; ++k) + ux[k] ^= uu[k]; + + /* set HMAC context (c3) for password */ + memcpy(c3, c1, sizeof(hmac_ctx)); + } + + /* compile key blocks into the key output */ + j = 0; k = i * OUT_BLOCK_LENGTH; + while(j < OUT_BLOCK_LENGTH && k < key_len) + key[k++] = ux[j++]; + } +} + +#ifdef TEST + +#include + +struct +{ unsigned int pwd_len; + unsigned int salt_len; + unsigned int it_count; + unsigned char *pwd; + unsigned char salt[32]; + unsigned char key[32]; +} tests[] = +{ + { 8, 4, 5, (unsigned char*)"password", + { 0x12, 0x34, 0x56, 0x78 }, + { 0x5c, 0x75, 0xce, 0xf0, 0x1a, 0x96, 0x0d, 0xf7, + 0x4c, 0xb6, 0xb4, 0x9b, 0x9e, 0x38, 0xe6, 0xb5 } /* ... */ + }, + { 8, 8, 5, (unsigned char*)"password", + { 0x12, 0x34, 0x56, 0x78, 0x78, 0x56, 0x34, 0x12 }, + { 0xd1, 0xda, 0xa7, 0x86, 0x15, 0xf2, 0x87, 0xe6, + 0xa1, 0xc8, 0xb1, 0x20, 0xd7, 0x06, 0x2a, 0x49 } /* ... */ + } +}; + +int main() +{ unsigned int i, j, key_len = 256; + unsigned char key[256]; + + printf("\nTest of RFC2898 Password Based Key Derivation"); + for(i = 0; i < 2; ++i) + { + derive_key(tests[i].pwd, tests[i].pwd_len, tests[i].salt, + tests[i].salt_len, tests[i].it_count, key, key_len); + + printf("\ntest %i: ", i + 1); + printf("key %s", memcmp(tests[i].key, key, 16) ? "is bad" : "is good"); + for(j = 0; j < key_len && j < 64; j += 4) + { + if(j % 16 == 0) + printf("\n"); + printf("0x%02x%02x%02x%02x ", key[j], key[j + 1], key[j + 2], key[j + 3]); + } + printf(j < key_len ? " ... \n" : "\n"); + } + printf("\n"); + return 0; +} + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/lib/gladman-fcrypt/pwd2key.h b/lib/gladman-fcrypt/pwd2key.h new file mode 100644 index 0000000..b00e288 --- /dev/null +++ b/lib/gladman-fcrypt/pwd2key.h @@ -0,0 +1,60 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This is an implementation of RFC2898, which specifies key derivation from + a password and a salt value. +*/ + +#ifndef PWD2KEY_H +#define PWD2KEY_H + +#if defined(__cplusplus) +extern "C" +{ +#endif + +#ifdef BUILDING_FCRYPT +INTERNAL void derive_key( + const unsigned char pwd[], /* the PASSWORD, and */ + unsigned int pwd_len, /* its length */ + const unsigned char salt[], /* the SALT and its */ + unsigned int salt_len, /* length */ + unsigned int iter, /* the number of iterations */ + unsigned char key[], /* space for the output key */ + unsigned int key_len); /* and its required length */ +#endif + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/lib/gladman-fcrypt/sha1.c b/lib/gladman-fcrypt/sha1.c new file mode 100644 index 0000000..4e2c196 --- /dev/null +++ b/lib/gladman-fcrypt/sha1.c @@ -0,0 +1,287 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This is a byte oriented version of SHA1 that operates on arrays of bytes + stored in memory. +*/ + +#include /* for memcpy() etc. */ +#include /* for _lrotl with VC++ */ + +#include "sha1.h" + +#if defined(__cplusplus) +extern "C" +{ +#if 0 +} +#endif +#endif + +/* + To obtain the highest speed on processors with 32-bit words, this code + needs to determine the order in which bytes are packed into such words. + The following block of code is an attempt to capture the most obvious + ways in which various environemnts specify their endian definitions. + It may well fail, in which case the definitions will need to be set by + editing at the points marked **** EDIT HERE IF NECESSARY **** below. +*/ +#define SHA_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */ +#define SHA_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */ + +#include "config.h" + +#if !defined(PLATFORM_BYTE_ORDER) +# if defined(WORDS_BIGENDIAN) +# define PLATFORM_BYTE_ORDER SHA_BIG_ENDIAN +# else +# define PLATFORM_BYTE_ORDER SHA_LITTLE_ENDIAN +# endif +#endif + +#if !defined(PLATFORM_BYTE_ORDER) +#if defined(LITTLE_ENDIAN) || defined(BIG_ENDIAN) +# if defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) +# if defined(BYTE_ORDER) +# if (BYTE_ORDER == LITTLE_ENDIAN) +# define PLATFORM_BYTE_ORDER SHA_LITTLE_ENDIAN +# elif (BYTE_ORDER == BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER SHA_BIG_ENDIAN +# endif +# endif +# elif defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER SHA_LITTLE_ENDIAN +# elif !defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER SHA_BIG_ENDIAN +# endif +#elif defined(_LITTLE_ENDIAN) || defined(_BIG_ENDIAN) +# if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) +# if defined(_BYTE_ORDER) +# if (_BYTE_ORDER == _LITTLE_ENDIAN) +# define PLATFORM_BYTE_ORDER SHA_LITTLE_ENDIAN +# elif (_BYTE_ORDER == _BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER SHA_BIG_ENDIAN +# endif +# endif +# elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER SHA_LITTLE_ENDIAN +# elif !defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER SHA_BIG_ENDIAN +# endif +#elif 0 /* **** EDIT HERE IF NECESSARY **** */ +#define PLATFORM_BYTE_ORDER SHA_LITTLE_ENDIAN +#elif 0 /* **** EDIT HERE IF NECESSARY **** */ +#define PLATFORM_BYTE_ORDER SHA_BIG_ENDIAN +#elif (('1234' >> 24) == '1') +# define PLATFORM_BYTE_ORDER SHA_LITTLE_ENDIAN +#elif (('4321' >> 24) == '1') +# define PLATFORM_BYTE_ORDER SHA_BIG_ENDIAN +#endif +#endif + +#if !defined(PLATFORM_BYTE_ORDER) +# error Please set undetermined byte order (lines 87 or 89 of sha1.c). +#endif + +#define rotl32(x,n) (((x) << n) | ((x) >> (32 - n))) + +#if (PLATFORM_BYTE_ORDER == SHA_BIG_ENDIAN) +#define swap_b32(x) (x) +#elif defined(bswap_32) +#define swap_b32(x) bswap_32(x) +#else +#define swap_b32(x) ((rotl32((x), 8) & 0x00ff00ff) | (rotl32((x), 24) & 0xff00ff00)) +#endif + +#define SHA1_MASK (SHA1_BLOCK_SIZE - 1) + +/* reverse byte order in 32-bit words */ + +#define ch(x,y,z) (((x) & (y)) ^ (~(x) & (z))) +#define parity(x,y,z) ((x) ^ (y) ^ (z)) +#define maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) + +/* A normal version as set out in the FIPS */ + +#define rnd(f,k) \ + t = a; a = rotl32(a,5) + f(b,c,d) + e + k + w[i]; \ + e = d; d = c; c = rotl32(b, 30); b = t + +INTERNAL void sha1_compile(sha1_ctx ctx[1]) +{ sha1_32t w[80], i, a, b, c, d, e, t; + + /* note that words are compiled from the buffer into 32-bit */ + /* words in big-endian order so an order reversal is needed */ + /* here on little endian machines */ + for(i = 0; i < SHA1_BLOCK_SIZE / 4; ++i) + w[i] = swap_b32(ctx->wbuf[i]); + + for(i = SHA1_BLOCK_SIZE / 4; i < 80; ++i) + w[i] = rotl32(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16], 1); + + a = ctx->hash[0]; + b = ctx->hash[1]; + c = ctx->hash[2]; + d = ctx->hash[3]; + e = ctx->hash[4]; + + for(i = 0; i < 20; ++i) + { + rnd(ch, 0x5a827999); + } + + for(i = 20; i < 40; ++i) + { + rnd(parity, 0x6ed9eba1); + } + + for(i = 40; i < 60; ++i) + { + rnd(maj, 0x8f1bbcdc); + } + + for(i = 60; i < 80; ++i) + { + rnd(parity, 0xca62c1d6); + } + + ctx->hash[0] += a; + ctx->hash[1] += b; + ctx->hash[2] += c; + ctx->hash[3] += d; + ctx->hash[4] += e; +} + +INTERNAL void sha1_begin(sha1_ctx ctx[1]) +{ + ctx->count[0] = ctx->count[1] = 0; + ctx->hash[0] = 0x67452301; + ctx->hash[1] = 0xefcdab89; + ctx->hash[2] = 0x98badcfe; + ctx->hash[3] = 0x10325476; + ctx->hash[4] = 0xc3d2e1f0; +} + +/* SHA1 hash data in an array of bytes into hash buffer and */ +/* call the hash_compile function as required. */ + +INTERNAL void sha1_hash(const unsigned char data[], unsigned int len, sha1_ctx ctx[1]) +{ sha1_32t pos = (sha1_32t)(ctx->count[0] & SHA1_MASK), + space = SHA1_BLOCK_SIZE - pos; + const unsigned char *sp = data; + + if((ctx->count[0] += len) < len) + ++(ctx->count[1]); + + while(len >= space) /* tranfer whole blocks if possible */ + { + memcpy(((unsigned char*)ctx->wbuf) + pos, sp, space); + sp += space; len -= space; space = SHA1_BLOCK_SIZE; pos = 0; + sha1_compile(ctx); + } + + /*lint -e{803} conceivable data overrun */ + /* there are two cases: the above while loop entered or not */ + /* entered. If not entered, 'space = SHA1_BLOCK_SIZE - pos' */ + /* and 'len < space' so that 'len + pos < SHA1_BLOCK_SIZE'. */ + /* If entered, 'pos = 0', 'space = SHA1_BLOCK_SIZE' and */ + /* 'len < space' so that 'pos + len < SHA1_BLOCK_SIZE'. In */ + /* both cases, therefore, the memory copy is in the buffer */ + + memcpy(((unsigned char*)ctx->wbuf) + pos, sp, len); +} + +/* SHA1 final padding and digest calculation */ + +#if (PLATFORM_BYTE_ORDER == SHA_LITTLE_ENDIAN) +static sha1_32t mask[4] = + { 0x00000000, 0x000000ff, 0x0000ffff, 0x00ffffff }; +static sha1_32t bits[4] = + { 0x00000080, 0x00008000, 0x00800000, 0x80000000 }; +#else +static sha1_32t mask[4] = + { 0x00000000, 0xff000000, 0xffff0000, 0xffffff00 }; +static sha1_32t bits[4] = + { 0x80000000, 0x00800000, 0x00008000, 0x00000080 }; +#endif + +INTERNAL void sha1_end(unsigned char hval[], sha1_ctx ctx[1]) +{ sha1_32t i = (sha1_32t)(ctx->count[0] & SHA1_MASK); + + /* mask out the rest of any partial 32-bit word and then set */ + /* the next byte to 0x80. On big-endian machines any bytes in */ + /* the buffer will be at the top end of 32 bit words, on little */ + /* endian machines they will be at the bottom. Hence the AND */ + /* and OR masks above are reversed for little endian systems */ + /* Note that we can always add the first padding byte at this */ + /* point because the buffer always has at least one empty slot */ + ctx->wbuf[i >> 2] = (ctx->wbuf[i >> 2] & mask[i & 3]) | bits[i & 3]; + + /* we need 9 or more empty positions, one for the padding byte */ + /* (above) and eight for the length count. If there is not */ + /* enough space pad and empty the buffer */ + if(i > SHA1_BLOCK_SIZE - 9) + { + if(i < 60) ctx->wbuf[15] = 0; + sha1_compile(ctx); + i = 0; + } + else /* compute a word index for the empty buffer positions */ + i = (i >> 2) + 1; + + while(i < 14) /* and zero pad all but last two positions */ + ctx->wbuf[i++] = 0; + + /* assemble the eight byte counter in in big-endian format */ + ctx->wbuf[14] = swap_b32((ctx->count[1] << 3) | (ctx->count[0] >> 29)); + ctx->wbuf[15] = swap_b32(ctx->count[0] << 3); + + sha1_compile(ctx); + + /* extract the hash value as bytes in case the hash buffer is */ + /* misaligned for 32-bit words */ + /*lint -e{504} unusual shift operation (unusually formed right argument) */ + for(i = 0; i < SHA1_DIGEST_SIZE; ++i) + hval[i] = (unsigned char)(ctx->hash[i >> 2] >> (8 * (~i & 3))); +} + +#if 0 /* not used */ +INTERNAL void sha1(unsigned char hval[], const unsigned char data[], unsigned int len) +{ sha1_ctx cx[1]; + + sha1_begin(cx); sha1_hash(data, len, cx); sha1_end(hval, cx); +} +#endif + +#if defined(__cplusplus) +} +#endif diff --git a/lib/gladman-fcrypt/sha1.h b/lib/gladman-fcrypt/sha1.h new file mode 100644 index 0000000..58529d4 --- /dev/null +++ b/lib/gladman-fcrypt/sha1.h @@ -0,0 +1,79 @@ +/* + --------------------------------------------------------------------------- + Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + ALTERNATIVELY, provided that this notice is retained in full, this product + may be distributed under the terms of the GNU General Public License (GPL), + in which case the provisions of the GPL apply INSTEAD OF those given above. + + DISCLAIMER + + This software is provided 'as is' with no explicit or implied warranties + in respect of its properties, including, but not limited to, correctness + and/or fitness for purpose. + --------------------------------------------------------------------------- + Issue Date: 24/01/2003 + + This file contains the definitions needed for SHA1 +*/ + +#ifndef _SHA1_H +#define _SHA1_H + +#include + +#define SHA1_BLOCK_SIZE 64 +#define SHA1_DIGEST_SIZE 20 + +#if defined(__cplusplus) +extern "C" +{ +#endif + +/* define an unsigned 32-bit type */ + +#include "config.h" + +typedef zip_uint32_t sha1_32t; + +/* type to hold the SHA256 context */ + +typedef struct +{ sha1_32t count[2]; + sha1_32t hash[5]; + sha1_32t wbuf[16]; +} sha1_ctx; + +#ifdef BUILDING_FCRYPT +INTERNAL void sha1_compile(sha1_ctx ctx[1]); + +INTERNAL void sha1_begin(sha1_ctx ctx[1]); +INTERNAL void sha1_hash(const unsigned char data[], unsigned int len, sha1_ctx ctx[1]); +INTERNAL void sha1_end(unsigned char hval[], sha1_ctx ctx[1]); +#endif + +#if 0 /* not used */ +INTERNAL void sha1(unsigned char hval[], const unsigned char data[], unsigned int len); +#endif + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/lib/zip.h b/lib/zip.h index 27141b3..abdaf07 100644 --- a/lib/zip.h +++ b/lib/zip.h @@ -3,7 +3,7 @@ /* zip.h -- exported declarations. - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -20,7 +20,7 @@ 3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -127,7 +127,7 @@ extern "C" { #define ZIP_ER_REMOVE 22 /* S Can't remove file */ #define ZIP_ER_DELETED 23 /* N Entry has been deleted */ #define ZIP_ER_ENCRNOTSUPP 24 /* N Encryption method not supported */ -#define ZIP_ER_RDONLY 25 /* N Read-only archive */ +#define ZIP_ER_RDONLY 25 /* N Read-only archive */ #define ZIP_ER_NOPASSWD 26 /* N No password provided */ #define ZIP_ER_WRONGPASSWD 27 /* N Wrong password provided */ #define ZIP_ER_OPNOTSUPP 28 /* N Operation not supported */ @@ -161,6 +161,8 @@ extern "C" { /* 15-17 - Reserved by PKWARE */ #define ZIP_CM_TERSE 18 /* compressed using IBM TERSE (new) */ #define ZIP_CM_LZ77 19 /* IBM LZ77 z Architecture (PFS) */ +#define ZIP_CM_XZ 95 /* XZ compressed data */ +#define ZIP_CM_JPEG 96 /* Compressed Jpeg data */ #define ZIP_CM_WAVPACK 97 /* WavPack compressed data */ #define ZIP_CM_PPMD 98 /* PPMd version I, Rev 1 */ @@ -173,12 +175,15 @@ extern "C" { #define ZIP_EM_RC2_OLD 0x6602 /* strong encryption: RC2, version < 5.2 */ #define ZIP_EM_3DES_168 0x6603 #define ZIP_EM_3DES_112 0x6609 -#define ZIP_EM_AES_128 0x660e -#define ZIP_EM_AES_192 0x660f -#define ZIP_EM_AES_256 0x6610 +#define ZIP_EM_PKZIP_AES_128 0x660e +#define ZIP_EM_PKZIP_AES_192 0x660f +#define ZIP_EM_PKZIP_AES_256 0x6610 #define ZIP_EM_RC2 0x6702 /* strong encryption: RC2, version >= 5.2 */ #define ZIP_EM_RC4 0x6801 #endif +#define ZIP_EM_AES_128 0x0101 /* Winzip AES encryption */ +#define ZIP_EM_AES_192 0x0102 +#define ZIP_EM_AES_256 0x0103 #define ZIP_EM_UNKNOWN 0xffff /* unknown algorithm */ #define ZIP_OPSYS_DOS 0x00u @@ -299,9 +304,10 @@ typedef struct zip_file zip_file_t; typedef struct zip_source zip_source_t; typedef struct zip_stat zip_stat_t; -typedef zip_uint32_t zip_flags_t; +typedef zip_uint32_t zip_flags_t; typedef zip_int64_t (*zip_source_callback)(void *, void *, zip_uint64_t, zip_source_cmd_t); +typedef void (*zip_progress_callback_t)(double); #ifndef ZIP_DISABLE_DEPRECATED @@ -318,7 +324,6 @@ ZIP_EXTERN int zip_error_to_str(char *, zip_uint64_t, int, int); ZIP_EXTERN void zip_file_error_get(zip_file_t *, int *, int *); /* use zip_file_get_error, zip_error_code_zip / zip_error_code_system */ #endif -ZIP_EXTERN int zip_archive_set_tempdir(zip_t *, const char *); ZIP_EXTERN int zip_close(zip_t *); ZIP_EXTERN int zip_delete(zip_t *, zip_uint64_t); ZIP_EXTERN zip_int64_t zip_dir_add(zip_t *, const char *, zip_flags_t); @@ -353,6 +358,7 @@ ZIP_EXTERN int zip_file_get_external_attributes(zip_t *, zip_uint64_t, zip_flags ZIP_EXTERN int zip_file_rename(zip_t *, zip_uint64_t, const char *, zip_flags_t); ZIP_EXTERN int zip_file_replace(zip_t *, zip_uint64_t, zip_source_t *, zip_flags_t); ZIP_EXTERN int zip_file_set_comment(zip_t *, zip_uint64_t, const char *, zip_uint16_t, zip_flags_t); +ZIP_EXTERN int zip_file_set_encryption(zip_t *, zip_uint64_t, zip_uint16_t, const char *); ZIP_EXTERN int zip_file_set_external_attributes(zip_t *, zip_uint64_t, zip_flags_t, zip_uint8_t, zip_uint32_t); ZIP_EXTERN int zip_file_set_mtime(zip_t *, zip_uint64_t, time_t, zip_flags_t); ZIP_EXTERN const char *zip_file_strerror(zip_file_t *); @@ -361,6 +367,8 @@ ZIP_EXTERN zip_file_t *zip_fopen_encrypted(zip_t *, const char *, zip_flags_t, c ZIP_EXTERN zip_file_t *zip_fopen_index(zip_t *, zip_uint64_t, zip_flags_t); ZIP_EXTERN zip_file_t *zip_fopen_index_encrypted(zip_t *, zip_uint64_t, zip_flags_t, const char *); ZIP_EXTERN zip_int64_t zip_fread(zip_file_t *, void *, zip_uint64_t); +ZIP_EXTERN zip_int8_t zip_fseek(zip_file_t *, zip_int64_t, int); +ZIP_EXTERN zip_int64_t zip_ftell(zip_file_t *); ZIP_EXTERN const char *zip_get_archive_comment(zip_t *, int *, zip_flags_t); ZIP_EXTERN int zip_get_archive_flag(zip_t *, zip_flags_t, zip_flags_t); ZIP_EXTERN const char *zip_get_name(zip_t *, zip_uint64_t, zip_flags_t); @@ -368,6 +376,7 @@ ZIP_EXTERN zip_int64_t zip_get_num_entries(zip_t *, zip_flags_t); ZIP_EXTERN zip_int64_t zip_name_locate(zip_t *, const char *, zip_flags_t); ZIP_EXTERN zip_t *zip_open(const char *, int, int *); ZIP_EXTERN zip_t *zip_open_from_source(zip_source_t *, int, zip_error_t *); +ZIP_EXTERN void zip_register_progress_callback(zip_t *, zip_progress_callback_t); ZIP_EXTERN int zip_set_archive_comment(zip_t *, const char *, zip_uint16_t); ZIP_EXTERN int zip_set_archive_flag(zip_t *, zip_flags_t, int); ZIP_EXTERN int zip_set_default_password(zip_t *, const char *); @@ -377,7 +386,7 @@ ZIP_EXTERN zip_source_t *zip_source_buffer(zip_t *, const void *, zip_uint64_t, ZIP_EXTERN zip_source_t *zip_source_buffer_create(const void *, zip_uint64_t, int, zip_error_t *); ZIP_EXTERN int zip_source_close(zip_source_t *); ZIP_EXTERN int zip_source_commit_write(zip_source_t *); -ZIP_EXTERN zip_error_t *zip_source_error(zip_source_t *src); +ZIP_EXTERN zip_error_t *zip_source_error(zip_source_t *); ZIP_EXTERN zip_source_t *zip_source_file(zip_t *, const char *, zip_uint64_t, zip_int64_t); ZIP_EXTERN zip_source_t *zip_source_file_create(const char *, zip_uint64_t, zip_int64_t, zip_error_t *); ZIP_EXTERN zip_source_t *zip_source_filep(zip_t *, FILE *, zip_uint64_t, zip_int64_t); diff --git a/lib/zip_add_entry.c b/lib/zip_add_entry.c index 9a9465c..f6212f1 100644 --- a/lib/zip_add_entry.c +++ b/lib/zip_add_entry.c @@ -1,6 +1,6 @@ /* zip_add_entry.c -- create and init struct zip_entry - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_buffer.c b/lib/zip_buffer.c index 43864f9..7addc4b 100644 --- a/lib/zip_buffer.c +++ b/lib/zip_buffer.c @@ -1,10 +1,10 @@ /* zip_buffer.c -- bounds checked access to memory buffer - Copyright (C) 2014 Dieter Baron and Thomas Klausner - + Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner + This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -17,7 +17,7 @@ 3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,11 +49,11 @@ _zip_buffer_free(zip_buffer_t *buffer) if (buffer == NULL) { return; } - + if (buffer->free_data) { free(buffer->data); } - + free(buffer); } @@ -69,14 +69,13 @@ zip_uint8_t * _zip_buffer_get(zip_buffer_t *buffer, zip_uint64_t length) { zip_uint8_t *data; - - if (!buffer->ok || buffer->offset + length < length || buffer->offset + length > buffer->size) { - buffer->ok = false; - return NULL; + + data = _zip_buffer_peek(buffer, length); + + if (data != NULL) { + buffer->offset += length; } - - data = buffer->data + buffer->offset; - buffer->offset += length; + return data; } @@ -85,11 +84,11 @@ zip_uint16_t _zip_buffer_get_16(zip_buffer_t *buffer) { zip_uint8_t *data = _zip_buffer_get(buffer, 2); - + if (data == NULL) { return 0; } - + return (zip_uint16_t)(data[0] + (data[1] << 8)); } @@ -98,11 +97,11 @@ zip_uint32_t _zip_buffer_get_32(zip_buffer_t *buffer) { zip_uint8_t *data = _zip_buffer_get(buffer, 4); - + if (data == NULL) { return 0; } - + return ((((((zip_uint32_t)data[3] << 8) + data[2]) << 8) + data[1]) << 8) + data[0]; } @@ -111,7 +110,7 @@ zip_uint64_t _zip_buffer_get_64(zip_buffer_t *buffer) { zip_uint8_t *data = _zip_buffer_get(buffer, 8); - + if (data == NULL) { return 0; } @@ -125,11 +124,11 @@ zip_uint8_t _zip_buffer_get_8(zip_buffer_t *buffer) { zip_uint8_t *data = _zip_buffer_get(buffer, 1); - + if (data == NULL) { return 0; } - + return data[0]; } @@ -141,12 +140,25 @@ _zip_buffer_left(zip_buffer_t *buffer) } +zip_uint64_t +_zip_buffer_read(zip_buffer_t *buffer, zip_uint8_t *data, zip_uint64_t length) +{ + if (_zip_buffer_left(buffer) < length) { + length = _zip_buffer_left(buffer); + } + + memcpy(data, _zip_buffer_get(buffer, length), length); + + return length; +} + + zip_buffer_t * _zip_buffer_new(zip_uint8_t *data, zip_uint64_t size) { bool free_data = (data == NULL); zip_buffer_t *buffer; - + if (data == NULL) { if ((data = (zip_uint8_t *)malloc(size)) == NULL) { return NULL; @@ -159,13 +171,13 @@ _zip_buffer_new(zip_uint8_t *data, zip_uint64_t size) } return NULL; } - + buffer->ok = true; buffer->data = data; buffer->size = size; buffer->offset = 0; buffer->free_data = free_data; - + return buffer; } @@ -174,17 +186,17 @@ zip_buffer_t * _zip_buffer_new_from_source(zip_source_t *src, zip_uint64_t size, zip_uint8_t *buf, zip_error_t *error) { zip_buffer_t *buffer; - + if ((buffer = _zip_buffer_new(buf, size)) == NULL) { zip_error_set(error, ZIP_ER_MEMORY, 0); return NULL; } - + if (_zip_read(src, buffer->data, size, error) < 0) { _zip_buffer_free(buffer); return NULL; } - + return buffer; } @@ -203,15 +215,30 @@ _zip_buffer_ok(zip_buffer_t *buffer) } + +zip_uint8_t * +_zip_buffer_peek(zip_buffer_t *buffer, zip_uint64_t length) +{ + zip_uint8_t *data; + + if (!buffer->ok || buffer->offset + length < length || buffer->offset + length > buffer->size) { + buffer->ok = false; + return NULL; + } + + data = buffer->data + buffer->offset; + return data; +} + int _zip_buffer_put(zip_buffer_t *buffer, const void *src, size_t length) { zip_uint8_t *dst = _zip_buffer_get(buffer, length); - + if (dst == NULL) { return -1; } - + memcpy(dst, src, length); return 0; } @@ -221,14 +248,14 @@ int _zip_buffer_put_16(zip_buffer_t *buffer, zip_uint16_t i) { zip_uint8_t *data = _zip_buffer_get(buffer, 2); - + if (data == NULL) { return -1; } data[0] = (zip_uint8_t)(i & 0xff); data[1] = (zip_uint8_t)((i >> 8) & 0xff); - + return 0; } @@ -237,16 +264,16 @@ int _zip_buffer_put_32(zip_buffer_t *buffer, zip_uint32_t i) { zip_uint8_t *data = _zip_buffer_get(buffer, 4); - + if (data == NULL) { return -1; } - + data[0] = (zip_uint8_t)(i & 0xff); data[1] = (zip_uint8_t)((i >> 8) & 0xff); data[2] = (zip_uint8_t)((i >> 16) & 0xff); data[3] = (zip_uint8_t)((i >> 24) & 0xff); - + return 0; } @@ -255,11 +282,11 @@ int _zip_buffer_put_64(zip_buffer_t *buffer, zip_uint64_t i) { zip_uint8_t *data = _zip_buffer_get(buffer, 8); - + if (data == NULL) { return -1; } - + data[0] = (zip_uint8_t)(i & 0xff); data[1] = (zip_uint8_t)((i >> 8) & 0xff); data[2] = (zip_uint8_t)((i >> 16) & 0xff); @@ -268,7 +295,7 @@ _zip_buffer_put_64(zip_buffer_t *buffer, zip_uint64_t i) data[5] = (zip_uint8_t)((i >> 40) & 0xff); data[6] = (zip_uint8_t)((i >> 48) & 0xff); data[7] = (zip_uint8_t)((i >> 56) & 0xff); - + return 0; } @@ -277,13 +304,13 @@ int _zip_buffer_put_8(zip_buffer_t *buffer, zip_uint8_t i) { zip_uint8_t *data = _zip_buffer_get(buffer, 1); - + if (data == NULL) { return -1; } - + data[0] = i; - + return 0; } @@ -295,10 +322,10 @@ _zip_buffer_set_offset(zip_buffer_t *buffer, zip_uint64_t offset) buffer->ok = false; return -1; } - + buffer->ok = true; buffer->offset = offset; - + return 0; } @@ -306,7 +333,7 @@ _zip_buffer_set_offset(zip_buffer_t *buffer, zip_uint64_t offset) int _zip_buffer_skip(zip_buffer_t *buffer, zip_uint64_t length) { zip_uint64_t offset = buffer->offset + length; - + if (offset < buffer->offset) { buffer->ok = false; return -1; diff --git a/lib/zip_close.c b/lib/zip_close.c index b5eca67..88fa444 100644 --- a/lib/zip_close.c +++ b/lib/zip_close.c @@ -1,6 +1,6 @@ /* zip_close.c -- close zip archive and update changes - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -131,10 +131,14 @@ zip_close(zip_t *za) zip_entry_t *entry; zip_dirent_t *de; + if (za->progress_callback) { + za->progress_callback((double)j/survivors); + } + i = filelist[j].idx; entry = za->entry+i; - new_data = (ZIP_ENTRY_DATA_CHANGED(entry) || ZIP_ENTRY_CHANGED(entry, ZIP_DIRENT_COMP_METHOD)); + new_data = (ZIP_ENTRY_DATA_CHANGED(entry) || ZIP_ENTRY_CHANGED(entry, ZIP_DIRENT_COMP_METHOD) || ZIP_ENTRY_CHANGED(entry, ZIP_DIRENT_ENCRYPTION_METHOD)); /* create new local directory entry */ if (entry->changes == NULL) { @@ -222,6 +226,10 @@ zip_close(zip_t *za) return -1; } + if (za->progress_callback) { + za->progress_callback(1); + } + zip_discard(za); return 0; @@ -233,10 +241,11 @@ add_data(zip_t *za, zip_source_t *src, zip_dirent_t *de) { zip_int64_t offstart, offdata, offend; struct zip_stat st; - zip_source_t *s2; + zip_source_t *src_final, *src_tmp; int ret; int is_zip64; zip_flags_t flags; + bool needs_recompress, needs_decompress, needs_crc, needs_compress, needs_reencrypt, needs_decrypt, needs_encrypt; if (zip_source_stat(src, &st) < 0) { _zip_error_set_from_source(&za->error, src); @@ -259,6 +268,10 @@ add_data(zip_t *za, zip_source_t *src, zip_dirent_t *de) st.valid &= ~ZIP_STAT_COMP_SIZE; } + if ((st.valid & ZIP_STAT_ENCRYPTION_METHOD) == 0) { + st.valid |= ZIP_STAT_ENCRYPTION_METHOD; + st.encryption_method = ZIP_EM_NONE; + } flags = ZIP_EF_LOCAL; @@ -285,67 +298,123 @@ add_data(zip_t *za, zip_source_t *src, zip_dirent_t *de) if ((is_zip64=_zip_dirent_write(za, de, flags)) < 0) return -1; + needs_recompress = !((st.comp_method == de->comp_method) || (ZIP_CM_IS_DEFAULT(de->comp_method) && st.comp_method == ZIP_CM_DEFLATE)); + needs_decompress = needs_recompress && (st.comp_method != ZIP_CM_STORE); + needs_crc = (st.comp_method == ZIP_CM_STORE) || needs_decompress; + needs_compress = needs_recompress && (de->comp_method != ZIP_CM_STORE); + + needs_reencrypt = needs_recompress || (de->changed & ZIP_DIRENT_PASSWORD) || (de->encryption_method != st.encryption_method); + needs_decrypt = needs_reencrypt && (st.encryption_method != ZIP_EM_NONE); + needs_encrypt = needs_reencrypt && (de->encryption_method != ZIP_EM_NONE); + + src_final = src; + zip_source_keep(src_final); + + if (needs_decrypt) { + zip_encryption_implementation impl; + + if ((impl = _zip_get_encryption_implementation(st.encryption_method, ZIP_CODEC_DECODE)) == NULL) { + zip_error_set(&za->error, ZIP_ER_ENCRNOTSUPP, 0); + zip_source_free(src_final); + return -1; + } + if ((src_tmp = impl(za, src_final, st.encryption_method, ZIP_CODEC_DECODE, za->default_password)) == NULL) { + /* error set by impl */ + zip_source_free(src_final); + return -1; + } - if (st.comp_method == ZIP_CM_STORE || (ZIP_CM_IS_DEFAULT(de->comp_method) && st.comp_method != de->comp_method)) { - zip_source_t *s_store, *s_crc; + zip_source_free(src_final); + src_final = src_tmp; + } + + if (needs_decompress) { zip_compression_implementation comp_impl; - if (st.comp_method != ZIP_CM_STORE) { - if ((comp_impl=_zip_get_compression_implementation(st.comp_method)) == NULL) { - zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0); - return -1; - } - if ((s_store=comp_impl(za, src, st.comp_method, ZIP_CODEC_DECODE)) == NULL) { - /* error set by comp_impl */ - return -1; - } + if ((comp_impl = _zip_get_compression_implementation(st.comp_method, ZIP_CODEC_DECODE)) == NULL) { + zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0); + zip_source_free(src_final); + return -1; } - else { - /* to have the same reference count to src as in the case where it's not stored */ - zip_source_keep(src); - s_store = src; + if ((src_tmp = comp_impl(za, src_final, st.comp_method, ZIP_CODEC_DECODE)) == NULL) { + /* error set by comp_impl */ + zip_source_free(src_final); + return -1; } - s_crc = zip_source_crc(za, s_store, 0); - zip_source_free(s_store); - if (s_crc == NULL) { + zip_source_free(src_final); + src_final = src_tmp; + } + + if (needs_crc) { + if ((src_tmp = zip_source_crc(za, src_final, 0)) == NULL) { + zip_source_free(src_final); return -1; } - if (de->comp_method != ZIP_CM_STORE && ((st.valid & ZIP_STAT_SIZE) == 0 || st.size != 0)) { - if ((comp_impl=_zip_get_compression_implementation(de->comp_method)) == NULL) { - zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0); - zip_source_free(s_crc); - return -1; - } - s2 = comp_impl(za, s_crc, de->comp_method, ZIP_CODEC_ENCODE); - zip_source_free(s_crc); - if (s2 == NULL) { - return -1; - } + zip_source_free(src_final); + src_final = src_tmp; + } + + if (needs_compress) { + zip_compression_implementation comp_impl; + + if ((comp_impl = _zip_get_compression_implementation(de->comp_method, ZIP_CODEC_ENCODE)) == NULL) { + zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0); + zip_source_free(src_final); + return -1; } - else { - s2 = s_crc; + if ((src_tmp = comp_impl(za, src_final, de->comp_method, ZIP_CODEC_ENCODE)) == NULL) { + zip_source_free(src_final); + return -1; } + + zip_source_free(src_final); + src_final = src_tmp; } - else { - zip_source_keep(src); - s2 = src; + + + if (needs_encrypt) { + zip_encryption_implementation impl; + const char *password = NULL; + + if (de->password) { + password = de->password; + } else if (za->default_password) { + password = za->default_password; + } + + if ((impl = _zip_get_encryption_implementation(de->encryption_method, ZIP_CODEC_ENCODE)) == NULL) { + zip_error_set(&za->error, ZIP_ER_ENCRNOTSUPP, 0); + zip_source_free(src_final); + return -1; + } + if ((src_tmp = impl(za, src_final, de->encryption_method, ZIP_CODEC_ENCODE, password)) == NULL) { + /* error set by impl */ + zip_source_free(src_final); + return -1; + } + + zip_source_free(src_final); + src_final = src_tmp; } + if ((offdata = zip_source_tell_write(za->src)) < 0) { return -1; } - ret = copy_source(za, s2); + ret = copy_source(za, src_final); - if (zip_source_stat(s2, &st) < 0) + if (zip_source_stat(src_final, &st) < 0) { ret = -1; + } - zip_source_free(s2); + zip_source_free(src_final); - if (ret < 0) + if (ret < 0) { return -1; + } if ((offend = zip_source_tell_write(za->src)) < 0) { return -1; diff --git a/lib/zip_delete.c b/lib/zip_delete.c index 34520b0..e160210 100644 --- a/lib/zip_delete.c +++ b/lib/zip_delete.c @@ -1,6 +1,6 @@ /* zip_delete.c -- delete file from zip archive - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_dirent.c b/lib/zip_dirent.c index 74f8988..df38afd 100644 --- a/lib/zip_dirent.c +++ b/lib/zip_dirent.c @@ -44,6 +44,7 @@ static time_t _zip_d2u_time(zip_uint16_t, zip_uint16_t); static zip_string_t *_zip_dirent_process_ef_utf_8(const zip_dirent_t *de, zip_uint16_t id, zip_string_t *str); static zip_extra_field_t *_zip_ef_utf8(zip_uint16_t, zip_string_t *, zip_error_t *); +static bool _zip_dirent_process_winzip_aes(zip_dirent_t *de, zip_error_t *error); void @@ -66,29 +67,58 @@ zip_cdir_t * _zip_cdir_new(zip_uint64_t nentry, zip_error_t *error) { zip_cdir_t *cd; - zip_uint64_t i; if ((cd=(zip_cdir_t *)malloc(sizeof(*cd))) == NULL) { zip_error_set(error, ZIP_ER_MEMORY, 0); return NULL; } - if (nentry == 0) - cd->entry = NULL; - else if ((nentry > SIZE_MAX/sizeof(*(cd->entry))) || (cd->entry=(zip_entry_t *)malloc(sizeof(*(cd->entry))*(size_t)nentry)) == NULL) { - zip_error_set(error, ZIP_ER_MEMORY, 0); - free(cd); + cd->entry = NULL; + cd->nentry = cd->nentry_alloc = 0; + cd->size = cd->offset = 0; + cd->comment = NULL; + cd->is_zip64 = false; + + if (!_zip_cdir_grow(cd, nentry, error)) { + _zip_cdir_free(cd); return NULL; } - for (i=0; inentry_alloc + additional_entries; + + if (new_alloc < additional_entries || new_alloc > SIZE_MAX/sizeof(*(cd->entry))) { + zip_error_set(error, ZIP_ER_MEMORY, 0); + return false; + } + + if ((new_entry = (zip_entry_t *)realloc(cd->entry, sizeof(*(cd->entry))*(size_t)new_alloc)) == NULL) { + zip_error_set(error, ZIP_ER_MEMORY, 0); + return false; + } + + cd->entry = new_entry; + + for (i = cd->nentry; i < new_alloc; i++) { _zip_entry_init(cd->entry+i); + } - cd->nentry = cd->nentry_alloc = nentry; - cd->size = cd->offset = 0; - cd->comment = NULL; + cd->nentry = cd->nentry_alloc = new_alloc; - return cd; + return true; } @@ -222,6 +252,13 @@ _zip_dirent_finalize(zip_dirent_t *zde) _zip_string_free(zde->comment); zde->comment = NULL; } + if (!zde->cloned || zde->changed & ZIP_DIRENT_PASSWORD) { + if (zde->password) { + _zip_crypto_clear(zde->password, strlen(zde->password)); + } + free(zde->password); + zde->password = NULL; + } } @@ -243,6 +280,7 @@ _zip_dirent_init(zip_dirent_t *de) de->local_extra_fields_read = 0; de->cloned = 0; + de->crc_valid = true; de->version_madeby = 20 | (ZIP_OPSYS_DEFAULT << 8); de->version_needed = 20; /* 2.0 */ de->bitflags = 0; @@ -258,6 +296,8 @@ _zip_dirent_init(zip_dirent_t *de) de->int_attrib = 0; de->ext_attrib = ZIP_EXT_ATTRIB_DEFAULT; de->offset = 0; + de->encryption_method = ZIP_EM_NONE; + de->password = NULL; } @@ -372,6 +412,19 @@ _zip_dirent_read(zip_dirent_t *zde, zip_source_t *src, zip_buffer_t *buffer, boo return -1; } + if (zde->bitflags & ZIP_GPBF_ENCRYPTED) { + if (zde->bitflags & ZIP_GPBF_STRONG_ENCRYPTION) { + /* TODO */ + zde->encryption_method = ZIP_EM_UNKNOWN; + } + else { + zde->encryption_method = ZIP_EM_TRAD_PKWARE; + } + } + else { + zde->encryption_method = ZIP_EM_NONE; + } + zde->filename = NULL; zde->extra_fields = NULL; zde->comment = NULL; @@ -524,6 +577,13 @@ _zip_dirent_read(zip_dirent_t *zde, zip_source_t *src, zip_buffer_t *buffer, boo return -1; } + if (!_zip_dirent_process_winzip_aes(zde, error)) { + if (!from_buffer) { + _zip_buffer_free(buffer); + } + return -1; + } + zde->extra_fields = _zip_ef_remove_internal(zde->extra_fields); return (zip_int64_t)(size + variable_size); @@ -566,6 +626,90 @@ _zip_dirent_process_ef_utf_8(const zip_dirent_t *de, zip_uint16_t id, zip_string } +static bool +_zip_dirent_process_winzip_aes(zip_dirent_t *de, zip_error_t *error) +{ + zip_uint16_t ef_len; + zip_buffer_t *buffer; + const zip_uint8_t *ef; + bool crc_valid; + zip_uint16_t enc_method; + + + if (de->comp_method != ZIP_CM_WINZIP_AES) { + return true; + } + + ef = _zip_ef_get_by_id(de->extra_fields, &ef_len, ZIP_EF_WINZIP_AES, 0, ZIP_EF_BOTH, NULL); + + if (ef == NULL || ef_len < 7) { + zip_error_set(error, ZIP_ER_INCONS, 0); + return false; + } + + if ((buffer = _zip_buffer_new((zip_uint8_t *)ef, ef_len)) == NULL) { + zip_error_set(error, ZIP_ER_INTERNAL, 0); + return false; + } + + /* version */ + + crc_valid = true; + switch (_zip_buffer_get_16(buffer)) { + case 1: + break; + + case 2: + if (de->uncomp_size < 20 /* TODO: constant */) { + crc_valid = false; + } + break; + + default: + zip_error_set(error, ZIP_ER_ENCRNOTSUPP, 0); + _zip_buffer_free(buffer); + return false; + } + + /* vendor */ + if (memcmp(_zip_buffer_get(buffer, 2), "AE", 2) != 0) { + zip_error_set(error, ZIP_ER_ENCRNOTSUPP, 0); + _zip_buffer_free(buffer); + return false; + } + + /* mode */ + switch (_zip_buffer_get_8(buffer)) { + case 1: + enc_method = ZIP_EM_AES_128; + break; + case 2: + enc_method = ZIP_EM_AES_192; + break; + case 3: + enc_method = ZIP_EM_AES_256; + break; + default: + zip_error_set(error, ZIP_ER_ENCRNOTSUPP, 0); + _zip_buffer_free(buffer); + return false; + } + + if (ef_len != 7) { + zip_error_set(error, ZIP_ER_INCONS, 0); + _zip_buffer_free(buffer); + return false; + } + + de->crc_valid = crc_valid; + de->encryption_method = enc_method; + de->comp_method = _zip_buffer_get_16(buffer); + + _zip_buffer_free(buffer); + return true; +} + + zip_int32_t _zip_dirent_size(zip_source_t *src, zip_uint16_t flags, zip_error_t *error) { @@ -621,6 +765,7 @@ _zip_dirent_write(zip_t *za, zip_dirent_t *de, zip_flags_t flags) zip_uint32_t ef_total_size; bool is_zip64; bool is_really_zip64; + bool is_winzip_aes; zip_uint8_t buf[CDENTRYSIZE]; zip_buffer_t *buffer; @@ -651,8 +796,16 @@ _zip_dirent_write(zip_t *za, zip_dirent_t *de, zip_flags_t flags) } } + if (de->encryption_method == ZIP_EM_NONE) { + de->bitflags &= ~ZIP_GPBF_ENCRYPTED; + } + else { + de->bitflags |= ZIP_GPBF_ENCRYPTED; + } + is_really_zip64 = _zip_dirent_needs_zip64(de, flags); is_zip64 = (flags & (ZIP_FL_LOCAL|ZIP_FL_FORCE_ZIP64)) == (ZIP_FL_LOCAL|ZIP_FL_FORCE_ZIP64) || is_really_zip64; + is_winzip_aes = de->encryption_method == ZIP_EM_AES_128 || de->encryption_method == ZIP_EM_AES_192 || de->encryption_method == ZIP_EM_AES_256; if (is_zip64) { zip_uint8_t ef_zip64[EFZIP64SIZE]; @@ -696,6 +849,35 @@ _zip_dirent_write(zip_t *za, zip_dirent_t *de, zip_flags_t flags) ef = ef64; } + if (is_winzip_aes) { + zip_uint8_t data[EF_WINZIP_AES_SIZE]; + zip_buffer_t *ef_buffer = _zip_buffer_new(data, sizeof(data)); + zip_extra_field_t *ef_winzip; + + if (ef_buffer == NULL) { + zip_error_set(&za->error, ZIP_ER_MEMORY, 0); + _zip_ef_free(ef); + return -1; + } + + _zip_buffer_put_16(ef_buffer, 2); + _zip_buffer_put(ef_buffer, "AE", 2); + _zip_buffer_put_8(ef_buffer, (de->encryption_method & 0xff)); + _zip_buffer_put_16(ef_buffer, (zip_uint16_t)de->comp_method); + + if (!_zip_buffer_ok(ef_buffer)) { + zip_error_set(&za->error, ZIP_ER_INTERNAL, 0); + _zip_buffer_free(ef_buffer); + _zip_ef_free(ef); + return -1; + } + + ef_winzip = _zip_ef_new(ZIP_EF_WINZIP_AES, EF_WINZIP_AES_SIZE, data, ZIP_EF_BOTH); + _zip_buffer_free(ef_buffer); + ef_winzip->next = ef; + ef = ef_winzip; + } + if ((buffer = _zip_buffer_new(buf, sizeof(buf))) == NULL) { zip_error_set(&za->error, ZIP_ER_MEMORY, 0); _zip_ef_free(ef); @@ -709,13 +891,23 @@ _zip_dirent_write(zip_t *za, zip_dirent_t *de, zip_flags_t flags) } _zip_buffer_put_16(buffer, (zip_uint16_t)(is_really_zip64 ? 45 : de->version_needed)); _zip_buffer_put_16(buffer, de->bitflags&0xfff9); /* clear compression method specific flags */ - _zip_buffer_put_16(buffer, (zip_uint16_t)de->comp_method); + if (is_winzip_aes) { + _zip_buffer_put_16(buffer, ZIP_CM_WINZIP_AES); + } + else { + _zip_buffer_put_16(buffer, (zip_uint16_t)de->comp_method); + } _zip_u2d_time(de->last_mod, &dostime, &dosdate); _zip_buffer_put_16(buffer, dostime); _zip_buffer_put_16(buffer, dosdate); - _zip_buffer_put_32(buffer, de->crc); + if (is_winzip_aes && de->uncomp_size < 20) { + _zip_buffer_put_32(buffer, 0); + } + else { + _zip_buffer_put_32(buffer, de->crc); + } if (((flags & ZIP_FL_LOCAL) == ZIP_FL_LOCAL) && ((de->comp_size >= ZIP_UINT32_MAX) || (de->uncomp_size >= ZIP_UINT32_MAX))) { /* In local headers, if a ZIP64 EF is written, it MUST contain diff --git a/lib/zip_discard.c b/lib/zip_discard.c index 1876c84..ef891e3 100644 --- a/lib/zip_discard.c +++ b/lib/zip_discard.c @@ -1,6 +1,6 @@ /* zip_discard.c -- discard and free struct zip - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_err_str.c b/lib/zip_err_str.c index 65698be..9c9adb5 100644 --- a/lib/zip_err_str.c +++ b/lib/zip_err_str.c @@ -31,7 +31,7 @@ const char * const _zip_err_str[] = { "Can't remove file", "Entry has been deleted", "Encryption method not supported", - "Read-only archive", + "Read-only archive", "No password provided", "Wrong password provided", "Operation not supported", @@ -71,7 +71,7 @@ const int _zip_err_type[] = { S, N, N, - N, + N, N, N, N, diff --git a/lib/zip_error.c b/lib/zip_error.c index 43ddf4f..5f4e07d 100644 --- a/lib/zip_error.c +++ b/lib/zip_error.c @@ -1,6 +1,6 @@ /* zip_error.c -- zip_error_t helper functions - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_error_strerror.c b/lib/zip_error_strerror.c index 29efc8a..bdc1e44 100644 --- a/lib/zip_error_strerror.c +++ b/lib/zip_error_strerror.c @@ -1,6 +1,6 @@ /* zip_error_sterror.c -- get string representation of struct zip_error - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_error_to_str.c b/lib/zip_error_to_str.c index 22de177..019feff 100644 --- a/lib/zip_error_to_str.c +++ b/lib/zip_error_to_str.c @@ -1,6 +1,6 @@ /* zip_error_to_str.c -- get string representation of zip error code - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_extra_field.c b/lib/zip_extra_field.c index 0350478..a01ff79 100644 --- a/lib/zip_extra_field.c +++ b/lib/zip_extra_field.c @@ -1,6 +1,6 @@ /* zip_extra_field.c -- manipulate extra fields - Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner + Copyright (C) 2012-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_fdopen.c b/lib/zip_fdopen.c index bbcdf4f..a058f81 100644 --- a/lib/zip_fdopen.c +++ b/lib/zip_fdopen.c @@ -1,6 +1,6 @@ /* zip_fdopen.c -- open read-only archive from file descriptor - Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_file_get_offset.c b/lib/zip_file_get_offset.c index 0257b04..826650e 100644 --- a/lib/zip_file_get_offset.c +++ b/lib/zip_file_get_offset.c @@ -1,6 +1,6 @@ /* zip_file_get_offset.c -- get offset of file data in archive. - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_file_set_encryption.c b/lib/zip_file_set_encryption.c new file mode 100644 index 0000000..a7ed748 --- /dev/null +++ b/lib/zip_file_set_encryption.c @@ -0,0 +1,117 @@ +/* + zip_file_set_encryption.c -- set encryption for file in archive + Copyright (C) 2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 "zipint.h" + +#include +#include + +ZIP_EXTERN int +zip_file_set_encryption(zip_t *za, zip_uint64_t idx, zip_uint16_t method, const char *password) +{ + zip_entry_t *e; + zip_uint16_t old_method; + + if (idx >= za->nentry) { + zip_error_set(&za->error, ZIP_ER_INVAL, 0); + return -1; + } + + if (ZIP_IS_RDONLY(za)) { + zip_error_set(&za->error, ZIP_ER_RDONLY, 0); + return -1; + } + + if (method != ZIP_EM_NONE && _zip_get_encryption_implementation(method, ZIP_CODEC_ENCODE) == NULL) { + zip_error_set(&za->error, ZIP_ER_ENCRNOTSUPP, 0); + return -1; + } + + e = za->entry+idx; + + old_method = (e->orig == NULL ? ZIP_EM_NONE : e->orig->encryption_method); + + if (method == old_method && password == NULL) { + if (e->changes) { + if (e->changes->changed & ZIP_DIRENT_PASSWORD) { + _zip_crypto_clear(e->changes->password, strlen(e->changes->password)); + free(e->changes->password); + e->changes->password = (e->orig == NULL ? NULL : e->orig->password); + } + e->changes->changed &= ~(ZIP_DIRENT_ENCRYPTION_METHOD|ZIP_DIRENT_PASSWORD); + if (e->changes->changed == 0) { + _zip_dirent_free(e->changes); + e->changes = NULL; + } + } + } + else { + char *our_password = NULL; + + if (password) { + if ((our_password = strdup(password)) == NULL) { + zip_error_set(&za->error, ZIP_ER_MEMORY, 0); + return -1; + } + } + + if (e->changes == NULL) { + if ((e->changes=_zip_dirent_clone(e->orig)) == NULL) { + if (our_password) { + _zip_crypto_clear(our_password, strlen(our_password)); + } + free(our_password); + zip_error_set(&za->error, ZIP_ER_MEMORY, 0); + return -1; + } + } + + e->changes->encryption_method = method; + e->changes->changed |= ZIP_DIRENT_ENCRYPTION_METHOD; + if (password) { + e->changes->password = our_password; + e->changes->changed |= ZIP_DIRENT_PASSWORD; + } + else { + if (e->changes->changed & ZIP_DIRENT_PASSWORD) { + _zip_crypto_clear(e->changes->password, strlen(e->changes->password)); + free(e->changes->password); + e->changes->password = e->orig ? e->orig->password : NULL; + e->changes->changed &= ~ZIP_DIRENT_PASSWORD; + } + } + } + + return 0; +} diff --git a/lib/zip_filerange_crc.c b/lib/zip_filerange_crc.c index f2a27fa..775af9a 100644 --- a/lib/zip_filerange_crc.c +++ b/lib/zip_filerange_crc.c @@ -1,6 +1,6 @@ /* zip_filerange_crc.c -- compute CRC32 for a range of a file - Copyright (C) 2008-2015 Dieter Baron and Thomas Klausner + Copyright (C) 2008-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_fopen_index.c b/lib/zip_fopen_index.c index 7496f98..0fb150b 100644 --- a/lib/zip_fopen_index.c +++ b/lib/zip_fopen_index.c @@ -1,6 +1,6 @@ /* zip_fopen_index.c -- open file in zip archive for reading by index - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_fopen_index_encrypted.c b/lib/zip_fopen_index_encrypted.c index 92258e8..4c32e02 100644 --- a/lib/zip_fopen_index_encrypted.c +++ b/lib/zip_fopen_index_encrypted.c @@ -1,6 +1,6 @@ /* zip_fopen_index_encrypted.c -- open file for reading by index w/ password - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_fseek.c b/lib/zip_fseek.c new file mode 100644 index 0000000..a16af1a --- /dev/null +++ b/lib/zip_fseek.c @@ -0,0 +1,54 @@ +/* + zip_fseek.c -- seek in file + Copyright (C) 2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 "zipint.h" +#include + +ZIP_EXTERN zip_int8_t +zip_fseek(zip_file_t *zf, zip_int64_t offset, int whence) +{ + + if (!zf) + return -1; + + if (zf->error.zip_err != 0) + return -1; + + if (zip_source_seek(zf->src, offset, whence) < 0) { + _zip_error_set_from_source(&zf->error, zf->src); + return -1; + } + + return 0; +} diff --git a/lib/zip_ftell.c b/lib/zip_ftell.c new file mode 100644 index 0000000..abbf296 --- /dev/null +++ b/lib/zip_ftell.c @@ -0,0 +1,56 @@ +/* + zip_ftell.c -- tell position in file + Copyright (C) 2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 "zipint.h" +#include + +ZIP_EXTERN zip_int64_t +zip_ftell(zip_file_t *zf) +{ + zip_int64_t res; + + if (!zf) + return -1; + + if (zf->error.zip_err != 0) + return -1; + + res = zip_source_tell(zf->src); + if (res < 0) { + _zip_error_set_from_source(&zf->error, zf->src); + return -1; + } + + return res; +} diff --git a/lib/zip_get_compression_implementation.c b/lib/zip_get_compression_implementation.c index c1120d3..5f8d0c7 100644 --- a/lib/zip_get_compression_implementation.c +++ b/lib/zip_get_compression_implementation.c @@ -1,6 +1,6 @@ /* zip_get_compression_implementation.c -- get compression implementation - Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -36,7 +36,7 @@ zip_compression_implementation -_zip_get_compression_implementation(zip_int32_t cm) +_zip_get_compression_implementation(zip_int32_t cm, int operation) { if (cm == ZIP_CM_DEFLATE || ZIP_CM_IS_DEFAULT(cm)) return zip_source_deflate; diff --git a/lib/zip_get_encryption_implementation.c b/lib/zip_get_encryption_implementation.c index e2f833b..f8af7b0 100644 --- a/lib/zip_get_encryption_implementation.c +++ b/lib/zip_get_encryption_implementation.c @@ -1,6 +1,6 @@ /* zip_get_encryption_implementation.c -- get encryption implementation - Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -36,9 +36,21 @@ zip_encryption_implementation -_zip_get_encryption_implementation(zip_uint16_t em) +_zip_get_encryption_implementation(zip_uint16_t em, int operation) { - if (em == ZIP_EM_TRAD_PKWARE) + switch (em) { + case ZIP_EM_TRAD_PKWARE: + if (operation == ZIP_CODEC_ENCODE) { + return NULL; + } return zip_source_pkware; - return NULL; + + case ZIP_EM_AES_128: + case ZIP_EM_AES_192: + case ZIP_EM_AES_256: + return operation == ZIP_CODEC_DECODE ? zip_source_winzip_aes_decode : zip_source_winzip_aes_encode; + + default: + return NULL; + } } diff --git a/lib/zip_io_util.c b/lib/zip_io_util.c index b16927d..53a5dd2 100644 --- a/lib/zip_io_util.c +++ b/lib/zip_io_util.c @@ -1,6 +1,6 @@ /* zip_io_util.c -- I/O helper functions - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_name_locate.c b/lib/zip_name_locate.c index 50ca40b..706093f 100644 --- a/lib/zip_name_locate.c +++ b/lib/zip_name_locate.c @@ -1,6 +1,6 @@ /* zip_name_locate.c -- get index by name - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_new.c b/lib/zip_new.c index 562dd76..c05c2a3 100644 --- a/lib/zip_new.c +++ b/lib/zip_new.c @@ -1,6 +1,6 @@ /* zip_new.c -- create and init struct zip - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -68,7 +68,7 @@ _zip_new(zip_error_t *error) za->entry = NULL; za->nopen_source = za->nopen_source_alloc = 0; za->open_source = NULL; - za->tempdir = NULL; + za->progress_callback = NULL; return za; } diff --git a/lib/zip_open.c b/lib/zip_open.c index d6209ee..f62f95f 100644 --- a/lib/zip_open.c +++ b/lib/zip_open.c @@ -1,6 +1,6 @@ /* zip_open.c -- open zip archive by name - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -17,7 +17,7 @@ 3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -88,17 +88,17 @@ zip_open_from_source(zip_source_t *src, int _flags, zip_error_t *error) { static zip_int64_t needed_support_read = -1; static zip_int64_t needed_support_write = -1; - + unsigned int flags; zip_int64_t supported; exists_t exists; - + if (_flags < 0 || src == NULL) { zip_error_set(error, ZIP_ER_INVAL, 0); return NULL; } flags = (unsigned int)_flags; - + supported = zip_source_supports(src); if (needed_support_read == -1) { needed_support_read = zip_source_make_command_bitmap(ZIP_SOURCE_OPEN, ZIP_SOURCE_READ, ZIP_SOURCE_CLOSE, ZIP_SOURCE_SEEK, ZIP_SOURCE_TELL, ZIP_SOURCE_STAT, -1); @@ -118,7 +118,7 @@ zip_open_from_source(zip_source_t *src, int _flags, zip_error_t *error) } exists = _zip_file_exists(src, error); - switch (exists) { + switch (exists) { case EXISTS_ERROR: return NULL; @@ -157,26 +157,13 @@ zip_open_from_source(zip_source_t *src, int _flags, zip_error_t *error) } } -ZIP_EXTERN int -zip_archive_set_tempdir(zip_t *za, const char *tempdir) +ZIP_EXTERN void +zip_register_progress_callback(zip_t *za, zip_progress_callback_t progress_callback) { - char *new_tempdir; - - if (tempdir) { - if ((new_tempdir = strdup(tempdir)) == NULL) { - zip_error_set(&za->error, ZIP_ER_MEMORY, errno); - return -1; - } - } - else - new_tempdir = NULL; - - free(za->tempdir); - za->tempdir = new_tempdir; - - return 0; + za->progress_callback = progress_callback; } + zip_t * _zip_open(zip_source_t *src, unsigned int flags, zip_error_t *error) { @@ -209,7 +196,7 @@ _zip_open(zip_source_t *src, unsigned int flags, zip_error_t *error) if ((za=_zip_allocate_new(src, flags, error)) == NULL) { return NULL; } - + if ((cdir = _zip_find_central_dir(za, len)) == NULL) { _zip_error_copy(error, &za->error); /* keep src so discard does not get rid of it */ @@ -233,7 +220,7 @@ _zip_open(zip_source_t *src, unsigned int flags, zip_error_t *error) zip_discard(za); return NULL; } - + if (_zip_hash_add(za->names, name, idx, ZIP_FL_UNCHANGED, &za->error) == false) { if (za->error.zip_err != ZIP_ER_EXISTS || (flags & ZIP_CHECKCONS)) { _zip_error_copy(error, &za->error); @@ -244,7 +231,7 @@ _zip_open(zip_source_t *src, unsigned int flags, zip_error_t *error) } } } - + za->ch_flags = za->flags; return za; @@ -269,7 +256,7 @@ _zip_set_open_error(int *zep, const zip_error_t *err, int ze) /* _zip_readcdir: tries to find a valid end-of-central-directory at the beginning of buf, and then the corresponding central directory entries. - Returns a struct zip_cdir which contains the central directory + Returns a struct zip_cdir which contains the central directory entries, or NULL if unsuccessful. */ static zip_cdir_t * @@ -286,7 +273,7 @@ _zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_err zip_error_set(error, ZIP_ER_NOZIP, 0); return NULL; } - + /* check for end-of-central-dir magic */ if (memcmp(_zip_buffer_get(buffer, 4), EOCD_MAGIC, 4) != 0) { zip_error_set(error, ZIP_ER_NOZIP, 0); @@ -317,10 +304,10 @@ _zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_err if (comment_len || (za->open_flags & ZIP_CHECKCONS)) { zip_uint64_t tail_len; - + _zip_buffer_set_offset(buffer, eocd_offset + EOCDLEN); tail_len = _zip_buffer_left(buffer); - + if (tail_len < comment_len || ((za->open_flags & ZIP_CHECKCONS) && tail_len != comment_len)) { zip_error_set(error, ZIP_ER_INCONS, 0); _zip_cdir_free(cd); @@ -339,7 +326,7 @@ _zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_err zip_uint8_t *data; /* if buffer already read in, use it */ _zip_buffer_set_offset(buffer, cd->offset - buf_offset); - + if ((data = _zip_buffer_get(buffer, cd->size)) == NULL) { zip_error_set(error, ZIP_ER_INCONS, 0); _zip_cdir_free(cd); @@ -353,7 +340,7 @@ _zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_err } else { cd_buffer = NULL; - + if (zip_source_seek(za->src, (zip_int64_t)cd->offset, SEEK_SET) < 0) { _zip_error_set_from_source(error, za->src); _zip_cdir_free(cd); @@ -370,9 +357,30 @@ _zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_err left = (zip_uint64_t)cd->size; i=0; - while (inentry && left > 0) { + while (left > 0) { + bool grown = false; zip_int64_t entry_size; + + if (i == cd->nentry) { + /* InfoZIP has a hack to avoid using Zip64: it stores nentries % 0x10000 */ + /* This hack isn't applicable if we're using Zip64, or if there is no central directory entry following. */ + + if (cd->is_zip64 || left < CDENTRYSIZE) { + break; + } + + if (!_zip_cdir_grow(cd, 0x10000, error)) { + _zip_cdir_free(cd); + _zip_buffer_free(cd_buffer); + return NULL; + } + grown = true; + } + if ((cd->entry[i].orig=_zip_dirent_new()) == NULL || (entry_size = _zip_dirent_read(cd->entry[i].orig, za->src, cd_buffer, false, error)) < 0) { + if (grown && zip_error_code_zip(error) == ZIP_ER_NOZIP) { + zip_error_set(error, ZIP_ER_INCONS, 0); + } _zip_cdir_free(cd); _zip_buffer_free(cd_buffer); return NULL; @@ -380,23 +388,23 @@ _zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_err i++; left -= (zip_uint64_t)entry_size; } - - if (i != cd->nentry) { + + if (i != cd->nentry || left > 0) { zip_error_set(error, ZIP_ER_INCONS, 0); _zip_buffer_free(cd_buffer); _zip_cdir_free(cd); return NULL; } - + if (za->open_flags & ZIP_CHECKCONS) { bool ok; - + if (cd_buffer) { ok = _zip_buffer_eof(cd_buffer); } else { zip_int64_t offset = zip_source_tell(za->src); - + if (offset < 0) { _zip_error_set_from_source(error, za->src); _zip_buffer_free(cd_buffer); @@ -405,7 +413,7 @@ _zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_err } ok = ((zip_uint64_t)offset == cd->offset + cd->size); } - + if (!ok) { zip_error_set(error, ZIP_ER_INCONS, 0); _zip_buffer_free(cd_buffer); @@ -447,7 +455,7 @@ _zip_checkcons(zip_t *za, zip_cdir_t *cd, zip_error_t *error) zip_error_set(error, ZIP_ER_NOZIP, 0); return -1; } - + j = cd->entry[i].orig->offset + cd->entry[i].orig->comp_size + _zip_string_length(cd->entry[i].orig->filename) + LENTRYSIZE; if (j > max) @@ -456,27 +464,27 @@ _zip_checkcons(zip_t *za, zip_cdir_t *cd, zip_error_t *error) zip_error_set(error, ZIP_ER_NOZIP, 0); return -1; } - + if (zip_source_seek(za->src, (zip_int64_t)cd->entry[i].orig->offset, SEEK_SET) < 0) { _zip_error_set_from_source(error, za->src); return -1; } - + if (_zip_dirent_read(&temp, za->src, NULL, true, error) == -1) { _zip_dirent_finalize(&temp); return -1; } - + if (_zip_headercomp(cd->entry[i].orig, &temp) != 0) { zip_error_set(error, ZIP_ER_INCONS, 0); _zip_dirent_finalize(&temp); return -1; } - + cd->entry[i].orig->extra_fields = _zip_ef_merge(cd->entry[i].orig->extra_fields, temp.extra_fields); cd->entry[i].orig->local_extra_fields_read = 1; temp.extra_fields = NULL; - + _zip_dirent_finalize(&temp); } @@ -491,7 +499,7 @@ _zip_checkcons(zip_t *za, zip_cdir_t *cd, zip_error_t *error) static int _zip_headercomp(const zip_dirent_t *central, const zip_dirent_t *local) { - if ((central->version_needed != local->version_needed) + if ((central->version_needed < local->version_needed) #if 0 /* some zip-files have different values in local and global headers for the bitflags */ @@ -586,7 +594,7 @@ _zip_find_central_dir(zip_t *za, zip_uint64_t len) _zip_error_set_from_source(&za->error, za->src); return NULL; } - + if ((buffer = _zip_buffer_new_from_source(za->src, buflen, NULL, &za->error)) == NULL) { return NULL; } @@ -607,7 +615,7 @@ _zip_find_central_dir(zip_t *za, zip_uint64_t len) if (best <= 0) { best = _zip_checkcons(za, cdir, &error); } - + a = _zip_checkcons(za, cdirnew, &error); if (best < a) { _zip_cdir_free(cdir); @@ -628,13 +636,13 @@ _zip_find_central_dir(zip_t *za, zip_uint64_t len) } cdirnew = NULL; } - + match++; _zip_buffer_set_offset(buffer, (zip_uint64_t)(match - _zip_buffer_data(buffer))); } _zip_buffer_free(buffer); - + if (best < 0) { _zip_error_copy(&za->error, &error); _zip_cdir_free(cdir); @@ -649,7 +657,7 @@ static unsigned char * _zip_memmem(const unsigned char *big, size_t biglen, const unsigned char *little, size_t littlelen) { const unsigned char *p; - + if ((biglen < littlelen) || (littlelen == 0)) return NULL; p = big-1; @@ -673,7 +681,7 @@ _zip_read_eocd(zip_buffer_t *buffer, zip_uint64_t buf_offset, unsigned int flags zip_error_set(error, ZIP_ER_INCONS, 0); return NULL; } - + eocd_offset = _zip_buffer_offset(buffer); _zip_buffer_get(buffer, 4); /* magic already verified */ @@ -700,7 +708,7 @@ _zip_read_eocd(zip_buffer_t *buffer, zip_uint64_t buf_offset, unsigned int flags zip_error_set(error, ZIP_ER_SEEK, EFBIG); return NULL; } - + if (offset+size > buf_offset + eocd_offset) { /* cdir spans past EOCD record */ zip_error_set(error, ZIP_ER_INCONS, 0); @@ -715,9 +723,10 @@ _zip_read_eocd(zip_buffer_t *buffer, zip_uint64_t buf_offset, unsigned int flags if ((cd=_zip_cdir_new(nentry, error)) == NULL) return NULL; + cd->is_zip64 = false; cd->size = size; cd->offset = offset; - + return cd; } @@ -734,13 +743,13 @@ _zip_read_eocd64(zip_source_t *src, zip_buffer_t *buffer, zip_uint64_t buf_offse zip_uint32_t num_disks, num_disks64, eocd_disk, eocd_disk64; eocdloc_offset = _zip_buffer_offset(buffer); - + _zip_buffer_get(buffer, 4); /* magic already verified */ num_disks = _zip_buffer_get_16(buffer); eocd_disk = _zip_buffer_get_16(buffer); eocd_offset = _zip_buffer_get_64(buffer); - + if (eocd_offset > ZIP_INT64_MAX || eocd_offset + EOCD64LEN < eocd_offset) { zip_error_set(error, ZIP_ER_SEEK, EFBIG); return NULL; @@ -773,7 +782,7 @@ _zip_read_eocd64(zip_source_t *src, zip_buffer_t *buffer, zip_uint64_t buf_offse } return NULL; } - + size = _zip_buffer_get_64(buffer); if ((flags & ZIP_CHECKCONS) && size + eocd_offset + 12 != buf_offset + eocdloc_offset) { @@ -820,7 +829,7 @@ _zip_read_eocd64(zip_source_t *src, zip_buffer_t *buffer, zip_uint64_t buf_offse size = _zip_buffer_get_64(buffer); offset = _zip_buffer_get_64(buffer); - + if (!_zip_buffer_ok(buffer)) { zip_error_set(error, ZIP_ER_INTERNAL, 0); if (free_buffer) { @@ -845,7 +854,7 @@ _zip_read_eocd64(zip_source_t *src, zip_buffer_t *buffer, zip_uint64_t buf_offse if ((cd=_zip_cdir_new(nentry, error)) == NULL) return NULL; - + cd->is_zip64 = true; cd->size = size; cd->offset = offset; diff --git a/lib/zip_random_unix.c b/lib/zip_random_unix.c new file mode 100644 index 0000000..7a932ef --- /dev/null +++ b/lib/zip_random_unix.c @@ -0,0 +1,54 @@ +/* + zip_random_unix.c -- fill the user's buffer with random stuff (Unix version) + Copyright (C) 2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 "zipint.h" + +#include + +bool +zip_random(zip_uint8_t *buffer, zip_uint16_t length) +{ + int fd; + + if ((fd = open("/dev/urandom", O_RDONLY)) < 0) { + return false; + } + + if (read(fd, buffer, length) != length) { + close(fd); + return false; + } + + close(fd); + return true; +} diff --git a/lib/zip_random_win32.c b/lib/zip_random_win32.c new file mode 100644 index 0000000..967a54c --- /dev/null +++ b/lib/zip_random_win32.c @@ -0,0 +1,51 @@ +/* + zip_random_win32.c -- fill the user's buffer with random stuff (Windows version) + Copyright (C) 2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 "zipint.h" +#include "zipwin32.h" + +bool +zip_random(zip_uint8_t *buffer, zip_uint16_t length) +{ + HCRYPTPROV hprov; + if (!CryptAcquireContext(&hprov, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { + return false; + } + if (!CryptGenRandom(hprov, length, buffer)) { + return false; + } + if (!CryptReleaseContext(hprov, 0)) { + return false; + } + return true; +} diff --git a/lib/zip_set_default_password.c b/lib/zip_set_default_password.c index 10b4806..ff7e35a 100644 --- a/lib/zip_set_default_password.c +++ b/lib/zip_set_default_password.c @@ -1,6 +1,6 @@ /* zip_set_default_password.c -- set default password for decryption - Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_set_name.c b/lib/zip_set_name.c index 2a46143..34b7615 100644 --- a/lib/zip_set_name.c +++ b/lib/zip_set_name.c @@ -1,6 +1,6 @@ /* zip_set_name.c -- rename helper function - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_source_error.c b/lib/zip_source_error.c index e09199b..91e2dd6 100644 --- a/lib/zip_source_error.c +++ b/lib/zip_source_error.c @@ -1,6 +1,6 @@ /* zip_source_error.c -- get last error from zip_source - Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -40,3 +40,9 @@ zip_source_error(zip_source_t *src) { return &src->error; } + +bool +_zip_source_had_error(zip_source_t *src) +{ + return zip_source_error(src)->zip_err != ZIP_ER_OK; +} diff --git a/lib/zip_source_file.c b/lib/zip_source_file.c index 8678c1a..6a10c01 100644 --- a/lib/zip_source_file.c +++ b/lib/zip_source_file.c @@ -1,6 +1,6 @@ /* zip_source_file.c -- create data source from file - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -17,7 +17,7 @@ 3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -46,7 +46,7 @@ zip_source_file(zip_t *za, const char *fname, zip_uint64_t start, zip_int64_t le { if (za == NULL) return NULL; - + return zip_source_file_create(fname, start, len, &za->error); } diff --git a/lib/zip_source_filep.c b/lib/zip_source_filep.c index 70255de..a8a271a 100644 --- a/lib/zip_source_filep.c +++ b/lib/zip_source_filep.c @@ -1,6 +1,6 @@ /* zip_source_filep.c -- create data source from FILE * - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -17,7 +17,7 @@ 3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -72,10 +72,11 @@ struct read_file { char *fname; /* name of file to read from */ FILE *f; /* file to read from */ struct zip_stat st; /* stat information passed in */ + zip_error_t stat_error; /* error returned for stat */ zip_uint64_t start; /* start offset of data to read */ - zip_uint64_t end; /* end offset of data to read, 0 for up to EOF */ - zip_uint64_t current; /* current offset */ - + zip_uint64_t end; /* end offset of data to read relative to start, 0 for up to EOF */ + zip_uint64_t current; /* current offset relative to start (0 is beginning of part we read) */ + /* writing */ char *tmpname; FILE *fout; @@ -92,7 +93,7 @@ zip_source_filep(zip_t *za, FILE *file, zip_uint64_t start, zip_int64_t len) { if (za == NULL) return NULL; - + return zip_source_filep_create(file, start, len, &za->error); } @@ -114,12 +115,21 @@ _zip_source_file_or_p(const char *fname, FILE *file, zip_uint64_t start, zip_int { struct read_file *ctx; zip_source_t *zs; - + if (file == NULL && fname == NULL) { zip_error_set(error, ZIP_ER_INVAL, 0); return NULL; } - + + if (len < 0) { + len = 0; + } + + if (start > ZIP_INT64_MAX || start + (zip_uint64_t)len < start) { + zip_error_set(error, ZIP_ER_INVAL, 0); + return NULL; + } + if ((ctx=(struct read_file *)malloc(sizeof(struct read_file))) == NULL) { zip_error_set(error, ZIP_ER_MEMORY, 0); return NULL; @@ -135,7 +145,7 @@ _zip_source_file_or_p(const char *fname, FILE *file, zip_uint64_t start, zip_int } ctx->f = file; ctx->start = start; - ctx->end = (len < 0 ? 0 : start+(zip_uint64_t)len); + ctx->end = (zip_uint64_t)len; if (st) { memcpy(&ctx->st, st, sizeof(ctx->st)); ctx->st.name = NULL; @@ -144,18 +154,53 @@ _zip_source_file_or_p(const char *fname, FILE *file, zip_uint64_t start, zip_int else { zip_stat_init(&ctx->st); } - + + if (ctx->end > 0) { + ctx->st.size = ctx->end; + ctx->st.valid |= ZIP_STAT_SIZE; + } + + zip_error_init(&ctx->stat_error); + ctx->tmpname = NULL; ctx->fout = NULL; - + zip_error_init(&ctx->error); ctx->supports = ZIP_SOURCE_SUPPORTS_READABLE | zip_source_make_command_bitmap(ZIP_SOURCE_SUPPORTS, ZIP_SOURCE_TELL, -1); + if (ctx->fname) { struct stat sb; + if (stat(ctx->fname, &sb) < 0) { + zip_error_set(&ctx->stat_error, ZIP_ER_READ, errno); + if (ctx->start == 0 && ctx->end == 0) { + ctx->supports = ZIP_SOURCE_SUPPORTS_WRITABLE; + } + } + else { + if ((ctx->st.valid & ZIP_STAT_MTIME) == 0) { + ctx->st.mtime = sb.st_mtime; + ctx->st.valid |= ZIP_STAT_MTIME; + } + if (S_ISREG(sb.st_mode)) { + ctx->supports = ZIP_SOURCE_SUPPORTS_SEEKABLE; + + if (ctx->start + ctx->end > (zip_uint64_t)sb.st_size) { + zip_error_set(error, ZIP_ER_INVAL, 0); + free(ctx->fname); + free(ctx); + return NULL; + } - if (stat(ctx->fname, &sb) < 0 || S_ISREG(sb.st_mode)) { - ctx->supports = ZIP_SOURCE_SUPPORTS_WRITABLE; + if (ctx->end == 0) { + ctx->st.size = (zip_uint64_t)sb.st_size - ctx->start; + ctx->st.valid |= ZIP_STAT_SIZE; + + if (start == 0) { + ctx->supports = ZIP_SOURCE_SUPPORTS_WRITABLE; + } + } + } } } else if (fseeko(ctx->f, 0, SEEK_CUR) == 0) { @@ -179,7 +224,7 @@ create_temp_output(struct read_file *ctx) int tfd; mode_t mask; FILE *tfp; - + if ((temp=(char *)malloc(strlen(ctx->fname)+8)) == NULL) { zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0); return -1; @@ -202,7 +247,7 @@ create_temp_output(struct read_file *ctx) free(temp); return -1; } - + #ifdef _WIN32 /* According to Pierre Joye, Windows in some environments per @@ -210,10 +255,10 @@ create_temp_output(struct read_file *ctx) */ _setmode(_fileno(tfp), _O_BINARY ); #endif - + ctx->fout = tfp; ctx->tmpname = temp; - + return 0; } @@ -236,7 +281,7 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) return -1; } return create_temp_output(ctx); - + case ZIP_SOURCE_COMMIT_WRITE: { mode_t mask; @@ -257,17 +302,17 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) ctx->tmpname = NULL; return 0; } - + case ZIP_SOURCE_CLOSE: if (ctx->fname) { fclose(ctx->f); ctx->f = NULL; } return 0; - + case ZIP_SOURCE_ERROR: return zip_error_to_data(&ctx->error, data, len); - + case ZIP_SOURCE_FREE: free(ctx->fname); free(ctx->tmpname); @@ -275,7 +320,7 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) fclose(ctx->f); free(ctx); return 0; - + case ZIP_SOURCE_OPEN: if (ctx->fname) { if ((ctx->f=fopen(ctx->fname, "rb")) == NULL) { @@ -283,18 +328,19 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) return -1; } } - + if (ctx->start > 0) { if (_zip_fseek_u(ctx->f, ctx->start, SEEK_SET, &ctx->error) < 0) { + /* TODO: skip by reading */ return -1; } } - ctx->current = ctx->start; + ctx->current = 0; return 0; - + case ZIP_SOURCE_READ: if (ctx->end > 0) { - n = ctx->end-ctx->current; + n = ctx->end - ctx->current; if (n > len) { n = len; } @@ -302,7 +348,7 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) else { n = len; } - + if (n > SIZE_MAX) n = SIZE_MAX; @@ -315,14 +361,14 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) ctx->current += i; return (zip_int64_t)i; - + case ZIP_SOURCE_REMOVE: if (remove(ctx->fname) < 0) { zip_error_set(&ctx->error, ZIP_ER_REMOVE, errno); return -1; } return 0; - + case ZIP_SOURCE_ROLLBACK_WRITE: if (ctx->fout) { fclose(ctx->fout); @@ -332,7 +378,7 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) free(ctx->tmpname); ctx->tmpname = NULL; return 0; - + case ZIP_SOURCE_SEEK: { zip_int64_t new_current; int need_seek; @@ -340,14 +386,14 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) if (args == NULL) return -1; - + need_seek = 1; - + switch (args->whence) { case SEEK_SET: new_current = args->offset; break; - + case SEEK_END: if (ctx->end == 0) { if (_zip_fseek(ctx->f, args->offset, SEEK_END, &ctx->error) < 0) { @@ -357,12 +403,14 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) zip_error_set(&ctx->error, ZIP_ER_SEEK, errno); return -1; } + new_current -= (zip_int64_t)ctx->start; need_seek = 0; } else { new_current = (zip_int64_t)ctx->end + args->offset; } break; + case SEEK_CUR: new_current = (zip_int64_t)ctx->current + args->offset; break; @@ -372,29 +420,30 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) return -1; } - if (new_current < 0 || (zip_uint64_t)new_current < ctx->start || (ctx->end != 0 && (zip_uint64_t)new_current > ctx->end)) { + if (new_current < 0 || (ctx->end != 0 && (zip_uint64_t)new_current > ctx->end) + || (zip_uint64_t)new_current + ctx->start < ctx->start) { zip_error_set(&ctx->error, ZIP_ER_INVAL, 0); return -1; } - + ctx->current = (zip_uint64_t)new_current; if (need_seek) { - if (_zip_fseek_u(ctx->f, ctx->current, SEEK_SET, &ctx->error) < 0) { + if (_zip_fseek_u(ctx->f, ctx->current + ctx->start, SEEK_SET, &ctx->error) < 0) { return -1; } } return 0; } - + case ZIP_SOURCE_SEEK_WRITE: { zip_source_args_seek_t *args; - + args = ZIP_SOURCE_GET_ARGS(zip_source_args_seek_t, data, len, &ctx->error); if (args == NULL) { return -1; } - + if (_zip_fseek(ctx->fout, args->offset, args->whence, &ctx->error) < 0) { return -1; } @@ -405,68 +454,43 @@ read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd) if (len < sizeof(ctx->st)) return -1; - if (ctx->st.valid != 0) - memcpy(data, &ctx->st, sizeof(ctx->st)); - else { - zip_stat_t *st; - struct stat fst; - int err; - - if (ctx->f) - err = fstat(fileno(ctx->f), &fst); - else - err = stat(ctx->fname, &fst); - - if (err != 0) { - zip_error_set(&ctx->error, ZIP_ER_READ, errno); - return -1; - } - - st = (zip_stat_t *)data; - - zip_stat_init(st); - st->mtime = fst.st_mtime; - st->valid |= ZIP_STAT_MTIME; - if (ctx->end != 0) { - st->size = ctx->end - ctx->start; - st->valid |= ZIP_STAT_SIZE; - } - else if ((fst.st_mode&S_IFMT) == S_IFREG) { - st->size = (zip_uint64_t)fst.st_size; - st->valid |= ZIP_STAT_SIZE; - } + if (zip_error_code_zip(&ctx->stat_error) != 0) { + zip_error_set(&ctx->error, zip_error_code_zip(&ctx->stat_error), zip_error_code_system(&ctx->stat_error)); + return -1; } + + memcpy(data, &ctx->st, sizeof(ctx->st)); return sizeof(ctx->st); } case ZIP_SOURCE_SUPPORTS: return ctx->supports; - + case ZIP_SOURCE_TELL: return (zip_int64_t)ctx->current; - + case ZIP_SOURCE_TELL_WRITE: { off_t ret = ftello(ctx->fout); - + if (ret < 0) { zip_error_set(&ctx->error, ZIP_ER_TELL, errno); return -1; } return ret; } - + case ZIP_SOURCE_WRITE: { size_t ret; - + clearerr(ctx->fout); ret = fwrite(data, 1, len, ctx->fout); if (ret != len || ferror(ctx->fout)) { zip_error_set(&ctx->error, ZIP_ER_WRITE, errno); return -1; } - + return (zip_int64_t)ret; } diff --git a/lib/zip_source_function.c b/lib/zip_source_function.c index 1d4be93..06ce5c9 100644 --- a/lib/zip_source_function.c +++ b/lib/zip_source_function.c @@ -1,6 +1,6 @@ /* zip_source_function.c -- create zip data source from callback function - Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -94,6 +94,7 @@ _zip_source_new(zip_error_t *error) src->source_archive = NULL; src->refcount = 1; zip_error_init(&src->error); + src->eof = false; return src; } diff --git a/lib/zip_source_open.c b/lib/zip_source_open.c index ec5e39d..a5712b2 100644 --- a/lib/zip_source_open.c +++ b/lib/zip_source_open.c @@ -1,6 +1,6 @@ /* zip_source_open.c -- open zip_source (prepare for reading) - Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -67,6 +67,8 @@ zip_source_open(zip_source_t *src) } } + src->eof = false; + _zip_error_clear(&src->error); src->open_count++; return 0; diff --git a/lib/zip_source_pkware.c b/lib/zip_source_pkware.c index 125e4e2..3957d99 100644 --- a/lib/zip_source_pkware.c +++ b/lib/zip_source_pkware.c @@ -1,6 +1,6 @@ /* zip_source_pkware.c -- Traditional PKWARE de/encryption routines - Copyright (C) 2009-2015 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_source_read.c b/lib/zip_source_read.c index 061a6f9..267128b 100644 --- a/lib/zip_source_read.c +++ b/lib/zip_source_read.c @@ -1,6 +1,6 @@ /* zip_source_read.c -- read data from zip_source - Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -38,6 +38,9 @@ zip_int64_t zip_source_read(zip_source_t *src, void *data, zip_uint64_t len) { + zip_uint64_t bytes_read; + zip_int64_t n; + if (src->source_closed) { return -1; } @@ -46,5 +49,39 @@ zip_source_read(zip_source_t *src, void *data, zip_uint64_t len) return -1; } - return _zip_source_call(src, data, len, ZIP_SOURCE_READ); + if (_zip_source_had_error(src)) { + return -1; + } + + if (_zip_source_eof(src)) { + return 0; + } + + bytes_read = 0; + while (bytes_read < len) { + if ((n = _zip_source_call(src, (zip_uint8_t *)data + bytes_read, len - bytes_read, ZIP_SOURCE_READ)) < 0) { + if (bytes_read == 0) { + return -1; + } + else { + return (zip_int64_t)bytes_read; + } + } + + if (n == 0) { + src->eof = 1; + break; + } + + bytes_read += (zip_uint64_t)n; + } + + return (zip_int64_t)bytes_read; +} + + +bool +_zip_source_eof(zip_source_t *src) +{ + return src->eof; } diff --git a/lib/zip_source_stat.c b/lib/zip_source_stat.c index a6b46d0..864507e 100644 --- a/lib/zip_source_stat.c +++ b/lib/zip_source_stat.c @@ -1,6 +1,6 @@ /* zip_source_stat.c -- get meta information from zip_source - Copyright (C) 2009-2015 Dieter Baron and Thomas Klausner + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_source_supports.c b/lib/zip_source_supports.c index 75a4a46..c59aa1f 100644 --- a/lib/zip_source_supports.c +++ b/lib/zip_source_supports.c @@ -1,6 +1,6 @@ /* zip_source_supports.c -- check for supported functions - Copyright (C) 2014-2015 Dieter Baron and Thomas Klausner + Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_source_win32handle.c b/lib/zip_source_win32handle.c index 35e2e67..7fe003d 100644 --- a/lib/zip_source_win32handle.c +++ b/lib/zip_source_win32handle.c @@ -344,9 +344,12 @@ _win32_read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd } else { h = ctx->ops->op_open(ctx); - if (h == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_NOT_FOUND) { - zip_error_set(&ctx->error, ZIP_ER_READ, ENOENT); - return -1; + if (h == INVALID_HANDLE_VALUE) { + win32err = GetLastError(); + if (win32err == ERROR_FILE_NOT_FOUND || win32err == ERROR_PATH_NOT_FOUND) { + zip_error_set(&ctx->error, ZIP_ER_READ, ENOENT); + return -1; + } } } diff --git a/lib/zip_source_winzip_aes_decode.c b/lib/zip_source_winzip_aes_decode.c new file mode 100644 index 0000000..fc0b208 --- /dev/null +++ b/lib/zip_source_winzip_aes_decode.c @@ -0,0 +1,289 @@ +/* + zip_source_winzip_aes.c -- Winzip AES de/encryption routines + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 "zipint.h" + +#include "gladman-fcrypt.h" + +#define MAX_HEADER_LENGTH (16+PWD_VER_LENGTH) +#define HMAC_LENGTH 10 + +static unsigned int salt_length[] = { 0, 8, 12, 16 }; + +struct winzip_aes { + char *password; + unsigned int mode; + + zip_uint64_t data_length; + zip_uint64_t current_position; + + fcrypt_ctx fcrypt_ctx; + zip_error_t error; +}; + + +static int decrypt_header(zip_source_t *src, struct winzip_aes *ctx); +static void winzip_aes_free(struct winzip_aes *); +static zip_int64_t winzip_aes_decrypt(zip_source_t *src, void *ud, void *data, zip_uint64_t len, zip_source_cmd_t cmd); +static struct winzip_aes * winzip_aes_new(unsigned int mode, const char *password); + + +zip_source_t * +zip_source_winzip_aes_decode(zip_t *za, zip_source_t *src, zip_uint16_t em, int flags, const char *password) +{ + zip_source_t *s2; + unsigned int mode = 0; + zip_stat_t st; + zip_uint64_t aux_length; + struct winzip_aes *ctx; + + switch (em) { + case ZIP_EM_AES_128: + mode = 1; + break; + case ZIP_EM_AES_192: + mode = 2; + break; + case ZIP_EM_AES_256: + mode = 3; + break; + } + + if (password == NULL || src == NULL || mode == 0) { + zip_error_set(&za->error, ZIP_ER_INVAL, 0); + return NULL; + } + if (flags & ZIP_CODEC_ENCODE) { + zip_error_set(&za->error, ZIP_ER_ENCRNOTSUPP, 0); + return NULL; + } + + if (strlen(password) > UINT_MAX) { + zip_error_set(&za->error, ZIP_ER_INVAL, 0); /* TODO: better error code? (password too long) */ + return NULL; + } + + if (zip_source_stat(src, &st) != 0) { + _zip_error_set_from_source(&za->error, src); + return NULL; + } + + aux_length = PWD_VER_LENGTH + salt_length[mode] + HMAC_LENGTH; + + if ((st.valid & ZIP_STAT_COMP_SIZE) == 0 || st.comp_size < aux_length) { + zip_error_set(&za->error, ZIP_ER_OPNOTSUPP, 0); + return NULL; + } + + if ((ctx = winzip_aes_new(mode, password)) == NULL) { + zip_error_set(&za->error, ZIP_ER_MEMORY, 0); + return NULL; + } + + ctx->data_length = st.comp_size - aux_length; + + if ((s2 = zip_source_layered(za, src, winzip_aes_decrypt, ctx)) == NULL) { + winzip_aes_free(ctx); + return NULL; + } + + return s2; +} + + +static int +decrypt_header(zip_source_t *src, struct winzip_aes *ctx) +{ + zip_uint8_t header[MAX_HEADER_LENGTH]; + zip_uint8_t password_verification[PWD_VER_LENGTH]; + unsigned int headerlen; + zip_int64_t n; + + headerlen = PWD_VER_LENGTH + salt_length[ctx->mode]; + if ((n=zip_source_read(src, header, headerlen)) < 0) { + _zip_error_set_from_source(&ctx->error, src); + return -1; + } + + if (n != headerlen) { + zip_error_set(&ctx->error, ZIP_ER_EOF, 0); + return -1; + } + + if (_zip_fcrypt_init(ctx->mode, (unsigned char *)ctx->password, (unsigned int)strlen(ctx->password), header, password_verification, &ctx->fcrypt_ctx) != 0) { + zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0); + return -1; + } + if (memcmp(password_verification, header + salt_length[ctx->mode], PWD_VER_LENGTH) != 0) { + zip_error_set(&ctx->error, ZIP_ER_WRONGPASSWD, 0); + return -1; + } + return 0; +} + + +static bool +verify_hmac(zip_source_t *src, struct winzip_aes *ctx) +{ + unsigned char computed[HMAC_LENGTH], from_file[HMAC_LENGTH]; + if (zip_source_read(src, from_file, HMAC_LENGTH) < HMAC_LENGTH) { + _zip_error_set_from_source(&ctx->error, src); + return false; + } + + _zip_fcrypt_end(computed, &ctx->fcrypt_ctx); + + if (memcmp(from_file, computed, HMAC_LENGTH) != 0) { + zip_error_set(&ctx->error, ZIP_ER_CRC, 0); + return false; + } + + return true; +} + + +static zip_int64_t +winzip_aes_decrypt(zip_source_t *src, void *ud, void *data, zip_uint64_t len, zip_source_cmd_t cmd) +{ + struct winzip_aes *ctx; + zip_int64_t n; + zip_uint64_t total, offset; + + ctx = (struct winzip_aes *)ud; + + switch (cmd) { + case ZIP_SOURCE_OPEN: + if (decrypt_header(src, ctx) < 0) { + return -1; + } + ctx->current_position = 0; + return 0; + + case ZIP_SOURCE_READ: + if (len > ctx->data_length - ctx->current_position) { + len = ctx->data_length - ctx->current_position; + } + + if (len == 0) { + if (!verify_hmac(src, ctx)) { + return -1; + } + return 0; + } + + if ((n=zip_source_read(src, data, len)) < 0) { + _zip_error_set_from_source(&ctx->error, src); + return -1; + } + ctx->current_position += (zip_uint64_t)n; + + total = (zip_uint64_t)n; + for (offset = 0; offset < total; offset += ZIP_MIN(total - offset, UINT_MAX)) { + _zip_fcrypt_decrypt((zip_uint8_t *)data + offset, (unsigned int)ZIP_MIN(total - offset, UINT_MAX), &ctx->fcrypt_ctx); + } + + return n; + + case ZIP_SOURCE_CLOSE: + return 0; + + case ZIP_SOURCE_STAT: + { + zip_stat_t *st; + + st = (zip_stat_t *)data; + + st->encryption_method = ZIP_EM_NONE; + st->valid |= ZIP_STAT_ENCRYPTION_METHOD; + if (st->valid & ZIP_STAT_COMP_SIZE) { + st->comp_size -= 12 + salt_length[ctx->mode]; + } + + return 0; + } + + case ZIP_SOURCE_SUPPORTS: + return zip_source_make_command_bitmap(ZIP_SOURCE_OPEN, ZIP_SOURCE_READ, ZIP_SOURCE_CLOSE, ZIP_SOURCE_STAT, ZIP_SOURCE_ERROR, ZIP_SOURCE_FREE, -1); + + case ZIP_SOURCE_ERROR: + return zip_error_to_data(&ctx->error, data, len); + + case ZIP_SOURCE_FREE: + winzip_aes_free(ctx); + return 0; + + default: + zip_error_set(&ctx->error, ZIP_ER_INVAL, 0); + return -1; + } +} + + +static void +winzip_aes_free(struct winzip_aes *ctx) +{ + if (ctx == NULL) { + return; + } + + _zip_crypto_clear(&ctx->fcrypt_ctx, sizeof(ctx->fcrypt_ctx)); + _zip_crypto_clear(ctx->password, strlen(ctx->password)); + free(ctx->password); + zip_error_fini(&ctx->error); + free(ctx); +} + + +static struct winzip_aes * +winzip_aes_new(unsigned int mode, const char *password) { + struct winzip_aes *ctx; + + if ((ctx = (struct winzip_aes *)malloc(sizeof(*ctx))) == NULL) { + return NULL; + } + + if ((ctx->password = strdup(password)) == NULL) { + free(ctx); + return NULL; + } + + ctx->mode = mode; + + zip_error_init(&ctx->error); + + return ctx; +} diff --git a/lib/zip_source_winzip_aes_encode.c b/lib/zip_source_winzip_aes_encode.c new file mode 100644 index 0000000..a7ca321 --- /dev/null +++ b/lib/zip_source_winzip_aes_encode.c @@ -0,0 +1,261 @@ +/* + zip_source_winzip_aes.c -- Winzip AES de/encryption routines + Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 "zipint.h" + +#include "gladman-fcrypt.h" + +#define MAX_HEADER_LENGTH (16+PWD_VER_LENGTH) +#define HMAC_LENGTH 10 + +static unsigned int salt_length[] = { 0, 8, 12, 16 }; + +struct winzip_aes { + char *password; + unsigned int mode; + zip_uint16_t encryption_method; + + zip_uint8_t data[MAX_HEADER_LENGTH]; + zip_buffer_t *buffer; + + fcrypt_ctx fcrypt_ctx; + bool eof; + zip_error_t error; +}; + + +static int encrypt_header(zip_source_t *src, struct winzip_aes *ctx); +static void winzip_aes_free(struct winzip_aes *); +static zip_int64_t winzip_aes_encrypt(zip_source_t *src, void *ud, void *data, zip_uint64_t len, zip_source_cmd_t cmd); +static struct winzip_aes * winzip_aes_new(unsigned int mode, zip_uint16_t encryption_method, const char *password); + + +zip_source_t * +zip_source_winzip_aes_encode(zip_t *za, zip_source_t *src, zip_uint16_t encryption_method, int flags, const char *password) +{ + zip_source_t *s2; + unsigned int mode = 0; + struct winzip_aes *ctx; + + switch (encryption_method) { + case ZIP_EM_AES_128: + mode = 1; + break; + case ZIP_EM_AES_192: + mode = 2; + break; + case ZIP_EM_AES_256: + mode = 3; + break; + } + + if (password == NULL || src == NULL || mode == 0) { + zip_error_set(&za->error, ZIP_ER_INVAL, 0); + return NULL; + } + + if (strlen(password) > UINT_MAX) { + zip_error_set(&za->error, ZIP_ER_INVAL, 0); /* TODO: better error code? (password too long) */ + return NULL; + } + + if ((ctx = winzip_aes_new(mode, encryption_method, password)) == NULL) { + zip_error_set(&za->error, ZIP_ER_MEMORY, 0); + return NULL; + } + + if ((s2 = zip_source_layered(za, src, winzip_aes_encrypt, ctx)) == NULL) { + winzip_aes_free(ctx); + return NULL; + } + + return s2; +} + + +static int +encrypt_header(zip_source_t *src, struct winzip_aes *ctx) +{ + if (!zip_random(ctx->data, (zip_uint16_t)salt_length[ctx->mode])) { + zip_error_set(&ctx->error, ZIP_ER_INTERNAL, 0); + return -1; + } + + if (_zip_fcrypt_init(ctx->mode, (unsigned char *)ctx->password, (unsigned int)strlen(ctx->password), ctx->data, ctx->data+salt_length[ctx->mode], &ctx->fcrypt_ctx) != 0) { + zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0); + return -1; + } + + if ((ctx->buffer = _zip_buffer_new(ctx->data, salt_length[ctx->mode] + PWD_VER_LENGTH)) == NULL) { + zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0); + return -1; + } + + return 0; +} + + +static zip_int64_t +winzip_aes_encrypt(zip_source_t *src, void *ud, void *data, zip_uint64_t length, zip_source_cmd_t cmd) +{ + struct winzip_aes *ctx; + zip_int64_t ret; + zip_uint64_t buffer_n, offset, n; + + ctx = (struct winzip_aes *)ud; + + switch (cmd) { + case ZIP_SOURCE_OPEN: + ctx->eof = false; + if (encrypt_header(src, ctx) < 0) { + return -1; + } + return 0; + + case ZIP_SOURCE_READ: + buffer_n = 0; + + if (ctx->buffer) { + buffer_n = _zip_buffer_read(ctx->buffer, data, length); + + data = (zip_uint8_t *)data + buffer_n; + length -= buffer_n; + + if (_zip_buffer_eof(ctx->buffer)) { + _zip_buffer_free(ctx->buffer); + ctx->buffer = NULL; + } + } + + if (ctx->eof) { + return (zip_int64_t)buffer_n; + } + + if ((ret = zip_source_read(src, data, length)) < 0) { + _zip_error_set_from_source(&ctx->error, src); + return -1; + } + + n = (zip_uint64_t)ret; + for (offset = 0; offset < n; offset += ZIP_MIN(n - offset, UINT_MAX)) { + _zip_fcrypt_encrypt((zip_uint8_t *)data + offset, (unsigned int)ZIP_MIN(n - offset, UINT_MAX), &ctx->fcrypt_ctx); + } + + if (n < length) { + ctx->eof = true; + _zip_fcrypt_end(ctx->data, &ctx->fcrypt_ctx); + if ((ctx->buffer = _zip_buffer_new(ctx->data, HMAC_LENGTH)) == NULL) { + zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0); + /* TODO: return partial read? */ + return -1; + } + } + + return (zip_int64_t)(buffer_n + n); + + case ZIP_SOURCE_CLOSE: + return 0; + + case ZIP_SOURCE_STAT: + { + zip_stat_t *st; + + st = (zip_stat_t *)data; + st->encryption_method = ctx->encryption_method; + st->valid |= ZIP_STAT_ENCRYPTION_METHOD; + if (st->valid & ZIP_STAT_COMP_SIZE) { + st->comp_size += 12 + salt_length[ctx->mode]; + } + + return 0; + } + + case ZIP_SOURCE_SUPPORTS: + return zip_source_make_command_bitmap(ZIP_SOURCE_OPEN, ZIP_SOURCE_READ, ZIP_SOURCE_CLOSE, ZIP_SOURCE_STAT, ZIP_SOURCE_ERROR, ZIP_SOURCE_FREE, -1); + + case ZIP_SOURCE_ERROR: + return zip_error_to_data(&ctx->error, data, length); + + case ZIP_SOURCE_FREE: + winzip_aes_free(ctx); + return 0; + + default: + zip_error_set(&ctx->error, ZIP_ER_INVAL, 0); + return -1; + } +} + + +static void +winzip_aes_free(struct winzip_aes *ctx) +{ + if (ctx == NULL) { + return; + } + + _zip_crypto_clear(&ctx->fcrypt_ctx, sizeof(ctx->fcrypt_ctx)); + _zip_crypto_clear(ctx->password, strlen(ctx->password)); + free(ctx->password); + zip_error_fini(&ctx->error); + _zip_buffer_free(ctx->buffer); + free(ctx); +} + + +static struct winzip_aes * +winzip_aes_new(unsigned int mode, zip_uint16_t encryption_method, const char *password) { + struct winzip_aes *ctx; + + if ((ctx = (struct winzip_aes *)malloc(sizeof(*ctx))) == NULL) { + return NULL; + } + + if ((ctx->password = strdup(password)) == NULL) { + free(ctx); + return NULL; + } + + ctx->mode = mode; + ctx->encryption_method = encryption_method; + ctx->buffer = NULL; + + zip_error_init(&ctx->error); + + ctx->eof = false; + return ctx; +} diff --git a/lib/zip_source_zip_new.c b/lib/zip_source_zip_new.c index 40f1195..9256255 100644 --- a/lib/zip_source_zip_new.c +++ b/lib/zip_source_zip_new.c @@ -1,6 +1,6 @@ /* zip_source_zip_new.c -- prepare data structures for zip_fopen/zip_source_zip - Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner + Copyright (C) 2012-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -81,11 +81,14 @@ _zip_source_zip_new(zip_t *za, zip_t *srcza, zip_uint64_t srcidx, zip_flags_t fl enc_impl = NULL; if (((flags & ZIP_FL_ENCRYPTED) == 0) && (st.encryption_method != ZIP_EM_NONE)) { + if (password == NULL) { + password = za->default_password; + } if (password == NULL) { zip_error_set(&za->error, ZIP_ER_NOPASSWD, 0); return NULL; } - if ((enc_impl=_zip_get_encryption_implementation(st.encryption_method)) == NULL) { + if ((enc_impl=_zip_get_encryption_implementation(st.encryption_method, ZIP_CODEC_DECODE)) == NULL) { zip_error_set(&za->error, ZIP_ER_ENCRNOTSUPP, 0); return NULL; } @@ -94,7 +97,7 @@ _zip_source_zip_new(zip_t *za, zip_t *srcza, zip_uint64_t srcidx, zip_flags_t fl comp_impl = NULL; if ((flags & ZIP_FL_COMPRESSED) == 0) { if (st.comp_method != ZIP_CM_STORE) { - if ((comp_impl=_zip_get_compression_implementation(st.comp_method)) == NULL) { + if ((comp_impl=_zip_get_compression_implementation(st.comp_method, ZIP_CODEC_DECODE)) == NULL) { zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0); return NULL; } diff --git a/lib/zip_stat_index.c b/lib/zip_stat_index.c index 601e3f7..a2ef59b 100644 --- a/lib/zip_stat_index.c +++ b/lib/zip_stat_index.c @@ -1,6 +1,6 @@ /* zip_stat_index.c -- get information about file by index - Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -64,17 +64,8 @@ zip_stat_index(zip_t *za, zip_uint64_t index, zip_flags_t flags, st->mtime = de->last_mod; st->comp_size = de->comp_size; st->comp_method = (zip_uint16_t)de->comp_method; - if (de->bitflags & ZIP_GPBF_ENCRYPTED) { - if (de->bitflags & ZIP_GPBF_STRONG_ENCRYPTION) { - /* TODO */ - st->encryption_method = ZIP_EM_UNKNOWN; - } - else - st->encryption_method = ZIP_EM_TRAD_PKWARE; - } - else - st->encryption_method = ZIP_EM_NONE; - st->valid = ZIP_STAT_CRC|ZIP_STAT_SIZE|ZIP_STAT_MTIME + st->encryption_method = de->encryption_method; + st->valid = (de->crc_valid ? ZIP_STAT_CRC : 0) | ZIP_STAT_SIZE|ZIP_STAT_MTIME |ZIP_STAT_COMP_SIZE|ZIP_STAT_COMP_METHOD|ZIP_STAT_ENCRYPTION_METHOD; } diff --git a/lib/zip_unchange.c b/lib/zip_unchange.c index 5ef5462..4a3d642 100644 --- a/lib/zip_unchange.c +++ b/lib/zip_unchange.c @@ -1,6 +1,6 @@ /* zip_unchange.c -- undo changes to file in zip archive - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zip_unchange_all.c b/lib/zip_unchange_all.c index dc89f7f..2221d6c 100644 --- a/lib/zip_unchange_all.c +++ b/lib/zip_unchange_all.c @@ -1,6 +1,6 @@ /* zip_unchange.c -- undo changes to all files in zip archive - Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner + Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/lib/zipint.h b/lib/zipint.h index 6939d73..2c5c6b9 100644 --- a/lib/zipint.h +++ b/lib/zipint.h @@ -20,7 +20,7 @@ 3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -64,16 +64,19 @@ #define CDBUFSIZE (MAXCOMLEN+EOCDLEN+EOCD64LOCLEN) #define BUFSIZE 8192 #define EFZIP64SIZE 28 +#define EF_WINZIP_AES_SIZE 7 #define ZIP_CM_REPLACED_DEFAULT (-2) +#define ZIP_CM_WINZIP_AES 99 /* Winzip AES encrypted */ #define ZIP_CM_IS_DEFAULT(x) ((x) == ZIP_CM_DEFAULT || (x) == ZIP_CM_REPLACED_DEFAULT) #define ZIP_EF_UTF_8_COMMENT 0x6375 #define ZIP_EF_UTF_8_NAME 0x7075 +#define ZIP_EF_WINZIP_AES 0x9901 #define ZIP_EF_ZIP64 0x0001 -#define ZIP_EF_IS_INTERNAL(id) ((id) == ZIP_EF_UTF_8_COMMENT || (id) == ZIP_EF_UTF_8_NAME || (id) == ZIP_EF_ZIP64) +#define ZIP_EF_IS_INTERNAL(id) ((id) == ZIP_EF_UTF_8_COMMENT || (id) == ZIP_EF_UTF_8_NAME || (id) == ZIP_EF_WINZIP_AES || (id) == ZIP_EF_ZIP64) /* according to unzip-6.0's zipinfo.c, this corresponds to a regular file with rw permissions for everyone */ #define ZIP_EXT_ATTRIB_DEFAULT (0100666u<<16) @@ -96,8 +99,8 @@ typedef zip_source_t *(*zip_compression_implementation)(zip_t *, zip_source_t *, zip_int32_t, int); typedef zip_source_t *(*zip_encryption_implementation)(zip_t *, zip_source_t *, zip_uint16_t, int, const char *); -zip_compression_implementation _zip_get_compression_implementation(zip_int32_t); -zip_encryption_implementation _zip_get_encryption_implementation(zip_uint16_t); +zip_compression_implementation _zip_get_compression_implementation(zip_int32_t method, int operation); +zip_encryption_implementation _zip_get_encryption_implementation(zip_uint16_t method, int operation); @@ -118,6 +121,8 @@ zip_source_t *zip_source_pkware(zip_t *, zip_source_t *, zip_uint16_t, int, cons int zip_source_remove(zip_source_t *); zip_int64_t zip_source_supports(zip_source_t *src); zip_source_t *zip_source_window(zip_t *, zip_source_t *, zip_uint64_t, zip_uint64_t); +zip_source_t *zip_source_winzip_aes_decode(zip_t *, zip_source_t *, zip_uint16_t, int, const char *); +zip_source_t *zip_source_winzip_aes_encode(zip_t *, zip_source_t *, zip_uint16_t, int, const char *); /* error source for layered sources */ @@ -193,8 +198,8 @@ struct zip { zip_source_t **open_source; /* open sources using archive */ zip_hash_t *names; /* hash table for name lookup */ - - char *tempdir; /* custom temp dir (needed e.g. for OS X sandboxing) */ + + zip_progress_callback_t progress_callback; /* progress callback for zip_close() */ }; /* file in zip archive, part of API */ @@ -208,18 +213,22 @@ struct zip_file { /* zip archive directory entry (central or local) */ -#define ZIP_DIRENT_COMP_METHOD 0x0001u -#define ZIP_DIRENT_FILENAME 0x0002u -#define ZIP_DIRENT_COMMENT 0x0004u -#define ZIP_DIRENT_EXTRA_FIELD 0x0008u -#define ZIP_DIRENT_ATTRIBUTES 0x0010u -#define ZIP_DIRENT_LAST_MOD 0x0020u -#define ZIP_DIRENT_ALL 0xffffu +#define ZIP_DIRENT_COMP_METHOD 0x0001u +#define ZIP_DIRENT_FILENAME 0x0002u +#define ZIP_DIRENT_COMMENT 0x0004u +#define ZIP_DIRENT_EXTRA_FIELD 0x0008u +#define ZIP_DIRENT_ATTRIBUTES 0x0010u +#define ZIP_DIRENT_LAST_MOD 0x0020u +#define ZIP_DIRENT_ENCRYPTION_METHOD 0x0040u +#define ZIP_DIRENT_PASSWORD 0x0080u +#define ZIP_DIRENT_ALL ZIP_UINT32_MAX struct zip_dirent { zip_uint32_t changed; bool local_extra_fields_read; /* whether we already read in local header extra fields */ - bool cloned; /* whether this instance is cloned, and thus shares non-changed strings */ + bool cloned; /* whether this instance is cloned, and thus shares non-changed strings */ + + bool crc_valid; /* if CRC is valid (sometimes not for encrypted archives) */ zip_uint16_t version_madeby; /* (c) version of creator */ zip_uint16_t version_needed; /* (cl) version needed to extract */ @@ -236,6 +245,9 @@ struct zip_dirent { zip_uint16_t int_attrib; /* (c) internal file attributes */ zip_uint32_t ext_attrib; /* (c) external file attributes */ zip_uint64_t offset; /* (c) offset of local header */ + + zip_uint16_t encryption_method; /* encryption method, computed from other fields */ + char *password; /* file specific encryption password */ }; /* zip archive central directory */ @@ -248,6 +260,7 @@ struct zip_cdir { zip_uint64_t size; /* size of central directory */ zip_uint64_t offset; /* offset of central directory in file */ zip_string_t *comment; /* zip archive comment */ + bool is_zip64; /* central directory in zip64 format */ }; struct zip_extra_field { @@ -280,6 +293,7 @@ struct zip_source { bool source_closed; /* set if source archive is closed */ zip_t *source_archive; /* zip archive we're reading from, NULL if not from archive */ unsigned int refcount; + bool eof; /* EOF reached */ }; #define ZIP_SOURCE_IS_OPEN_READING(src) ((src)->open_count > 0) @@ -312,7 +326,7 @@ struct zip_string { struct zip_buffer { bool ok; bool free_data; - + zip_uint8_t *data; zip_uint64_t size; zip_uint64_t offset; @@ -332,6 +346,8 @@ extern const char * const _zip_err_str[]; extern const int _zip_nerr_str; extern const int _zip_err_type[]; +#define ZIP_MAX(a, b) ((a) > (b) ? (a) : (b)) +#define ZIP_MIN(a, b) ((a) < (b) ? (a) : (b)) #define ZIP_ENTRY_CHANGED(e, f) ((e)->changes && ((e)->changes->changed & (f))) @@ -340,6 +356,17 @@ extern const int _zip_err_type[]; #define ZIP_IS_RDONLY(za) ((za)->ch_flags & ZIP_AFL_RDONLY) +#ifdef HAVE_EXPLICIT_MEMSET +#define _zip_crypto_clear(b, l) explicit_memset((b), 0, (l)) +#else +#ifdef HAVE_EXPLICIT_BZERO +#define _zip_crypto_clear(b, l) explicit_bzero((b), (l)) +#else +#define _zip_crypto_clear(b, l) memset((b), 0, (l)) +#endif +#endif + + zip_int64_t _zip_add_entry(zip_t *); zip_uint8_t *_zip_buffer_data(zip_buffer_t *buffer); @@ -355,17 +382,20 @@ zip_buffer_t *_zip_buffer_new(zip_uint8_t *data, zip_uint64_t size); zip_buffer_t *_zip_buffer_new_from_source(zip_source_t *src, zip_uint64_t size, zip_uint8_t *buf, zip_error_t *error); zip_uint64_t _zip_buffer_offset(zip_buffer_t *buffer); bool _zip_buffer_ok(zip_buffer_t *buffer); +zip_uint8_t *_zip_buffer_peek(zip_buffer_t *buffer, zip_uint64_t length); int _zip_buffer_put(zip_buffer_t *buffer, const void *src, size_t length); int _zip_buffer_put_16(zip_buffer_t *buffer, zip_uint16_t i); int _zip_buffer_put_32(zip_buffer_t *buffer, zip_uint32_t i); int _zip_buffer_put_64(zip_buffer_t *buffer, zip_uint64_t i); int _zip_buffer_put_8(zip_buffer_t *buffer, zip_uint8_t i); +zip_uint64_t _zip_buffer_read(zip_buffer_t *buffer, zip_uint8_t *data, zip_uint64_t length); int _zip_buffer_skip(zip_buffer_t *buffer, zip_uint64_t length); int _zip_buffer_set_offset(zip_buffer_t *buffer, zip_uint64_t offset); zip_uint64_t _zip_buffer_size(zip_buffer_t *buffer); int _zip_cdir_compute_crc(zip_t *, uLong *); void _zip_cdir_free(zip_cdir_t *); +bool _zip_cdir_grow(zip_cdir_t *cd, zip_uint64_t additional_entries, zip_error_t *error); zip_cdir_t *_zip_cdir_new(zip_uint64_t, zip_error_t *); zip_int64_t _zip_cdir_write(zip_t *za, const zip_filelist_t *filelist, zip_uint64_t survivors); void _zip_deregister_source(zip_t *za, zip_source_t *src); @@ -422,6 +452,8 @@ void _zip_hash_revert(zip_hash_t *hash); zip_t *_zip_open(zip_source_t *, unsigned int, zip_error_t *); +bool zip_random(zip_uint8_t *buffer, zip_uint16_t length); + int _zip_read(zip_source_t *src, zip_uint8_t *data, zip_uint64_t length, zip_error_t *error); int _zip_read_at_offset(zip_source_t *src, zip_uint64_t offset, unsigned char *b, size_t length, zip_error_t *error); zip_uint8_t *_zip_read_data(zip_buffer_t *buffer, zip_source_t *src, size_t length, bool nulp, zip_error_t *error); @@ -432,8 +464,10 @@ int _zip_register_source(zip_t *za, zip_source_t *src); void _zip_set_open_error(int *zep, const zip_error_t *err, int ze); zip_int64_t _zip_source_call(zip_source_t *src, void *data, zip_uint64_t length, zip_source_cmd_t command); +bool _zip_source_eof(zip_source_t *); zip_source_t *_zip_source_file_or_p(const char *, FILE *, zip_uint64_t, zip_int64_t, const zip_stat_t *, zip_error_t *error); void _zip_source_invalidate(zip_source_t *src); +bool _zip_source_had_error(zip_source_t *); zip_source_t *_zip_source_new(zip_error_t *error); int _zip_source_set_source_archive(zip_source_t *, zip_t *); zip_source_t *_zip_source_window_new(zip_source_t *src, zip_uint64_t start, zip_uint64_t length, zip_stat_t *st, zip_error_t *error); diff --git a/ltmain.sh b/ltmain.sh deleted file mode 100644 index fcc4d74..0000000 --- a/ltmain.sh +++ /dev/null @@ -1,9669 +0,0 @@ - -# libtool (GNU libtool) 2.4.2 -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 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. - -# 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) -# --no-warn don't display warning messages -# --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.4.2 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . -# GNU libtool home page: . -# General help using GNU software: . - -PROGRAM=libtool -PACKAGE=libtool -VERSION=2.4.2 -TIMESTAMP="" -package_revision=1.3337 - -# 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" - -unset CP -unset MV -unset RM -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${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 file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - 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_dirname may be replaced by extended shell implementation - - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation - - -# 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"` -} # func_dirname_and_basename may be replaced by extended shell implementation - - -# 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 -} # func_stripname may be replaced by extended shell implementation - - -# 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=${PATH_SEPARATOR-:} - 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' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|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: ${opt_mode+$opt_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: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_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_tr_sh -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $opt_debug - - $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 () -{ - $opt_debug - - $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 () -{ - $opt_debug - - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - 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-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$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 () -{ - $opt_debug - - func_error "missing argument for $1." - exit_cmd=exit -} - - -# func_split_short_opt shortopt -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () -{ - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' - - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation - - -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () -{ - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' - - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation - -exit_cmd=: - - - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -# 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_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation - -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () -{ - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation - - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation - - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation - - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation - - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation - - -# 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 -} - -# 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 -} - - -# 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 - - - -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false - - -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. -{ - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg 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 - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; - - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; - - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; - esac - done - - # Validate options: - - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" - - 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_preserve_dup_deps - ;; - esac - - $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 - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_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=$opt_mode' for more information." - } - - - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE -} - - - - -## ----------- ## -## Main. ## -## ----------- ## - -# 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_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" -} - -# 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_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case "$lt_sysroot:$1" in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$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_append_quoted CC_quoted "$arg" - 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_append_quoted CC_quoted "$arg" - 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 </dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $opt_debug - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $opt_debug - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $opt_debug - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $opt_debug - if test -z "$2" && test -n "$1" ; then - func_error "Could not determine host file name corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result="$1" - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $opt_debug - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " \`$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result="$3" - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $opt_debug - case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via `$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $opt_debug - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $opt_debug - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result="$1" -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via `$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# 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. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $opt_debug - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $opt_debug - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result="$1" -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # 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_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # 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_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_mode_compile arg... -func_mode_compile () -{ - $opt_debug - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; - - target ) - libobj="$arg" - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - func_append_quoted lastarg "$arg" - done - IFS="$save_ifs" - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg="$srcfile" - srcfile="$arg" - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with \`-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj="$func_basename_result" - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from \`$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && 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 - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - 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 - func_append 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 - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append 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 "$opt_mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_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 \`$opt_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 opt_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 opt_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 $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # 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 - func_append 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_append_quoted args "$file" - 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 "$opt_mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "\`$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument \`$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - 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" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - 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 "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test "$opt_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" - func_append 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 - func_append 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" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append 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" - func_append 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. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # 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 "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - func_append 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" && func_append 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_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_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 "$opt_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 - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#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_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $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" - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" - else - # no lafile. user explicitly requested -dlpreopen . - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - 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; -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) ;; - *) func_append 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 - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $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_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $opt_debug - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $opt_debug - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result="" - fi -} - - -# 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 () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - 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" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # 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 - - $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_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 -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - 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 - func_append dlfiles " $arg" - else - func_append 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 "*) ;; - *) func_append 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 -# func_append 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 - func_append 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. - func_append 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 "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append 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" - if test -z "$func_stripname_result"; 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 - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # 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 "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append 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;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append 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 - func_append 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 - func_append 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|--sysroot) - func_append 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|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append 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_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append 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" - func_append arg " $func_quote_for_eval_result" - func_append 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" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append 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 - # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - func_append 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 - func_append 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. - func_append 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. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - 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" - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # 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_preserve_dup_deps ; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append 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 "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append 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= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - 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 "*) ;; - *) func_append 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|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append 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 "*) ;; - * ) func_append 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" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_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" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$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. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append 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 "*) ;; - *) func_append 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" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append 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. - func_append convenience " $ladir/$objdir/$old_library" - func_append 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_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib="$l" - done - fi - 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. - func_append dlprefiles " $lib $dependency_libs" - else - func_append 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 "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$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 - func_append notinst_path " $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - func_append 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 - case "$host" in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append 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" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append 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" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - 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 - func_append 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" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_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_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append 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:"*) ;; - *) func_append 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 "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append 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 - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - func_append 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 "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append 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 "$opt_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$absdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append 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:"*) ;; - *) func_append 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:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$opt_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 - if test -f "$inst_prefix_dir$libdir/$linklib"; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - 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:"*) ;; - *) func_append 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 - [\\/]*) - func_append 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 "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - func_append 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" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - 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_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - 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 - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append 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 "*) ;; - *) func_append 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 "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append 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 - func_append 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" - func_append 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!" - func_append 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 - # correct linux to gnu/linux during the next big refactor - 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= - versuffix2= - 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) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - versuffix2="$major.$age" - ;; - - 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. - func_append 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= - versuffix2= - else - versuffix=".0.0" - versuffix2=".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= - versuffix2= - 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" - func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$opt_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 - func_append 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 - func_append 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 - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append 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 "*) ;; - *) func_append 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 "*) ;; - *) func_append 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 - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-mirbsd* | *-*-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 - func_append 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 - versuffix2_save=$versuffix2 - 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="" - versuffix2="" - 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` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - 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 - func_append 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. - func_append 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 "*) - func_append 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 - func_append 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. - func_append 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 - versuffix2=$versuffix2_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 "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append 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 - # Remove ${wl} instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$opt_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 - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - 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"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append 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 "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append 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 "$opt_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 - func_append 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" - func_append 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 cmd1 in $cmds; do - IFS="$save_ifs" - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test "$try_normal_branch" = yes \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=${output_objdir}/${output_la}.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - 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 - func_append 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 "*) ;; - *) - func_append 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" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append 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\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$opt_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 - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - 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 - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - 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 - func_append 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 "$opt_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 - func_append 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" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append 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 "$opt_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 "$opt_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" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" - - # 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]) - func_append compile_command " ${wl}-bind_at_load" - func_append 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 "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - func_append compile_command " $compile_deplibs" - func_append 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 "*) ;; - *) func_append 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"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append 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;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append 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"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append 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=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # 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 - func_append 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 - func_append 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 $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - 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 $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # 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 - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append 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" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append 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" - func_append 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" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - 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 - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - 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" - func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append 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" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append 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" - func_append newdlprefiles " ${lt_sysroot:+=}$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 - func_append newdlfiles " $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append 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 && \ - test -n "$relink_command"; 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 "$opt_mode" = link || test "$opt_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) func_append RM " $arg"; rmforce=yes ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" - else - odir="$dir/$objdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" - - # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - 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 - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case "$opt_mode" in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${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 - func_append 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 - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$opt_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 - func_append 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 - func_append 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 - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # 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 "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$opt_mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_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/m4/libtool.m4 b/m4/libtool.m4 deleted file mode 100644 index 44e0ecf..0000000 --- a/m4/libtool.m4 +++ /dev/null @@ -1,7982 +0,0 @@ -# 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, 2011 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, 2011 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([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl -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_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])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 - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# 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], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _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) 2011 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 '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_REPLACE_SHELLFNS - - 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)], - [Go], [_LT_LANG(GO)], - [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 - - -m4_ifndef([AC_PROG_GO], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_GO. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ -m4_defun([AC_PROG_GO], -[AC_LANG_PUSH(Go)dnl -AC_ARG_VAR([GOC], [Go compiler command])dnl -AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl -_AC_ARG_VAR_LDFLAGS()dnl -AC_CHECK_TOOL(GOC, gccgo) -if test -z "$GOC"; then - if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) - fi -fi -if test -z "$GOC"; then - AC_CHECK_PROG(GOC, gccgo, gccgo, false) -fi -])#m4_defun -])#m4_ifndef - - -# _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([AC_PROG_GO], - [LT_LANG(GO)], - [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) - -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 there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 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 -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; 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([TAG]) -# --------------------------------- -# 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\"`' - m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], - [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) - 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([TAGNAME]) -# ---------------------------------- -# 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. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`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 "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -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_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([${with_sysroot}]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) - -# _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 - ;; -*-*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*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - 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_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -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 \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_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 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - 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"`env 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)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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,$cc_basename in - yes,*) - # gcc - 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 - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # 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' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # 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 # correct to gnu/linux during the next big refactor - 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 - ;; - -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[[23]].*) 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 # correct to gnu/linux during the next big refactor - 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 - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 # correct to gnu/linux during the next big refactor - 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 glibc/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_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -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_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob 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_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# 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};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /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 - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # 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 -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#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. */ -LT@&t@_DLSYM_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_globsym_save_LIBS=$LIBS - lt_globsym_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_globsym_save_LIBS - CFLAGS=$lt_globsym_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 - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -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_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _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)= - -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 - ;; - 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). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - 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 ' - if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" - fi - ;; - 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' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - 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\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) - # 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\ F* | *Sun*Fortran*) - _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 ' - ;; - *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,' - ;; - *Intel*\ [[CF]]*Compiler*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - *Portland\ Group*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - 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_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# 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]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# 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_PATH_MANIFEST_TOOL])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' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - 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*) - case $cc_basename in - cl*) - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - 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_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/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - 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=' $pic_flag' - 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)='${wl}-rpath ${wl}$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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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([$1]) - _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([$1]) - _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. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - _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' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _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(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - 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 - ;; - - # 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 $pic_flag -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 $pic_flag ${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 $pic_flag ${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_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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${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 $pic_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' - # 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. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_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 ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - 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} $pic_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 $pic_flag ${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 $pic_flag ${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_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([], [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([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_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 - -## 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... -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 -m4_require([_LT_PATH_MANIFEST_TOOL])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_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_CFLAGS=$CFLAGS - 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++"} - CFLAGS=$CXXFLAGS - 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 $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -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([$1]) - _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([$1]) - _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*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # 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 - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _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 - ;; - esac - ;; - 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 - ;; - - freebsd2.*) - # 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 $pic_flag ${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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${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 $pic_flag -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 $pic_flag -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 $pic_flag -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 $pic_flag -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 $pic_flag -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 - CFLAGS=$lt_save_CFLAGS - 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_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf 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). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - -# _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 -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])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 -], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF -package foo -func foo() { -} -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -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 ${prev}${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 - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} 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 - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$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 -CFLAGS=$_lt_libdeps_save_CFLAGS - -# 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_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 - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - 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" - CFLAGS="$lt_save_CFLAGS" -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_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 - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - 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 - CFLAGS=$lt_save_CFLAGS -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_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -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 - -## 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... -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 -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_GO_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Go compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GO_CONFIG], -[AC_REQUIRE([LT_PROG_GO])dnl -AC_LANG_SAVE - -# Source file extension for Go test sources. -ac_ext=go - -# Object file extension for compiled Go test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="package main; func main() { }" - -# Code to be used in simple link tests -lt_simple_link_test_code='package main; func main() { }' - -# 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_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GOC-"gccgo"} -CFLAGS=$GOFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# Go 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 - -## 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... -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 -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GO_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_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -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 -CFLAGS=$lt_save_CFLAGS -])# _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_GO -# ---------- -AC_DEFUN([LT_PROG_GO], -[AC_CHECK_TOOL(GOC, gccgo,) -]) - - -# 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_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _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%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && 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_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # 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}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine which file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 deleted file mode 100644 index 5d9acd8..0000000 --- a/m4/ltoptions.m4 +++ /dev/null @@ -1,384 +0,0 @@ -# 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 - - -## --------------------------------- ## -## Macros to handle LT_INIT 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@<:@=PKGS@:>@], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [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], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -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])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 deleted file mode 100644 index 9000a05..0000000 --- a/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# 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 -]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 deleted file mode 100644 index 07a8602..0000000 --- a/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# 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. - -# @configure_input@ - -# serial 3337 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 deleted file mode 100644 index c573da9..0000000 --- a/m4/lt~obsolete.m4 +++ /dev/null @@ -1,98 +0,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])]) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index b1d3480..4934f8b 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -31,10 +31,14 @@ SET(MDOC3_PAGES zip_file_get_error.mdoc zip_file_rename.mdoc zip_file_set_comment.mdoc + zip_file_set_encryption.mdoc + zip_file_set_external_attributes.mdoc + zip_file_set_mtime.mdoc zip_file_strerror.mdoc zip_fopen.mdoc zip_fopen_encrypted.mdoc zip_fread.mdoc + zip_fseek.mdoc zip_get_archive_comment.mdoc zip_get_archive_flag.mdoc zip_get_error.mdoc @@ -44,6 +48,7 @@ SET(MDOC3_PAGES zip_get_num_files.mdoc zip_name_locate.mdoc zip_open.mdoc + zip_register_progress_callback.mdoc zip_rename.mdoc zip_set_archive_comment.mdoc zip_set_archive_flag.mdoc diff --git a/man/Makefile.am b/man/Makefile.am index 9967b4b..96d3ae6 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -40,12 +40,15 @@ MAN3= \ zip_file_get_external_attributes.mdoc \ zip_file_rename.mdoc \ zip_file_set_comment.mdoc \ + zip_file_set_encryption.mdoc \ zip_file_set_external_attributes.mdoc \ zip_file_set_mtime.mdoc \ zip_file_strerror.mdoc \ zip_fopen.mdoc \ zip_fopen_encrypted.mdoc \ zip_fread.mdoc \ + zip_fseek.mdoc \ + zip_ftell.mdoc \ zip_get_archive_comment.mdoc \ zip_get_archive_flag.mdoc \ zip_get_error.mdoc \ @@ -56,6 +59,7 @@ MAN3= \ zip_name_locate.mdoc \ zip_open.mdoc \ zip_rename.mdoc \ + zip_register_progress_callback.mdoc \ zip_set_archive_comment.mdoc \ zip_set_archive_flag.mdoc \ zip_set_default_password.mdoc \ diff --git a/man/Makefile.in b/man/Makefile.in deleted file mode 100644 index 024780e..0000000 --- a/man/Makefile.in +++ /dev/null @@ -1,689 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 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@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -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@ -subdir = man -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -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__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -man1dir = $(mandir)/man1 -am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" -man3dir = $(mandir)/man3 -NROFF = nroff -MANS = $(man1_MANS) $(man3_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -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@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANFMT = @MANFMT@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -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@ -PKG_CONFIG_RPATH = @PKG_CONFIG_RPATH@ -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_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -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@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -man1_MANS = ${MAN1:.mdoc=.${MANFMT}} -man3_MANS = ${MAN3:.mdoc=.${MANFMT}} -DISTCLEANFILES = ${HTML} -EXTRA_DIST = ${MANDOC} ${MAN} CMakeLists.txt handle_links links -MAN1 = zipcmp.mdoc zipmerge.mdoc ziptool.mdoc -MAN3 = \ - ZIP_SOURCE_GET_ARGS.mdoc \ - libzip.mdoc \ - zip_add.mdoc \ - zip_add_dir.mdoc \ - zip_close.mdoc \ - zip_delete.mdoc \ - zip_dir_add.mdoc \ - zip_discard.mdoc \ - zip_error_clear.mdoc \ - zip_error_code_system.mdoc \ - zip_error_code_zip.mdoc \ - zip_error_fini.mdoc \ - zip_error_get.mdoc \ - zip_error_get_sys_type.mdoc \ - zip_error_init.mdoc \ - zip_error_set.mdoc \ - zip_error_strerror.mdoc \ - zip_error_system_type.mdoc \ - zip_error_to_data.mdoc \ - zip_error_to_str.mdoc \ - zip_errors.mdoc \ - zip_fclose.mdoc \ - zip_fdopen.mdoc \ - zip_file_add.mdoc \ - zip_file_extra_field_delete.mdoc \ - zip_file_extra_field_get.mdoc \ - zip_file_extra_field_set.mdoc \ - zip_file_extra_fields_count.mdoc \ - zip_file_get_comment.mdoc \ - zip_file_get_error.mdoc \ - zip_file_get_external_attributes.mdoc \ - zip_file_rename.mdoc \ - zip_file_set_comment.mdoc \ - zip_file_set_external_attributes.mdoc \ - zip_file_set_mtime.mdoc \ - zip_file_strerror.mdoc \ - zip_fopen.mdoc \ - zip_fopen_encrypted.mdoc \ - zip_fread.mdoc \ - zip_get_archive_comment.mdoc \ - zip_get_archive_flag.mdoc \ - zip_get_error.mdoc \ - zip_get_file_comment.mdoc \ - zip_get_name.mdoc \ - zip_get_num_entries.mdoc \ - zip_get_num_files.mdoc \ - zip_name_locate.mdoc \ - zip_open.mdoc \ - zip_rename.mdoc \ - zip_set_archive_comment.mdoc \ - zip_set_archive_flag.mdoc \ - zip_set_default_password.mdoc \ - zip_set_file_comment.mdoc \ - zip_set_file_compression.mdoc \ - zip_source.mdoc \ - zip_source_begin_write.mdoc \ - zip_source_buffer.mdoc \ - zip_source_close.mdoc \ - zip_source_commit_write.mdoc \ - zip_source_error.mdoc \ - zip_source_file.mdoc \ - zip_source_filep.mdoc \ - zip_source_free.mdoc \ - zip_source_function.mdoc \ - zip_source_is_deleted.mdoc \ - zip_source_keep.mdoc \ - zip_source_make_command_bitmap.mdoc \ - zip_source_open.mdoc \ - zip_source_read.mdoc \ - zip_source_rollback_write.mdoc \ - zip_source_seek.mdoc \ - zip_source_seek_compute_offset.mdoc \ - zip_source_seek_write.mdoc \ - zip_source_stat.mdoc \ - zip_source_tell.mdoc \ - zip_source_tell_write.mdoc \ - zip_source_win32a.mdoc \ - zip_source_win32handle.mdoc \ - zip_source_win32w.mdoc \ - zip_source_write.mdoc \ - zip_source_zip.mdoc \ - zip_stat.mdoc \ - zip_stat_init.mdoc \ - zip_unchange.mdoc \ - zip_unchange_all.mdoc \ - zip_unchange_archive.mdoc - -LN = ln -f -MANDOC = ${MAN1} ${MAN3} -HTML = ${MANDOC:.mdoc=.html} -MAN = ${MANDOC:.mdoc=.man} -SUFFIXES = .man .mdoc .html -all: all-am - -.SUFFIXES: -.SUFFIXES: .man .mdoc .html -$(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 man/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign man/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 -install-man1: $(man1_MANS) - @$(NORMAL_INSTALL) - @list1='$(man1_MANS)'; \ - list2=''; \ - test -n "$(man1dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.1[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ - done; } - -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) -install-man3: $(man3_MANS) - @$(NORMAL_INSTALL) - @list1='$(man3_MANS)'; \ - list2=''; \ - test -n "$(man3dir)" \ - && test -n "`echo $$list1$$list2`" \ - || exit 0; \ - echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ - { for i in $$list1; do echo "$$i"; done; \ - if test -n "$$list2"; then \ - for i in $$list2; do echo "$$i"; done \ - | sed -n '/\.3[a-z]*$$/p'; \ - fi; \ - } | while read p; do \ - if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; echo "$$p"; \ - done | \ - sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ - sed 'N;N;s,\n, ,g' | { \ - list=; while read file base inst; do \ - if test "$$base" = "$$inst"; then list="$$list $$file"; else \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ - fi; \ - done; \ - for i in $$list; do echo "$$i"; done | $(am__base_list) | \ - while read files; do \ - test -z "$$files" || { \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ - done; } - -uninstall-man3: - @$(NORMAL_UNINSTALL) - @list='$(man3_MANS)'; test -n "$(man3dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ - -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -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 $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"; 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: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -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) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -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: install-man - @$(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-man1 install-man3 - -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: uninstall-man - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) uninstall-hook -uninstall-man: uninstall-man1 uninstall-man3 - -.MAKE: install-am install-data-am install-strip uninstall-am - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - cscopelist-am ctags-am 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-man1 install-man3 \ - 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 \ - tags-am uninstall uninstall-am uninstall-hook uninstall-man \ - uninstall-man1 uninstall-man3 - -.PRECIOUS: Makefile - - -install-data-hook: link-man3 - -link-man3: install-man3 uninstall-hook - @${srcdir}/handle_links install directory=${DESTDIR}${man3dir} extension=3 command="${LN}" file=${srcdir}/links - -uninstall-hook: - @${srcdir}/handle_links uninstall directory=${DESTDIR}${man3dir} extension=3 command="rm -f" file=${srcdir}/links - -link-html: ${HTML} - @${srcdir}/handle_links uninstall directory=. extension=html command="rm -f" file=${srcdir}/links - @${srcdir}/handle_links install directory=. extension=html command="${LN}" file=${srcdir}/links - -.PHONY: mkman update-errors - -mkman: ${MAN} -mkhtml: ${HTML} link-html - -mkdocset: mkdocset.pl ${HTML} - SRCDIR=${srcdir} perl ${srcdir}/mkdocset.pl ${HTML} - -update-errors: - sh $(srcdir)/make_zip_errors.sh $(srcdir)/../lib/zip.h zip_errors.mdoc - -.mdoc.man: - mandoc -T man $< | sed '/TH/s,"NetBSD [^"]*","NiH",' > $@.$$$$ && mv $@.$$$$ $@ - -.mdoc.html: - mandoc -Thtml -Oman="%N.html",style=../nih-man.css $< | ${srcdir}/fix-man-links.sh > $@.$$$$ && mv $@.$$$$ $@ - -# 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/man/ZIP_SOURCE_GET_ARGS.man b/man/ZIP_SOURCE_GET_ARGS.man deleted file mode 100644 index 263dc11..0000000 --- a/man/ZIP_SOURCE_GET_ARGS.man +++ /dev/null @@ -1,47 +0,0 @@ -.TH "ZIP_SOURCE_GET_ARGS" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBZIP_SOURCE_GET_ARGS\fR -\- validate and cast arguments to source callback -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fItype *\fR -.PD 0 -.HP 4n -\fBZIP_SOURCE_GET_ARGS\fR(\fItype\fR, \fIvoid\ *data\fR, \fIzip_uint64_t\ len\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -The -\fBZIP_SOURCE_GET_ARGS\fR() -macro casts -\fIdata\fR -to a pointer to -\fItype\fR. -.SH "RETURN VALUES" -On success, -\fBZIP_SOURCE_GET_ARGS\fR() -returns -\fIdata\fR. -In case of error, it returns -\fRNULL\fR -and sets -\fIerror\fR. -.SH "ERRORS" -\fBZIP_SOURCE_GET_ARGS\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIlen\fR -is less than the size of -\fItype\fR -.SH "SEE ALSO" -libzip(3), -zip_source_function(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/fix-man-links.sh b/man/fix-man-links.sh new file mode 100755 index 0000000..9aa35ac --- /dev/null +++ b/man/fix-man-links.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# +LINKBASE='http://pubs.opengroup.org/onlinepubs/9699919799/functions/' + +sed -E -e 's,(),\1'"$LINKBASE"'\2\3,g' -e "s,$LINKBASE"'(libzip|zip),\1,g' diff --git a/man/libzip.man b/man/libzip.man deleted file mode 100644 index 9586484..0000000 --- a/man/libzip.man +++ /dev/null @@ -1,108 +0,0 @@ -.TH "LIBZIP" "3" "January 19, 2016" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBlibzip\fR -\- library for manipulating zip archives -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.SH "DESCRIPTION" -\fBlibzip\fR -is a library for reading, creating, and modifying zip archives. -.PP -The main design criteria for -\fBlibzip\fR -were: -.PD 0 -.TP 4n -\fB\(bu\fR -Do not create corrupt files, even in case of errors. -.TP 4n -\fB\(bu\fR -Do not delete data. -.TP 4n -\fB\(bu\fR -Be efficient. -.PD -.PP -For this reason, when modifying zip archives, -\fBlibzip\fR -writes to a temporary file and replaces the original -zip archive atomically. -.PP -Below there are two sections listing functions: one for how to read -from zip archives and one for how to create/modify them. -.SH "READING ZIP ARCHIVES" -.SS "open archive" -zip_open(3) -zip_fdopen(3) -.SS "find files" -zip_name_locate(3) -.SS "read files" -zip_fopen(3) -zip_fopen_encrypted(3) -zip_fopen_index(3) -zip_fopen_index_encrypted(3) -zip_fread(3) -zip_fclose(3) -.SS "close archive" -zip_close(3) -zip_discard(3) -.SS "miscellaneous" -zip_stat(3) -zip_file_get_comment(3) -zip_get_archive_comment(3) -zip_get_archive_flag(3) -zip_get_name(3) -zip_get_num_entries(3) -zip_set_default_password(3) -.SH "CREATING/MODIFYING ZIP ARCHIVES" -.SS "create/open archive" -zip_open(3) -.SS "add/change files and directories" -zip_dir_add(3) -zip_file_add(3) -zip_file_replace(3) -zip_file_set_comment(3) -zip_set_file_compression(3) -zip_source_buffer(3) -zip_source_file(3) -zip_source_filep(3) -zip_source_free(3) -zip_source_function(3) -zip_source_zip(3) -.SS "rename files" -zip_rename(3) -.SS "delete files" -zip_delete(3) -.SS "revert changes" -zip_unchange(3) -zip_unchange_all(3) -zip_unchange_archive(3) -.SS "read/modify extra fields" -zip_file_extra_field_by_id(3) -zip_file_extra_field_delete(3) -zip_file_extra_field_delete_by_id(3) -zip_file_extra_field_get(3) -zip_file_extra_field_set(3) -zip_file_extra_fields_count(3) -zip_file_extra_fields_count_by_id(3) -.SS "close archive" -zip_close(3) -.SS "miscellaneous" -zip_set_archive_comment(3) -zip_set_archive_flag(3) -zip_source(3) -.SH "ERROR HANDLING" -zip_error_to_str(3) -zip_strerror(3) -zip_file_strerror(3) -zip_error_get(3) -zip_error_get_sys_type(3) -zip_errors(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/libzip.mdoc b/man/libzip.mdoc index c3dafa9..db9d206 100644 --- a/man/libzip.mdoc +++ b/man/libzip.mdoc @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd January 19, 2016 +.Dd December 18, 2016 .Dt LIBZIP 3 .Os .Sh NAME @@ -74,6 +74,10 @@ from zip archives and one for how to create/modify them. .Xr zip_fopen_index 3 .Xr zip_fopen_index_encrypted 3 .Xr zip_fread 3 +.Xr zip_fseek 3 +(uncompressed files only) +.Xr zip_ftell 3 +(uncompressed files only) .Xr zip_fclose 3 .Ss close archive .Xr zip_close 3 @@ -81,6 +85,7 @@ from zip archives and one for how to create/modify them. .Ss miscellaneous .Xr zip_stat 3 .Xr zip_file_get_comment 3 +.Xr zip_file_get_external_attributes 3 .Xr zip_get_archive_comment 3 .Xr zip_get_archive_flag 3 .Xr zip_get_name 3 @@ -94,6 +99,9 @@ from zip archives and one for how to create/modify them. .Xr zip_file_add 3 .Xr zip_file_replace 3 .Xr zip_file_set_comment 3 +.Xr zip_file_set_external_attributes 3 +.Xr zip_file_set_encryption 3 +.Xr zip_file_set_mtime 3 .Xr zip_set_file_compression 3 .Xr zip_source_buffer 3 .Xr zip_source_file 3 @@ -120,6 +128,7 @@ from zip archives and one for how to create/modify them. .Ss close archive .Xr zip_close 3 .Ss miscellaneous +.Xr zip_register_progress_callback 3 .Xr zip_set_archive_comment 3 .Xr zip_set_archive_flag 3 .Xr zip_source 3 diff --git a/man/make_zip_errors.sh b/man/make_zip_errors.sh new file mode 100644 index 0000000..f9296b3 --- /dev/null +++ b/man/make_zip_errors.sh @@ -0,0 +1,113 @@ +#!/bin/sh + +# make_zip_errrors.sh: create zip_errors.mdoc from zip.h +# Copyright (C) 1999-2013 Dieter Baron and Thomas Klausner +# +# This file is part of libzip, a library to manipulate ZIP archives. +# The authors can be contacted at +# +# 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. The names of the authors may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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. + + +if [ "$#" -ne 2 ] +then + echo "Usage: $0 in_file out_file" >&2 + echo " e.g. $0 zip.h zip_err_str.c" >&2 + exit 1 +fi + +if [ "$1" = "$2" ] +then + echo "$0: error: output file = input file" >&2 + exit 1 +fi + +date=`date '+%B %e, %Y' | sed 's/ / /'` + +cat <> "$2.$$" || exit 1 +.\" zip_errors.mdoc -- list of all libzip error codes +.\" Copyright (C) 1999-2013 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" 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. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS \`\`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 AUTHORS 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. +.\" +.\" This file was generated automatically by $0 +.\" from $1; make changes there. +.\" +.Dd $date +.Dt ZIP_ERRORS 3 +.Os +.Sh NAME +.Nm zip_errors +.Nd list of all libzip error codes +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Sh DESCRIPTION +The following error codes are used by libzip: +.Bl -tag -width XZIPXERXCOMPNOTSUPPXX +EOF + +sed -n 's/^#define \(ZIP_ER_[A-Z_0-9]*\).*\/\* \(.\) \([^*]*\) \*\//.It Bq Er \1@\3./p' "$1" \ + | tr @ '\012' \ + >> "$2.$$" || exit 1 + +cat <> "$2.$$" || exit 1 +.El +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@giga.or.at +and +.An Thomas Klausner Aq Mt tk@giga.or.at +EOF + +mv "$2.$$" "$2" || exit 1 diff --git a/man/mkdocset.pl b/man/mkdocset.pl new file mode 100755 index 0000000..78be79b --- /dev/null +++ b/man/mkdocset.pl @@ -0,0 +1,216 @@ +#!/usr/bin/env perl + +use strict; + +my $DOCSETUTIL = '/Applications/Xcode.app/Contents/Developer/usr/bin/docsetutil'; + +my $BASE_URL = 'http://nih.at/libzip'; +my $BUNDLE_ID = 'at.nih.libzip'; + +my $SRCDIR = $ENV{SRCDIR} // '.'; + +my @files = @ARGV; + +my $docset = 'at.nih.libzip.docset'; +my @sh_nodes = qw(zipcmp zipmerge ziptool); + +(system('rm', '-rf', $docset) == 0) or die "can't remove old version of docset: $!"; + +mkdir($docset) or die "can't create docset directory: $!"; +mkdir("$docset/Contents") or die "can't create docset directory: $!"; +mkdir("$docset/Contents/Resources") or die "can't create docset directory: $!"; +mkdir("$docset/Contents/Resources/Documents") or die "can't create docset directory: $!"; + +my $version = `sed -n 's/#define PACKAGE_VERSION "\\(.*\\)"/\\1/p' ../config.h`; +chomp $version; + +my $suffix = ''; +$suffix = '-hg' if ($version =~ /[a-z]$/); + +my $package_file = "$BUNDLE_ID-$version.xar"; +my $download_url = "$BASE_URL/$package_file"; +my $feed_url = "$BASE_URL/at.nih.libzip$suffix.atom"; + +open I, "> $docset/Contents/Info.plist" or die "can't create Info.plist: $!"; +print I < + + + + CFBundleIdentifier + $BUNDLE_ID.docset + CFBundleName + libzip + DocSetPublisherIdentifier + at.nih + DocSetPublisherName + NiH + NSHumanReadableCopyright + Copyright © 2016 Dieter Baron and Thomas Klausner + CFBundleVersion + $version + DocSetFeedURL + $feed_url + DocSetFeedName + libzip + + +EOF +close I; + +open N, "> $docset/Contents/Resources/Nodes.xml" or die "can't create Nodes.xml: $!"; + +my %tl_nodes = (libzip => 1); + +for (@sh_nodes) { + $tl_nodes{$_} = 1; +} + +my @tokens = (); + +print N < + + + + libzip package + + + Library + libzip.html + +EOF + + +my $id = 1001; + +for my $html (@files) { + my $name = $html; + $name =~ s/.html//; + + if ($tl_nodes{$name}) { + next; + } + + process_file($html, 'c', $id++); +} + +print N " \n"; +print N " \n"; +print N " \n"; +print N " Commands\n"; +print N " \n"; + +$id = 2; + +for my $name (@sh_nodes) { + process_file("$name.html", 'c', $id++); +} + +print N " \n"; +print N " \n"; +print N " \n"; +print N " \n"; +print N " \n"; +print N "\n"; + +close N; + +link("$SRCDIR/nih-man.css", "$docset/Contents/Resources/Documents/nih-man.css") or die "can't link css file: $!"; +copy_html('libzip.html', "$docset/Contents/Resources/Documents/libzip.html"); + +write_tokens(); + +system($DOCSETUTIL, 'index', $docset) == 0 or die "can't index docset: $!"; +system($DOCSETUTIL, 'validate', $docset) == 0 or die "can't validate docset: $!"; + +unlink("$docset/Contents/Resources/Nodes.xml"); +unlink("$docset/Contents/Resources/Tokens.xml"); + +system($DOCSETUTIL, 'package', '-output', "at.nih.libzip-$version.xar", '-atom', "at.nih.libzip$suffix.atom", '-download-url', "$BASE_URL/at.nih.libzip-$version.xar", $docset); + + +sub copy_html { + my ($src, $dst) = @_; + + my $content = `cat $src`; + $content =~ s,,,; + $content =~ s,../nih-man.css,nih-man.css,; + + # remove header and footer + $content =~ s,]*class="(heade?r?|foote?r?)".*?,,sg; + + $content =~ s,(
$dst" or die "can't create $dst: $!"; + print X $content; + close X; +} + +sub process_file { + my ($html, $lang, $id) = @_; + + my $name = $html; + $name =~ s/.html//; + my $mdoc = "$SRCDIR/$name.mdoc"; + + my $description; + my @names = (); + + open MD, "< $mdoc" or die "can't open $mdoc: $!"; + + while (my $line = ) { + if ($line =~ m/^.Nm (.*?)( ,)?$/) { + push @names, $1; + } + elsif ($line =~ m/^.Nd (.*)/) { + $description = $1; + } + elsif ($line =~ m/^.Sh SYNOPSIS/) { + last; + } + } + + close MD; + + print N " \n"; + print N " $name\n"; + print N " $html\n"; + print N " \n"; + + for my $name (@names) { + push @tokens, { type => "//apple_ref/$lang/func", + path => $html, + name => $name, + description => $description, + id => $id }; + } + + copy_html($html, "$docset/Contents/Resources/Documents/$html"); +} + +sub write_token { + my ($T, $token) = @_; + + print $T " \n"; + print $T " $token->{type}/$token->{name}\n"; + print $T " $token->{path}\n"; + print $T " $token->{description}\n"; + print $T " {id}\" />\n"; + print $T " \n"; +} + +sub write_tokens { + open my $T, "> $docset/Contents/Resources/Tokens.xml" or die "can't create Tokens.xml: $!"; + print $T "\n"; + print $T "\n"; + + for my $token (sort { $a->{name} cmp $b->{name} } @tokens) { + write_token($T, $token); + } + + print $T "\n"; + + close $T; +} diff --git a/man/nih-man.css b/man/nih-man.css new file mode 100644 index 0000000..efabb03 --- /dev/null +++ b/man/nih-man.css @@ -0,0 +1,61 @@ +div.lit { + font-family: monospace; +} +div.sec-head, div.ssec-head, h1, h2 { + padding: 4pt; + border: solid; + border-width: 1px; + border-color: #555555; + background: #aaaaaa; + font-weight: bold; +} +div.sec-head, h1 { + font-size: large; +} +h2 { + font-size: medium; +} +div.sec-body, div.ssec-body { + margin-top: 1em; +} +span.arg { + font-style: italic; +} +span.define { +} +span.emph { +} +span.errno { +} +span.farg { + font-style: italic; +} +span.fname { + font-weight: bold; +} +span.ftype { + font-style: italic; +} +span.includes { + font-weight: bold; +} +span.name { + font-weight: bold; +} + +/* copied from nih's style.css */ +body { + background: #cccccc; +} +a { + text-decoration: none; +} +a:link { + color: #555555; +} +a:visited { + color: #666666; +} +a:hover { + color: #777777; +} diff --git a/man/zip_add.man b/man/zip_add.man deleted file mode 100644 index ec56b74..0000000 --- a/man/zip_add.man +++ /dev/null @@ -1,50 +0,0 @@ -.TH "ZIP_ADD" "3" "October 6, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_add\fR, -\fBzip_replace\fR -\- add file to zip archive or replace file in zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_add\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *name\fR, \fIzip_source_t\ *source\fR); -.PD -.PP -\fIint\fR -.PD 0 -.HP 4n -\fBzip_replace\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_add\fR() -is the obsolete version of -zip_file_add(3). -It is the same as calling -zip_file_add(3) -with an empty -\fIflags\fR -argument. -Similarly, the -\fBzip_replace\fR() -function is the obsolete version of -zip_file_replace(3). -It is the same as calling -zip_file_replace(3) -with an empty -\fIflags\fR -argument. -.SH "SEE ALSO" -libzip(3), -zip_file_add(3), -zip_file_replace(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_add.mdoc b/man/zip_add.mdoc index ec5e8d7..8f18a05 100644 --- a/man/zip_add.mdoc +++ b/man/zip_add.mdoc @@ -1,5 +1,5 @@ .\" zip_add.mdoc -- add files to zip archive -.\" Copyright (C) 2004-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2004-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -41,11 +41,9 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft zip_int64_t -.Fn zip_add "zip_t *archive" "const char *name" \ -"zip_source_t *source" +.Fn zip_add "zip_t *archive" "const char *name" "zip_source_t *source" .Ft int -.Fn zip_replace "zip_t *archive" "zip_uint64_t index" \ -"zip_source_t *source" +.Fn zip_replace "zip_t *archive" "zip_uint64_t index" "zip_source_t *source" .Sh DESCRIPTION The function .Fn zip_add diff --git a/man/zip_add_dir.man b/man/zip_add_dir.man deleted file mode 100644 index 9990208..0000000 --- a/man/zip_add_dir.man +++ /dev/null @@ -1,31 +0,0 @@ -.TH "ZIP_ADD_DIR" "3" "June 23, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_add_dir\fR -\- add directory to zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_add_dir\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *name\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_add_dir\fR() -is the obsolete version of -zip_dir_add(3). -It is the same as calling -zip_dir_add(3) -with an empty flags argument. -.SH "SEE ALSO" -libzip(3), -zip_dir_add(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_add_dir.mdoc b/man/zip_add_dir.mdoc index 45e30a4..08039b4 100644 --- a/man/zip_add_dir.mdoc +++ b/man/zip_add_dir.mdoc @@ -1,5 +1,5 @@ .\" zip_add_dir.mdoc -- add directory to zip archive -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_close.man b/man/zip_close.man deleted file mode 100644 index d553754..0000000 --- a/man/zip_close.man +++ /dev/null @@ -1,98 +0,0 @@ -.TH "ZIP_CLOSE" "3" "February 13, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_close\fR -\- close zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_close\fR(\fIzip_t\ *archive\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_close\fR() -function closes -\fIarchive\fR -and frees the memory allocated for it. -If any files within were changed, those changes are written to disk -first. -If writing changes fails, -\fBzip_close\fR() -fails and -\fIarchive\fR -is left unchanged. -If -\fIarchive\fR -contains no files, the file is completely removed (no empty archive is -written). -.PP -To close a zip file without saving changes, use -zip_discard(3). -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_close\fR() -will fail if: -.TP 19n -[\fRZIP_ER_EOF\fR] -Unexpected end-of-file found while reading from a file. -.TP 19n -[\fRZIP_ER_INTERNAL\fR] -The callback function of an added or replaced file returned an -error but failed to report which. -.TP 19n -[\fRZIP_ER_INVAL\fR] -The -\fIpath\fR -argument is -\fRNULL\fR. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_NOZIP\fR] -File is not a zip archive. -.TP 19n -[\fRZIP_ER_READ\fR] -A file read failed. -.TP 19n -[\fRZIP_ER_RENAME\fR] -A temporary file could not be renamed to its final name. -.TP 19n -[\fRZIP_ER_SEEK\fR] -A file seek failed. -.TP 19n -[\fRZIP_ER_TMPOPEN\fR] -A temporary file could not be created. -.TP 19n -[\fRZIP_ER_WRITE\fR] -A file write failed. -.TP 19n -[\fRZIP_ER_ZLIB\fR] -An error occurred while (de)compressing a stream with -zlib(3). -.PD 0 -.PP -Additionally, any errors returned by the callback function -for added or replaced files will be passed back. -.PD -.SH "SEE ALSO" -libzip(3), -zip_discard(3), -zip_error_get(3), -zip_fdopen(3), -zip_open(3), -zip_strerror(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_close.mdoc b/man/zip_close.mdoc index 3672bed..0e106ef 100644 --- a/man/zip_close.mdoc +++ b/man/zip_close.mdoc @@ -1,5 +1,5 @@ .\" zip_close.mdoc -- close zip archive -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd February 13, 2012 +.Dd December 18, 2016 .Dt ZIP_CLOSE 3 .Os .Sh NAME @@ -106,6 +106,7 @@ for added or replaced files will be passed back. .Xr zip_error_get 3 , .Xr zip_fdopen 3 , .Xr zip_open 3 , +.Xr zip_register_progress_callback 3 , .Xr zip_strerror 3 .Sh AUTHORS .An -nosplit diff --git a/man/zip_delete.man b/man/zip_delete.man deleted file mode 100644 index a4bc2cf..0000000 --- a/man/zip_delete.man +++ /dev/null @@ -1,42 +0,0 @@ -.TH "ZIP_DELETE" "3" "March 10, 2009" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_delete\fR -\- delete file from zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_delete\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR); -.PD -.SH "DESCRIPTION" -The file at position -\fIindex\fR -in the zip archive -\fIarchive\fR -is marked as deleted. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_delete\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR. -.SH "SEE ALSO" -libzip(3), -zip_unchange(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_delete.mdoc b/man/zip_delete.mdoc index 3165067..0c9a62b 100644 --- a/man/zip_delete.mdoc +++ b/man/zip_delete.mdoc @@ -1,5 +1,5 @@ .\" zip_delete.mdoc -- delete files from zip archive -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_dir_add.man b/man/zip_dir_add.man deleted file mode 100644 index 73654a1..0000000 --- a/man/zip_dir_add.man +++ /dev/null @@ -1,79 +0,0 @@ -.TH "ZIP_DIR_ADD" "3" "December 4, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_dir_add\fR -\- add directory to zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_dir_add\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *name\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_dir_add\fR() -adds a directory to a zip archive. -The argument -\fIarchive\fR -specifies the zip archive to which the directory should be added. -\fIname\fR -is the directory's name in the zip archive. -The -\fIflags\fR -argument can be any of: -.TP 22n -\fRZIP_FL_ENC_GUESS\fR -Guess encoding of -\fIname\fR -(default). -.TP 22n -\fRZIP_FL_ENC_UTF_8\fR -Interpret -\fIname\fR -as UTF-8. -.TP 22n -\fRZIP_FL_ENC_CP437\fR -Interpret -\fIname\fR -as code page 437 (CP-437). -.SH "RETURN VALUES" -Upon successful completion, the index of the new entry in the archive -is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_dir_add\fR() -fails if: -.TP 19n -[\fRZIP_ER_EXISTS\fR] -There is already an entry called -\fIname\fR -in the archive. -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIarchive\fR -or -\fIname\fR -are -\fRNULL\fR, -or invalid UTF-8 encoded file names. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.SH "SEE ALSO" -libzip(3), -zip_add(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> -.SH "CAVEATS" -\fBzip_dir_add\fR() -does not look in the file system, it just creates one entry in the -archive for the provided name. diff --git a/man/zip_dir_add.mdoc b/man/zip_dir_add.mdoc index 657dcd5..d881bf5 100644 --- a/man/zip_dir_add.mdoc +++ b/man/zip_dir_add.mdoc @@ -1,5 +1,5 @@ .\" zip_dir_add.mdoc -- add directory to zip archive -.\" Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft zip_int64_t -.Fn zip_dir_add "zip_t *archive" "const char *name" \ -"zip_flags_t flags" +.Fn zip_dir_add "zip_t *archive" "const char *name" "zip_flags_t flags" .Sh DESCRIPTION The function .Fn zip_dir_add diff --git a/man/zip_discard.man b/man/zip_discard.man deleted file mode 100644 index 3a3fae1..0000000 --- a/man/zip_discard.man +++ /dev/null @@ -1,30 +0,0 @@ -.TH "ZIP_DISCARD" "3" "February 13, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_discard\fR -\- close zip archive and discard changes -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_discard\fR(\fIzip_t\ *archive\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_discard\fR() -function closes -\fIarchive\fR -and frees the memory allocated for it. -Any changes to the archive are not written to disk and discarded. -.SH "SEE ALSO" -libzip(3), -zip_close(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_discard.mdoc b/man/zip_discard.mdoc index a36bee9..b63b7bf 100644 --- a/man/zip_discard.mdoc +++ b/man/zip_discard.mdoc @@ -1,5 +1,5 @@ .\" zip_discard.mdoc -- close zip archive and discard changes -.\" Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2012-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_error_clear.man b/man/zip_error_clear.man deleted file mode 100644 index 2cf0431..0000000 --- a/man/zip_error_clear.man +++ /dev/null @@ -1,40 +0,0 @@ -.TH "ZIP_ERROR_CLEAR" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_clear\fR, -\fBzip_file_error_clear\fR -\- clear error state for archive or file -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_error_clear\fR(\fIzip_t\ *archive\fR); -.PD -.PP -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_file_error_clear\fR(\fIzip_file_t\ *file\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_error_clear\fR() -function clears the error state for the zip archive -\fIarchive\fR. -.PP -The -\fBzip_file_error_clear\fR() -function does the same for the zip file -\fIfile\fR. -.SH "SEE ALSO" -libzip(3), -zip_error_get(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_code_system.man b/man/zip_error_code_system.man deleted file mode 100644 index bc839e2..0000000 --- a/man/zip_error_code_system.man +++ /dev/null @@ -1,32 +0,0 @@ -.TH "ZIP_ERROR_CODE_SYSTEM" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_code_system\fR -\- get operating system error part of zip_error -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_error_code_system\fR(\fIconst\ zip_error_t\ *ze\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_error_code_system\fR() -function returns the system specific part of the error from the -zip_error error -\fIze\fR. -For finding out what system reported the error, use -zip_error_system_type(3). -.SH "SEE ALSO" -libzip(3), -zip_error_code_zip(3), -zip_error_system_type(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_code_zip.man b/man/zip_error_code_zip.man deleted file mode 100644 index 627413a..0000000 --- a/man/zip_error_code_zip.man +++ /dev/null @@ -1,29 +0,0 @@ -.TH "ZIP_ERROR_CODE_ZIP" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_code_zip\fR -\- get libzip error part of zip_error -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_error_code_zip\fR(\fIconst\ zip_error_t\ *ze\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_error_code_zip\fR() -function returns the libzip specific part of the error from the -zip_error error -\fIze\fR. -.SH "SEE ALSO" -libzip(3), -zip_error_code_system(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_fini.man b/man/zip_error_fini.man deleted file mode 100644 index f715aef..0000000 --- a/man/zip_error_fini.man +++ /dev/null @@ -1,29 +0,0 @@ -.TH "ZIP_ERROR_FINI" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_fini\fR -\- clean up zip_error structure -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_error_fini\fR(\fIzip_error_t\ *ze\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_error_fini\fR() -function cleans up and frees internally allocated memory of the -zip_error pointed to by -\fIze\fR. -.SH "SEE ALSO" -libzip(3), -zip_error_init(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_get.man b/man/zip_error_get.man deleted file mode 100644 index 491621c..0000000 --- a/man/zip_error_get.man +++ /dev/null @@ -1,87 +0,0 @@ -.TH "ZIP_ERROR_GET" "3" "December 2, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_get\fR, -\fBzip_file_error_get\fR -\- get error codes for archive or file -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_error_get\fR(\fIzip_t\ *archive\fR, \fIint\ *zep\fR, \fIint\ *sep\fR); -.PD -.PP -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_file_error_get\fR(\fIzip_file_t\ *file\fR, \fIint\ *zep\fR, \fIint\ *sep\fR); -.PD -.SH "DESCRIPTION" -The functions -\fBzip_error_get\fR() -and -\fBzip_file_error_get\fR() -are deprecated. -Use -zip_error_code_system(3), -zip_error_code_zip(3), -zip_file_get_error(3), -and -zip_get_error(3) -instead. -.PP -For -\fBzip_error_get\fR(), -replace -.nf -.sp -.RS 6n -int ze, se; -zip_error_get(za, &ze, &se); -.RE -.fi -with -.nf -.sp -.RS 6n -int ze, se; -zip_error_t *error = zip_get_error(za); -ze = zip_error_code_zip(error); -se = zip_error_code_system(error); -.RE -.fi -For -\fBzip_file_error_get\fR(), -replace -.nf -.sp -.RS 6n -int ze, se; -zip_file_error_get(zf, &ze, &se); -.RE -.fi -with -.nf -.sp -.RS 6n -int ze, se; -zip_error_t *error = zip_file_get_error(zf); -ze = zip_error_code_zip(error); -se = zip_error_code_system(error); -.RE -.fi -.SH "SEE ALSO" -libzip(3), -zip_error_code_system(3), -zip_error_code_zip(3), -zip_file_get_error(3), -zip_get_error(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_get_sys_type.man b/man/zip_error_get_sys_type.man deleted file mode 100644 index 2bbf912..0000000 --- a/man/zip_error_get_sys_type.man +++ /dev/null @@ -1,49 +0,0 @@ -.TH "ZIP_ERROR_GET_SYS_TYPE" "3" "December 2, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_get_sys_type\fR -\- get type of system error code -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_error_get_sys_type\fR(\fIint\ ze\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_error_get_sys_type\fR() -is deprecated; use -zip_error_init_with_code(3) -and -zip_error_system_type(3) -instead. -.PP -Replace -.nf -.sp -.RS 6n -int i = zip_error_get_sys_type(ze); -.RE -.fi -with -.nf -.sp -.RS 6n -zip_error_t error; -zip_error_init_with_code(&error, ze); -int i = zip_error_system_type(&error); -.RE -.fi -.SH "SEE ALSO" -libzip(3), -zip_error_init_with_code(3), -zip_error_system_type(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_init.man b/man/zip_error_init.man deleted file mode 100644 index d8b996f..0000000 --- a/man/zip_error_init.man +++ /dev/null @@ -1,46 +0,0 @@ -.TH "ZIP_ERROR_INIT" "3" "December 2, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_init\fR, -\fBzip_error_init_with_code\fR -\- initialize zip_error structure -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_error_init\fR(\fIzip_error_t\ *error\fR); -.PD -.PP -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_error_init_with_code\fR(\fIzip_error_t\ *error\fR, \fIint\ ze\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_error_init\fR() -function initializes the zip_error pointed to by -\fIerror\fR. -\fI*error\fR -must be allocated before calling -\fBzip_error_init\fR(). -.PP -The -\fBzip_error_init_with_code\fR() -function does the same, but additionally sets the zip error code to -\fIze\fR -and sets the system error code to the current -errno(3) -value, if appropriate. -.SH "SEE ALSO" -libzip(3), -zip_error_fini(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_set.man b/man/zip_error_set.man deleted file mode 100644 index 02e2f01..0000000 --- a/man/zip_error_set.man +++ /dev/null @@ -1,38 +0,0 @@ -.TH "ZIP_ERROR_SET" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_set\fR -\- fill in zip_error structure -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_error_set\fR(\fIzip_error_t\ *ze\fR, \fIint\ le\fR, \fIint\ se\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_error_set\fR() -function sets the zip_error pointed to by -\fIze\fR -to the libzip error code -\fIle\fR -and the system error code -\fIse\fR. -.PP -\fIze\fR -must be allocated and initialized with -zip_error_fini(3) -before calling -\fBzip_error\fR(\fIset\fR). -.SH "SEE ALSO" -libzip(3), -zip_error_init(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_strerror.man b/man/zip_error_strerror.man deleted file mode 100644 index b69d5a2..0000000 --- a/man/zip_error_strerror.man +++ /dev/null @@ -1,36 +0,0 @@ -.TH "ZIP_ERROR_STRERROR" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_strerror\fR -\- create human-readable string for zip_error -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_error_strerror\fR(\fIzip_error_t\ *ze\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_error_strerror\fR() -function returns an error message string corresponding to -\fIze\fR -like -strerror(3). -This string will stay valid until the next call to -\fBzip_error_strerror\fR() -or until -zip_error_fini(3) -is called. -.SH "SEE ALSO" -libzip(3), -strerror(3), -zip_error_fini(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_system_type.man b/man/zip_error_system_type.man deleted file mode 100644 index 8187c30..0000000 --- a/man/zip_error_system_type.man +++ /dev/null @@ -1,46 +0,0 @@ -.TH "ZIP_ERROR_SYSTEM_TYPE" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_system_type\fR -\- return type of system error -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_error_system_type\fR(\fIconst\ zip_error_t\ *ze\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_error_system_type\fR() -function returns the type of the system specific part for the zip_error -\fIze\fR. -Currently, the following system types are defined: -.TP 13n -\fRZIP_ET_NONE\fR -System specific part of -\fIze\fR -is unused. -.TP 13n -\fRZIP_ET_SYS\fR -System specific part of -\fIze\fR -is an -errno(2). -.TP 13n -\fRZIP_ET_ZLIB\fR -\fIze\fR -is a -zlib(3) -error. -.SH "SEE ALSO" -libzip(3), -zip_error_code_system(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_to_data.man b/man/zip_error_to_data.man deleted file mode 100644 index b90a49c..0000000 --- a/man/zip_error_to_data.man +++ /dev/null @@ -1,38 +0,0 @@ -.TH "ZIP_ERROR_TO_DATA" "3" "November 2, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_to_data\fR -\- convert zip_error to return value suitable for ZIP_SOURCE_ERROR -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_error_to_data\fR(\fIconst\ zip_error_t\ *ze\fR, \fIvoid\ *data\fR, \fIzip_uint64_t\ len\fR); -.PD -.SH "DESCRIPTION" -\fBzip_error_to_data\fR() -function converts the zip_error -\fIze\fR -into data suitable as return value for -\fRZIP_SOURCE_ERROR\fR. -The data is written into the buffer -\fIdata\fR -of size -\fIlen\fR. -If the buffer is not large enough to hold 2 ints, an error is -returned. -.SH "RETURN VALUES" -\fBzip_error_to_data\fR() -returns 2*(sizeof int) on success, and \-1 on error. -.SH "SEE ALSO" -libzip(3), -zip_source_function(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_error_to_str.man b/man/zip_error_to_str.man deleted file mode 100644 index aac3d8b..0000000 --- a/man/zip_error_to_str.man +++ /dev/null @@ -1,52 +0,0 @@ -.TH "ZIP_ERROR_TO_STR" "3" "December 2, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_error_to_str\fR -\- get string representation of zip error -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_error_to_str\fR(\fIchar\ *buf\fR, \fIzip_uint64_t\ len\fR, \fIint\ ze\fR, \fIint\ se\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_error_to_str\fR() -is deprecated; use -zip_error_init_with_code(3) -and -zip_error_strerror(3) -instead. -.PP -Replace -.nf -.sp -.RS 6n -char buf[BUFSIZE]; -zip_error_to_str(buf, sizeof(buf), ze, se); -printf("%s", buf); -.RE -.fi -with -.nf -.sp -.RS 6n -zip_error_t error; -zip_error_init_with_code(&error, ze); -printf("%s", zip_error_strerror(&error)); -zip_error_fini(&error); -.RE -.fi -.SH "SEE ALSO" -libzip(3), -zip_error_init_with_code(3), -zip_error_strerror(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_errors.man b/man/zip_errors.man deleted file mode 100644 index 4591743..0000000 --- a/man/zip_errors.man +++ /dev/null @@ -1,100 +0,0 @@ -.TH "ZIP_ERRORS" "3" "March 10, 2009" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_errors\fR -\- list of all libzip error codes -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.SH "DESCRIPTION" -The following error codes are used by libzip: -.TP 23n -[\fRZIP_ER_OK\fR] -No error. -.TP 23n -[\fRZIP_ER_MULTIDISK\fR] -Multi-disk zip archives not supported. -.TP 23n -[\fRZIP_ER_RENAME\fR] -Renaming temporary file failed. -.TP 23n -[\fRZIP_ER_CLOSE\fR] -Closing zip archive failed. -.TP 23n -[\fRZIP_ER_SEEK\fR] -Seek error. -.TP 23n -[\fRZIP_ER_READ\fR] -Read error. -.TP 23n -[\fRZIP_ER_WRITE\fR] -Write error. -.TP 23n -[\fRZIP_ER_CRC\fR] -CRC error. -.TP 23n -[\fRZIP_ER_ZIPCLOSED\fR] -Containing zip archive was closed. -.TP 23n -[\fRZIP_ER_NOENT\fR] -No such file. -.TP 23n -[\fRZIP_ER_EXISTS\fR] -File already exists. -.TP 23n -[\fRZIP_ER_OPEN\fR] -Can't open file. -.TP 23n -[\fRZIP_ER_TMPOPEN\fR] -Failure to create temporary file. -.TP 23n -[\fRZIP_ER_ZLIB\fR] -Zlib error. -.TP 23n -[\fRZIP_ER_MEMORY\fR] -Malloc failure. -.TP 23n -[\fRZIP_ER_CHANGED\fR] -Entry has been changed. -.TP 23n -[\fRZIP_ER_COMPNOTSUPP\fR] -Compression method not supported. -.TP 23n -[\fRZIP_ER_EOF\fR] -Premature EOF. -.TP 23n -[\fRZIP_ER_INVAL\fR] -Invalid argument. -.TP 23n -[\fRZIP_ER_NOZIP\fR] -Not a zip archive. -.TP 23n -[\fRZIP_ER_INTERNAL\fR] -Internal error. -.TP 23n -[\fRZIP_ER_INCONS\fR] -Zip archive inconsistent. -.TP 23n -[\fRZIP_ER_REMOVE\fR] -Can't remove file. -.TP 23n -[\fRZIP_ER_DELETED\fR] -Entry has been deleted. -.TP 23n -[\fRZIP_ER_ENCRNOTSUPP\fR] -Encryption method not supported. -.TP 23n -[\fRZIP_ER_RDONLY\fR] -Read-only archive. -.TP 23n -[\fRZIP_ER_NOPASSWD\fR] -No password provided. -.TP 23n -[\fRZIP_ER_WRONGPASSWD\fR] -Wrong password provided. -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_errors.mdoc b/man/zip_errors.mdoc index ffe2541..721b59e 100644 --- a/man/zip_errors.mdoc +++ b/man/zip_errors.mdoc @@ -1,5 +1,5 @@ .\" zip_errors.mdoc -- list of all libzip error codes -.\" Copyright (C) 2004-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2004-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_fclose.man b/man/zip_fclose.man deleted file mode 100644 index 37e239e..0000000 --- a/man/zip_fclose.man +++ /dev/null @@ -1,33 +0,0 @@ -.TH "ZIP_FCLOSE" "3" "October 3, 2003" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_fclose\fR -\- close file in zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_fclose\fR(\fIzip_file_t\ *file\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_fclose\fR() -function closes -\fIfile\fR -and frees the memory allocated for it. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, the error code is returned. -.SH "SEE ALSO" -libzip(3), -zip_fopen(3), -zip_fread(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_fclose.mdoc b/man/zip_fclose.mdoc index 07d3035..e43cdf5 100644 --- a/man/zip_fclose.mdoc +++ b/man/zip_fclose.mdoc @@ -1,5 +1,5 @@ .\" zip_fclose.mdoc -- close file in zip archive -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd October 3, 2003 +.Dd September 12, 2016 .Dt ZIP_FCLOSE 3 .Os .Sh NAME @@ -53,7 +53,8 @@ Otherwise, the error code is returned. .Sh SEE ALSO .Xr libzip 3 , .Xr zip_fopen 3 , -.Xr zip_fread 3 +.Xr zip_fread 3 , +.Xr zip_fseek 3 .Sh AUTHORS .An -nosplit .An Dieter Baron Aq Mt dillo@nih.at diff --git a/man/zip_fdopen.man b/man/zip_fdopen.man deleted file mode 100644 index 6a4661e..0000000 --- a/man/zip_fdopen.man +++ /dev/null @@ -1,122 +0,0 @@ -.TH "ZIP_FDOPEN" "3" "February 13, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_fdopen\fR -\- open zip archive using open file descriptor -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_t *\fR -.PD 0 -.HP 4n -\fBzip_fdopen\fR(\fIint\ fd\fR, \fIint\ flags\fR, \fIint\ *errorp\fR); -.PD -.SH "DESCRIPTION" -The zip archive specified by the open file descriptor -\fIfd\fR -is opened and a pointer to a -\fIstruct zip\fR, -used to manipulate the archive, is returned. -In contrast to -zip_open(3), -using -\fBzip_fdopen\fR -the archive can only be opened in read-only mode. -The -\fIfd\fR -argument may not be used any longer after calling -\fBzip_fdopen\fR. -The -\fIflags\fR -are specified by -\fIor\fR'ing -the following values, or 0 for none of them. -.RS 6n -.TP 15n -\fRZIP_CHECKCONS\fR -Perform additional stricter consistency checks on the archive, and -error if they fail. -.RE -.PP -If an error occurs and -\fIerrorp\fR -is -non-\fRNULL\fR, -it will be set to the corresponding error code. -.SH "RETURN VALUES" -Upon successful completion -\fBzip_fdopen\fR() -returns a -\fIstruct zip\fR -pointer, and -\fIfd\fR -should not be used any longer, nor passed to -close(2). -Otherwise, -\fRNULL\fR -is returned and -\fI*errorp\fR -is set to indicate the error. -In the error case, -\fIfd\fR -remains unchanged. -.SH "ERRORS" -The file specified by -\fIfd\fR -is prepared for use by -libzip(3) -unless: -.TP 19n -[\fRZIP_ER_INCONS\fR] -Inconsistencies were found in the file specified by -\fIpath\fR. -This error is often caused by specifying -\fRZIP_CHECKCONS\fR -but can also happen without it. -.TP 19n -[\fRZIP_ER_INVAL\fR] -The -\fIflags\fR -argument is invalid. -Not all -zip_open(3) -flags are allowed for -\fBzip_fdopen\fR, -see -\fIDESCRIPTION\fR. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_NOZIP\fR] -The file specified by -\fIfd\fR -is not a zip archive. -.TP 19n -[\fRZIP_ER_OPEN\fR] -The file specified by -\fIfd\fR -could not be prepared for use by -libzip(3). -.TP 19n -[\fRZIP_ER_READ\fR] -A read error occurred; see -\fIerrno\fR -for details. -.TP 19n -[\fRZIP_ER_SEEK\fR] -The file specified by -\fIfd\fR -does not allow seeks. -.SH "SEE ALSO" -libzip(3), -zip_close(3), -zip_error_to_str(3), -zip_open(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_fdopen.mdoc b/man/zip_fdopen.mdoc index 0791654..2c177a3 100644 --- a/man/zip_fdopen.mdoc +++ b/man/zip_fdopen.mdoc @@ -1,5 +1,5 @@ .\" zip_fdopen.mdoc -- open zip archive using existing file descriptor -.\" Copyright (C) 2009-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_file_add.man b/man/zip_file_add.man deleted file mode 100644 index 66da783..0000000 --- a/man/zip_file_add.man +++ /dev/null @@ -1,133 +0,0 @@ -.TH "ZIP_FILE_ADD" "3" "August 2, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_add\fR, -\fBzip_file_replace\fR -\- add file to zip archive or replace file in zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_file_add\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *name\fR, \fIzip_source_t\ *source\fR, \fIzip_flags_t\ flags\fR); -.PD -.PP -\fIint\fR -.PD 0 -.HP 4n -\fBzip_file_replace\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_source_t\ *source\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_file_add\fR() -adds a file to a zip archive, while -\fBzip_file_replace\fR() -replaces an existing file in a zip archive. -The argument -\fIarchive\fR -specifies the zip archive to which the file should be added. -\fIname\fR -is the file's name in the zip archive (for -\fBzip_file_add\fR()), -while -\fIindex\fR -specifies which file should be replaced (for -\fBzip_file_replace\fR()). -The -\fIflags\fR -argument can be any combination of -\fRZIP_FL_OVERWRITE\fR -with one of -\fRZIP_FL_ENC_*\fR: -.TP 22n -\fRZIP_FL_OVERWRITE\fR -Overwrite any existing file of the same name. -For -\fBzip_file_add\fR -only. -.TP 22n -\fRZIP_FL_ENC_GUESS\fR -Guess encoding of -\fIname\fR -(default). -.TP 22n -\fRZIP_FL_ENC_UTF_8\fR -Interpret -\fIname\fR -as UTF-8. -.TP 22n -\fRZIP_FL_ENC_CP437\fR -Interpret -\fIname\fR -as code page 437 (CP-437). -.PD 0 -.PP -The data is obtained from the -\fIsource\fR -argument, see -zip_source(3). -.PD -.SH "RETURN VALUES" -Upon successful completion, -\fBzip_file_add\fR() -returns the index of the new file in the archive, and -\fBzip_file_replace\fR() -returns 0. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "EXAMPLES" -.nf -.RS 6n -zip_source_t *s; -const char buf="teststring"; - -if ((s=zip_source_buffer(archive, buffer, sizeof(buf), 0)) == NULL || - zip_file_add(archive, name, s, ZIP_FL_ENC_UTF_8) < 0) { - zip_source_free(s); - printf("error adding file: %s\en", zip_strerror(archive)); -} -.RE -.fi -.SH "ERRORS" -\fBzip_file_add\fR() -and -\fBzip_file_replace\fR() -fail if: -.TP 19n -[\fRZIP_ER_EXISTS\fR] -There is already a file called -\fIname\fR -in the archive. -(Only applies to -\fBzip_file_add\fR(), -and only if -\fRZIP_FL_OVERWRITE\fR -is not provided). -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIsource\fR -or -\fIname\fR -are -\fRNULL\fR, -or -\fIindex\fR -is invalid. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_RDONLY\fR] -Archive was opened in read-only mode. -.SH "SEE ALSO" -libzip(3), -zip_source(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_add.mdoc b/man/zip_file_add.mdoc index 0b1a47d..8be37b1 100644 --- a/man/zip_file_add.mdoc +++ b/man/zip_file_add.mdoc @@ -1,5 +1,5 @@ .\" zip_file_add.mdoc -- add files to zip archive -.\" Copyright (C) 2004-2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2004-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -41,11 +41,9 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft zip_int64_t -.Fn zip_file_add "zip_t *archive" "const char *name" \ -"zip_source_t *source" "zip_flags_t flags" +.Fn zip_file_add "zip_t *archive" "const char *name" "zip_source_t *source" "zip_flags_t flags" .Ft int -.Fn zip_file_replace "zip_t *archive" "zip_uint64_t index" \ -"zip_source_t *source" "zip_flags_t flags" +.Fn zip_file_replace "zip_t *archive" "zip_uint64_t index" "zip_source_t *source" "zip_flags_t flags" .Sh DESCRIPTION The function .Fn zip_file_add diff --git a/man/zip_file_extra_field_delete.man b/man/zip_file_extra_field_delete.man deleted file mode 100644 index 7179434..0000000 --- a/man/zip_file_extra_field_delete.man +++ /dev/null @@ -1,102 +0,0 @@ -.TH "ZIP_FILE_EXTRA_FIELD_DELETE" "3" "July 31, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_extra_field_delete\fR, -\fBzip_file_extra_field_delete_by_id\fR -\- delete extra field for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_file_extra_field_delete\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_uint16_t\ extra_field_index\fR, \fIzip_flags_t\ flags\fR); -.PD -.PP -\fIint\fR -.PD 0 -.HP 4n -\fBzip_file_extra_field_delete_by_id\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_uint16_t\ extra_field_id\fR, \fIzip_uint16_t\ extra_field_index\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_extra_field_delete\fR() -function deletes the extra field with index -\fIextra_field_index\fR -for the file at position -\fIindex\fR -in the zip archive. -.PP -If -\fIextra_field_index\fR -is -\fRZIP_EXTRA_FIELD_ALL\fR, -then all extra fields will be deleted. -.PP -The following -\fIflags\fR -are supported: -.RS 6n -.TP 18n -\fRZIP_FL_CENTRAL\fR -Delete extra fields from the archive's central directory. -.TP 18n -\fRZIP_FL_LOCAL\fR -Delete extra fields from the local file headers. -.RE -.PP -The -\fBzip_file_extra_field_delete_by_id\fR() -function deletes the extra field with ID (two-byte signature) -\fIextra_field_id\fR -and index -\fIextra_field_index\fR -(in other words, the -\fIextra_field_index\fR'th -extra field with ID -\fIextra_field_id\fR) -The other arguments are the same as for -\fBzip_file_extra_field_delete\fR() -(\fRZIP_EXTRA_FIELD_ALL\fR -will delete all extra fields of the specified ID). -.PP -Please note that due to the library design, the index of an extra -field may be different between central directory and local file -headers. -For this reason, it is not allowed to specify both -\fRZIP_FL_CENTRAL\fR -and -\fRZIP_FL_LOCAL\fR -in -\fIflags\fR, -except when deleting all extra fields (i.e., -\fIextra_field_index\fR -being -\fRZIP_EXTRA_FIELD_ALL\fR). -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_file_extra_field_delete\fR() -and -\fBzip_file_extra_field_delete_by_id\fR() -fail if: -.TP 19n -[\fRZIP_ER_NOENT\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR. -.SH "SEE ALSO" -libzip(3), -zip_file_extra_field_get(3), -zip_file_extra_field_set(3), -zip_file_extra_fields_count(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_extra_field_delete.mdoc b/man/zip_file_extra_field_delete.mdoc index bed3a96..7fad9d4 100644 --- a/man/zip_file_extra_field_delete.mdoc +++ b/man/zip_file_extra_field_delete.mdoc @@ -1,5 +1,5 @@ .\" zip_file_extra_field_delete.mdoc -- delete extra field for file in zip -.\" Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2012-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -41,11 +41,9 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_file_extra_field_delete "zip_t *archive" "zip_uint64_t index" \ -"zip_uint16_t extra_field_index" "zip_flags_t flags" +.Fn zip_file_extra_field_delete "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_index" "zip_flags_t flags" .Ft int -.Fn zip_file_extra_field_delete_by_id "zip_t *archive" "zip_uint64_t index" \ -"zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_flags_t flags" +.Fn zip_file_extra_field_delete_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_flags_t flags" .Sh DESCRIPTION The .Fn zip_file_extra_field_delete diff --git a/man/zip_file_extra_field_get.man b/man/zip_file_extra_field_get.man deleted file mode 100644 index 5c2c883..0000000 --- a/man/zip_file_extra_field_get.man +++ /dev/null @@ -1,130 +0,0 @@ -.TH "ZIP_FILE_EXTRA_FIELD_GET" "3" "October 8, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_extra_field_get\fR, -\fBzip_file_extra_field_get_by_id\fR -\- get extra field for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst zip_uint8_t *\fR -.PD 0 -.HP 4n -\fBzip_file_extra_field_get\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_uint16_t\ extra_field_index\fR, \fIzip_uint16_t\ *idp\fR, \fIzip_uint16_t\ *lenp\fR, \fIzip_flags_t\ flags\fR); -.PD -.PP -\fIconst zip_uint8_t *\fR -.PD 0 -.HP 4n -\fBzip_file_extra_field_get_by_id\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_uint16_t\ extra_field_id\fR, \fIzip_uint16_t\ extra_field_index\fR, \fIzip_uint16_t\ *lenp\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_extra_field_get\fR() -function returns the extra field with index -\fIextra_field_index\fR -for the file at position -\fIindex\fR -in the zip archive. -This pointer should not be modified or -free(3)'d, -and becomes invalid when -\fIarchive\fR -is closed. -If -\fIidp\fR -is not -\fRNULL\fR, -the integer to which it points will be set to the ID (two-byte -signature) of the selected extra field. -If -\fIlenp\fR -is not -\fRNULL\fR, -the integer to which it points will be set to the length of the -extra field. -Generally speaking, -\fIlenp\fR -and -\fIidp\fR -should be passed since only the extra field data is returned (i.e., -neither the ID nor the length, if the -\fIidp\fR -and -\fIlenp\fR -arguments are not provided). -.PP -The following -\fIflags\fR -are supported: -.RS 6n -.TP 20n -\fRZIP_FL_CENTRAL\fR -Return extra fields from the archive's central directory. -.TP 20n -\fRZIP_FL_LOCAL\fR -Return extra fields from the local file headers. -.TP 20n -\fRZIP_FL_UNCHANGED\fR -Return the original unchanged extra fields, ignoring any changes made. -.RE -.PP -The -\fBzip_file_extra_field_get_by_id\fR() -function returns the extra field with ID (two-byte signature) -\fIextra_field_id\fR -and index -\fIextra_field_index\fR -(in other words, the -\fIextra_field_index\fR'th -extra field with ID -\fIextra_field_id\fR) -The other arguments are the same as for -\fBzip_file_extra_field_get\fR(). -.SH "RETURN VALUES" -Upon successful completion, a pointer to an extra field is returned, -or -\fRNULL\fR -if there is no extra field with that -\fIextra_field_index\fR -for the file with index -\fIindex\fR. -In case of an error, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_file_extra_field_get\fR() -and -\fBzip_file_extra_field_get_by_id\fR() -fail if: -.TP 19n -[\fRZIP_ER_NOENT\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR, -or -\fIextra_field_index\fR -is not a valid extra file index (for ID -\fIextra_field_id\fR). -.SH "SEE ALSO" -libzip(3), -zip_file_extra_field_delete(3), -zip_file_extra_field_set(3), -zip_file_extra_fields_count(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> -.SH "CAVEATS" -Please note that the extra field IDs 0x0001 (ZIP64 extension), -0x6375 (Infozip UTF-8 comment), and -0x7075 (Infozip UTF-8 file name) can not be read using -\fBzip_file_extra_field_get\fR() -since they are used by -libzip(3) -internally. diff --git a/man/zip_file_extra_field_get.mdoc b/man/zip_file_extra_field_get.mdoc index c2cfdc9..5a54119 100644 --- a/man/zip_file_extra_field_get.mdoc +++ b/man/zip_file_extra_field_get.mdoc @@ -1,5 +1,5 @@ .\" zip_file_extra_field_get.mdoc -- get extra field for file in zip -.\" Copyright (C) 2012-2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2012-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -41,13 +41,9 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft const zip_uint8_t * -.Fn zip_file_extra_field_get "zip_t *archive" "zip_uint64_t index" \ -"zip_uint16_t extra_field_index" "zip_uint16_t *idp" "zip_uint16_t *lenp" \ -"zip_flags_t flags" +.Fn zip_file_extra_field_get "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_index" "zip_uint16_t *idp" "zip_uint16_t *lenp" "zip_flags_t flags" .Ft const zip_uint8_t * -.Fn zip_file_extra_field_get_by_id "zip_t *archive" "zip_uint64_t index" \ -"zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_uint16_t *lenp" \ -"zip_flags_t flags" +.Fn zip_file_extra_field_get_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_uint16_t *lenp" "zip_flags_t flags" .Sh DESCRIPTION The .Fn zip_file_extra_field_get diff --git a/man/zip_file_extra_field_set.man b/man/zip_file_extra_field_set.man deleted file mode 100644 index 0926ec0..0000000 --- a/man/zip_file_extra_field_set.man +++ /dev/null @@ -1,87 +0,0 @@ -.TH "ZIP_FILE_EXTRA_FIELD_SET" "3" "February 20, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_extra_field_set\fR -\- set extra field for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_file_extra_field_set\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_uint16_t\ extra_field_id\fR, \fIzip_uint16_t\ extra_field_index\fR, \fIconst\ zip_uint8_t\ *extra_field_data\fR, \fIzip_uint16_t\ len\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_extra_field_set\fR() -function sets the extra field with ID (two-byte signature) -\fIextra_field_id\fR -and index -\fIextra_field_index\fR -for the file at position -\fIindex\fR -in the zip archive. -The extra field's data will be set to -\fIextra_field_data\fR -and length -\fIlen\fR. -If a new entry shall be appended, set -\fIextra_field_index\fR -to -\fRZIP_EXTRA_FIELD_NEW\fR. -.PP -At least one of the following -\fIflags\fR -must be set: -.RS 6n -.TP 18n -\fRZIP_FL_CENTRAL\fR -Set extra field in the archive's central directory. -.TP 18n -\fRZIP_FL_LOCAL\fR -Set extra field in the local file headers. -.RE -.PP -Please note that the extra field IDs 0x0001 (ZIP64 extension), -0x6375 (Infozip UTF-8 comment), and -0x7075 (Infozip UTF-8 file name) can not be set using -\fBzip_file_extra_field_set\fR() -since they are set by -libzip(3) -automatically when needed. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_file_extra_field_set\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -The extra field size is too large (ID and length need 4 bytes; the -maximum length of all extra fields for one file combined is 65536 -bytes). -This error also occurs if -\fIextra_field_index\fR -is too large. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_NOENT\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR. -.SH "SEE ALSO" -libzip(3), -zip_file_extra_field_delete(3), -zip_file_extra_field_get(3), -zip_file_extra_fields_count(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_extra_field_set.mdoc b/man/zip_file_extra_field_set.mdoc index 095c451..9652c98 100644 --- a/man/zip_file_extra_field_set.mdoc +++ b/man/zip_file_extra_field_set.mdoc @@ -1,5 +1,5 @@ .\" zip_file_extra_field_set.mdoc -- set extra field for file in zip -.\" Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2012-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -40,10 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_file_extra_field_set "zip_t *archive" "zip_uint64_t index" \ -"zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" \ -"const zip_uint8_t *extra_field_data" "zip_uint16_t len" \ -"zip_flags_t flags" +.Fn zip_file_extra_field_set "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "const zip_uint8_t *extra_field_data" "zip_uint16_t len" "zip_flags_t flags" .Sh DESCRIPTION The .Fn zip_file_extra_field_set diff --git a/man/zip_file_extra_fields_count.man b/man/zip_file_extra_fields_count.man deleted file mode 100644 index 17d3f7e..0000000 --- a/man/zip_file_extra_fields_count.man +++ /dev/null @@ -1,85 +0,0 @@ -.TH "ZIP_FILE_EXTRA_FIELDS_COUNT" "3" "February 20, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_extra_fields_count\fR, -\fBzip_file_extra_fields_count_by_id\fR -\- count extra fields for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int16_t\fR -.PD 0 -.HP 4n -\fBzip_file_extra_fields_count\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_flags_t\ flags\fR); -.PD -.PP -\fIzip_int16_t\fR -.PD 0 -.HP 4n -\fBzip_file_extra_fields_count_by_id\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_uint16_t\ extra_field_id\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_extra_fields_count\fR() -function counts the extra fields for the file at position -\fIindex\fR -in the zip archive. -.PP -The following -\fIflags\fR -are supported: -.RS 6n -.TP 18n -\fRZIP_FL_CENTRAL\fR -Count extra fields from the archive's central directory. -.TP 18n -\fRZIP_FL_LOCAL\fR -Count extra fields from the local file headers. -.TP 18n -\fRZIP_FL_UNCHANGED\fR -Count the original unchanged extra fields, ignoring any changes made. -.RE -.PP -The -\fBzip_file_extra_fields_count_by_id\fR() -function counts the extra fields with ID (two-byte signature) -\fIextra_field_id\fR. -The other arguments are the same as for -\fBzip_file_extra_fields_count\fR(). -.PP -Extra fields that are the same in the central directory and the local file -header are merged into one. -Therefore, the counts with -\fRZIP_FL_CENTRAL\fR -and -\fRZIP_FL_LOCAL\fR -do not need to add up to the same value as when given -\fRZIP_FL_CENTRAL|ZIP_FL_LOCAL\fR -at the same time. -.SH "RETURN VALUES" -Upon successful completion, the requested number of extra fields is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_file_extra_fields_count\fR() -and -\fBzip_file_extra_fields_count_by_id\fR() -fail if: -.TP 19n -[\fRZIP_ER_NOENT\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR. -.SH "SEE ALSO" -libzip(3), -zip_file_extra_field_delete(3), -zip_file_extra_field_get(3), -zip_file_extra_field_set(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_extra_fields_count.mdoc b/man/zip_file_extra_fields_count.mdoc index 398fe74..b7b7d75 100644 --- a/man/zip_file_extra_fields_count.mdoc +++ b/man/zip_file_extra_fields_count.mdoc @@ -1,5 +1,5 @@ .\" zip_file_extra_fields_count.mdoc -- count extra field for file in zip -.\" Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2012-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -41,11 +41,9 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft zip_int16_t -.Fn zip_file_extra_fields_count "zip_t *archive" "zip_uint64_t index" \ -"zip_flags_t flags" +.Fn zip_file_extra_fields_count "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" .Ft zip_int16_t -.Fn zip_file_extra_fields_count_by_id "zip_t *archive" "zip_uint64_t index" \ -"zip_uint16_t extra_field_id" "zip_flags_t flags" +.Fn zip_file_extra_fields_count_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_flags_t flags" .Sh DESCRIPTION The .Fn zip_file_extra_fields_count diff --git a/man/zip_file_get_comment.man b/man/zip_file_get_comment.man deleted file mode 100644 index 94b5cb4..0000000 --- a/man/zip_file_get_comment.man +++ /dev/null @@ -1,89 +0,0 @@ -.TH "ZIP_FILE_GET_COMMENT" "3" "September 19, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_get_comment\fR -\- get comment for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_file_get_comment\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_uint32_t\ *lenp\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_get_comment\fR() -function returns the comment for the file at position -\fIindex\fR -in the zip archive. -The name is in UTF-8 encoding unless -\fRZIP_FL_ENC_RAW\fR -was specified (see below). -This pointer should not be modified or -free(3)'d, -and becomes invalid when -\fIarchive\fR -is closed. -If -\fIlenp\fR -is not -\fRNULL\fR, -the integer to which it points will be set to the length of the -comment. -If -\fIflags\fR -is set to -\fRZIP_FL_UNCHANGED\fR, -the original unchanged comment is returned. -.PP -Additionally, the following -\fIflags\fR -are supported: -.RS 6n -.TP 21n -\fRZIP_FL_ENC_RAW\fR -Return the unmodified comment as it is in the ZIP archive. -.TP 21n -\fRZIP_FL_ENC_GUESS\fR -(Default.) -Guess the encoding of the comment in the ZIP archive and convert it -to UTF-8, if necessary. -.TP 21n -\fRZIP_FL_ENC_STRICT\fR -Follow the ZIP specification for file names and extend it to file -comments, expecting them to be encoded in CP-437 in the ZIP archive -(except if it is a UTF-8 comment from the special extra field). -Convert it to UTF-8. -.RE -\fINote\fR: -ASCII is a subset of both CP-437 and UTF-8. -.SH "RETURN VALUES" -Upon successful completion, a pointer to the comment is returned, -or -\fRNULL\fR -if there is no comment. -In case of an error, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_file_get_comment\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR. -.SH "SEE ALSO" -libzip(3), -zip_file_set_comment(3), -zip_get_archive_comment(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_get_comment.mdoc b/man/zip_file_get_comment.mdoc index 812412e..e41514b 100644 --- a/man/zip_file_get_comment.mdoc +++ b/man/zip_file_get_comment.mdoc @@ -1,5 +1,5 @@ .\" zip_file_get_comment.mdoc -- get comment for file in zip -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft const char * -.Fn zip_file_get_comment "zip_t *archive" "zip_uint64_t index" "zip_uint32_t *lenp" \ -"zip_flags_t flags" +.Fn zip_file_get_comment "zip_t *archive" "zip_uint64_t index" "zip_uint32_t *lenp" "zip_flags_t flags" .Sh DESCRIPTION The .Fn zip_file_get_comment diff --git a/man/zip_file_get_error.man b/man/zip_file_get_error.man deleted file mode 100644 index c80dad5..0000000 --- a/man/zip_file_get_error.man +++ /dev/null @@ -1,26 +0,0 @@ -.TH "ZIP_FILE_GET_ERROR" "3" "November 9, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_get_error\fR -\- extract zip_error from zip_file -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_error_t *\fR -.PD 0 -.HP 4n -\fBzip_file_get_error\fR(\fIzip_file_t\ *zf\fR); -.PD -.SH "DESCRIPTION" -\fBzip_file_get_error\fR() -function returns the zip_error associated with the zip_file -\fIzf\fR. -.SH "SEE ALSO" -libzip(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_get_external_attributes.man b/man/zip_file_get_external_attributes.man deleted file mode 100644 index 8d7c3fc..0000000 --- a/man/zip_file_get_external_attributes.man +++ /dev/null @@ -1,138 +0,0 @@ -.TH "ZIP_FILE_GET_EXTERNAL_ATTRIBUTES" "3" "September 19, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_get_external_attributes\fR -\- get external attributes for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_file_get_external_attributes\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_flags_t\ flags\fR, \fIzip_uint8_t\ *opsys\fR, \fIzip_uint32_t\ *attributes\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_get_external_attributes\fR() -function returns the operating system and external attributes for the -file at position -\fIindex\fR -in the zip archive. -The external attributes usually contain the operating system-specific -file permissions. -If -\fIflags\fR -is set to -\fRZIP_FL_UNCHANGED\fR, -the original unchanged values are returned. -If -\fIopsys\fR -or -\fIattributes\fR -are -\fRNULL\fR, -they are not filled in. -.PP -The following operating systems are defined by the zip specification: -.RS 6n -.PD 0 -.PP -\fRZIP_OPSYS_ACORN_RISC\fR -.PP -\fRZIP_OPSYS_ALTERNATE_MVS\fR -.PP -\fRZIP_OPSYS_AMIGA\fR -.PP -\fRZIP_OPSYS_ATARI_ST\fR -.PP -\fRZIP_OPSYS_BEOS\fR -.PP -\fRZIP_OPSYS_CPM\fR -.PP -\fRZIP_OPSYS_DOS\fR -.PP -\fRZIP_OPSYS_MACINTOSH\fR -.PP -\fRZIP_OPSYS_MVS\fR -.PP -\fRZIP_OPSYS_OPENVMS\fR -.PP -\fRZIP_OPSYS_OS_2\fR -.PP -\fRZIP_OPSYS_OS_400\fR -.PP -\fRZIP_OPSYS_OS_X\fR -.PP -\fRZIP_OPSYS_TANDEM\fR -.PP -\fRZIP_OPSYS_UNIX\fR -.PP -\fRZIP_OPSYS_VFAT\fR -.PP -\fRZIP_OPSYS_VM_CMS\fR -.PP -\fRZIP_OPSYS_VSE\fR -.PP -\fRZIP_OPSYS_WINDOWS_NTFS\fR -(uncommon, use -\fRZIP_OPSYS_DOS\fR -instead) -.PP -\fRZIP_OPSYS_Z_SYSTEM\fR -.RE -.PD -.PP -The defines above follow the PKWARE Inc. Appnote; please note that -the InfoZIP Appnote has a slightly different mapping. -.SH "RETURN VALUES" -Upon successful completion, 0 is returned. -In case of an error, -\fR\-1\fR -is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "EXAMPLES" -The following code can be used to expand -\fIattributes\fR -if the operating system is -\fRZIP_OPSYS_DOS\fR. -.nf -.sp -.RS 0n -#include - -#define FA_RDONLY 0x01 // FILE_ATTRIBUTE_READONLY -#define FA_DIREC 0x10 // FILE_ATTRIBUTE_DIRECTORY - -static mode_t -_zip_dos_attr2mode(zip_uint32_t attr) -{ - mode_t m = S_IRUSR | S_IRGRP | S_IROTH; - if (0 == (attr & FA_RDONLY)) - m |= S_IWUSR | S_IWGRP | S_IWOTH; - - if (attr & FA_DIREC) - m = (S_IFDIR | (m & ~S_IFMT)) | S_IXUSR | S_IXGRP | S_IXOTH; - - return m; -} -.RE -.fi -.SH "ERRORS" -\fBzip_file_get_external_attributes\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR. -.SH "SEE ALSO" -libzip(3), -zip_file_set_external_attributes(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_get_external_attributes.mdoc b/man/zip_file_get_external_attributes.mdoc index 2f0b17f..bc5eb37 100644 --- a/man/zip_file_get_external_attributes.mdoc +++ b/man/zip_file_get_external_attributes.mdoc @@ -1,5 +1,5 @@ .\" zip_file_get_external_attributes.mdoc -- get external attributes for file in zip -.\" Copyright (C) 2013-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2013-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd September 19, 2013 +.Dd December 29, 2016 .Dt ZIP_FILE_GET_EXTERNAL_ATTRIBUTES 3 .Os .Sh NAME @@ -39,9 +39,8 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h -.Ft const char * -.Fn zip_file_get_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" \ -"zip_uint8_t *opsys" "zip_uint32_t *attributes" +.Ft int +.Fn zip_file_get_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_uint8_t *opsys" "zip_uint32_t *attributes" .Sh DESCRIPTION The .Fn zip_file_get_external_attributes diff --git a/man/zip_file_rename.man b/man/zip_file_rename.man deleted file mode 100644 index ab2fa41..0000000 --- a/man/zip_file_rename.man +++ /dev/null @@ -1,74 +0,0 @@ -.TH "ZIP_FILE_RENAME" "3" "June 23, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_rename\fR -\- rename file in zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_file_rename\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIconst\ char\ *name\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The file at position -\fIindex\fR -in the zip archive -\fIarchive\fR -is renamed to -\fIname\fR. -The -\fIflags\fR -argument can be any of: -.TP 22n -\fRZIP_FL_ENC_GUESS\fR -Guess encoding of -\fIname\fR -(default). -.TP 22n -\fRZIP_FL_ENC_UTF_8\fR -Interpret -\fIname\fR -as UTF-8. -.TP 22n -\fRZIP_FL_ENC_CP437\fR -Interpret -\fIname\fR -as code page 437 (CP-437). -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_rename\fR() -fails if: -.TP 19n -[\fRZIP_ER_DELETED\fR] -The file to be renamed has been deleted from the archive. -.TP 19n -[\fRZIP_ER_EXISTS\fR] -There is already a file called -\fIname\fR -in the archive. -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR, -\fIname is\fR -\fRNULL\fR, -the empty string, or not a valid UTF-8 encoded string. -Also a file cannot be renamed to a directory or vice versa. -Directories are denoted by a trailing slash. -.SH "SEE ALSO" -libzip(3), -zip_unchange(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_rename.mdoc b/man/zip_file_rename.mdoc index ff98bef..0f3defc 100644 --- a/man/zip_file_rename.mdoc +++ b/man/zip_file_rename.mdoc @@ -1,5 +1,5 @@ .\" zip_file_rename.mdoc -- rename file in zip archive -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_file_rename "zip_t *archive" "zip_uint64_t index" "const char *name" \ -"zip_flags_t flags" +.Fn zip_file_rename "zip_t *archive" "zip_uint64_t index" "const char *name" "zip_flags_t flags" .Sh DESCRIPTION The file at position .Ar index diff --git a/man/zip_file_set_comment.man b/man/zip_file_set_comment.man deleted file mode 100644 index 15d082b..0000000 --- a/man/zip_file_set_comment.man +++ /dev/null @@ -1,86 +0,0 @@ -.TH "ZIP_FILE_SET_COMMENT" "3" "September 19, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_set_comment\fR -\- set comment for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_set_file_comment\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIconst\ char\ *comment\fR, \fIzip_uint16_t\ len\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_set_comment\fR() -function sets the comment for the file at position -\fIindex\fR -in the zip archive to -\fIcomment\fR -of length -\fIlen\fR. -If -\fIcomment\fR -is -\fRNULL\fR -and -\fIlen\fR -is 0, the file comment will be removed. -The -\fIflags\fR -argument can be any of: -.TP 22n -\fRZIP_FL_ENC_GUESS\fR -Guess encoding of -\fIcomment\fR -(default). -.TP 22n -\fRZIP_FL_ENC_UTF_8\fR -Interpret -\fIcomment\fR -as UTF-8. -.TP 22n -\fRZIP_FL_ENC_CP437\fR -Interpret -\fIcomment\fR -as code page 437 (CP-437). -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_file_set_comment\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR, -or -\fIlen\fR -is less than 0 or longer than the maximum comment length in a zip file -(65535), or -\fIcomment\fR -is not a valid UTF-8 encoded string. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_RDONLY\fR] -The -\fIarchive\fR -was opened in read-only mode. -.SH "SEE ALSO" -libzip(3), -zip_file_get_comment(3), -zip_get_archive_comment(3), -zip_set_archive_comment(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_set_comment.mdoc b/man/zip_file_set_comment.mdoc index b32c6cb..f893f62 100644 --- a/man/zip_file_set_comment.mdoc +++ b/man/zip_file_set_comment.mdoc @@ -1,5 +1,5 @@ .\" zip_file_set_comment.mdoc -- set comment for file in zip -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_set_file_comment "zip_t *archive" "zip_uint64_t index" \ -"const char *comment" "zip_uint16_t len" "zip_flags_t flags" +.Fn zip_file_set_comment "zip_t *archive" "zip_uint64_t index" "const char *comment" "zip_uint16_t len" "zip_flags_t flags" .Sh DESCRIPTION The .Fn zip_file_set_comment diff --git a/man/zip_file_set_encryption.mdoc b/man/zip_file_set_encryption.mdoc new file mode 100644 index 0000000..89dd358 --- /dev/null +++ b/man/zip_file_set_encryption.mdoc @@ -0,0 +1,111 @@ +.\" zip_file_set_encryption.mdoc -- set encryption method for file +.\" Copyright (C) 2016 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" 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. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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. +.\" +.Dd December 16, 2016 +.Dt ZIP_FILE_SET_ENCRYPTION 3 +.Os +.Sh NAME +.Nm zip_file_set_encryption +.Nd set encryption method for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_encryption "zip_t *archive" "zip_uint64_t index" "zip_uint16_t method" "const char *password" +.Sh DESCRIPTION +The +.Fn zip_file_set_encryption +function sets the encryption method for the file at position +.Ar index +in the zip archive to +.Ar method +using the password +.Ar password . +The +.Ar method +is the same as returned by +.Xr zip_stat 3 . +For the +.Ar method +argument, currently only the following values are supported: +.Bl -tag -width ZIP_CM_DEFLATE_XX +.It Dv ZIP_EM_NONE +No encryption. +.It Dv ZIP_EM_AES_128 +Winzip AES-128 encryption. +.It Dv ZIP_EM_AES_192 +Winzip AES-192 encryption. +.It Dv ZIP_EM_AES_256 +Winzip AES-256 encryption. +.El +.Pp +If +.Ar password +is +.Dv NULL , +the default password provided by +.Xr zip_set_default_password 3 +is used. +.Pp +The current encryption method for a file in a zip archive can be +determined using +.Xr zip_stat 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_encryption +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_ENCRNOTSUPP +Unsupported compression method requested. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or the argument combination is invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +Read-only zip file, no changes allowed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_set_default_password 3 , +.Xr zip_stat 3 +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt tk@giga.or.at diff --git a/man/zip_file_set_external_attributes.man b/man/zip_file_set_external_attributes.man deleted file mode 100644 index 859295a..0000000 --- a/man/zip_file_set_external_attributes.man +++ /dev/null @@ -1,59 +0,0 @@ -.TH "ZIP_FILE_SET_EXTERNAL_ATTRIBUTES" "3" "September 19, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_set_external_attributes\fR -\- set external attributes for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_file_set_external_attributes\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_flags_t\ flags\fR, \fIzip_uint8_t\ opsys\fR, \fIzip_uint32_t\ attributes\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_set_external_attributes\fR() -function sets the operating system and external attributes for the -file at position -\fIindex\fR -in the zip archive. -Currently, no -\fIflags\fR -are supported. -.PP -For a list of known -\fIopsys\fR -values, see -zip_file_get_external_attributes(3). -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_file_set_external_attributes\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_RDONLY\fR] -The -\fIarchive\fR -was opened in read-only mode. -.SH "SEE ALSO" -libzip(3), -zip_file_get_external_attributes(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_set_external_attributes.mdoc b/man/zip_file_set_external_attributes.mdoc index b3aa83d..c1a4788 100644 --- a/man/zip_file_set_external_attributes.mdoc +++ b/man/zip_file_set_external_attributes.mdoc @@ -1,5 +1,5 @@ .\" zip_file_set_external_attributes.mdoc -- set external attributes for file in zip -.\" Copyright (C) 2013-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2013-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd September 19, 2013 +.Dd December 29, 2016 .Dt ZIP_FILE_SET_EXTERNAL_ATTRIBUTES 3 .Os .Sh NAME @@ -39,9 +39,8 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h -.Ft const char * -.Fn zip_file_set_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" \ -"zip_uint8_t opsys" "zip_uint32_t attributes" +.Ft int +.Fn zip_file_set_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_uint8_t opsys" "zip_uint32_t attributes" .Sh DESCRIPTION The .Fn zip_file_set_external_attributes diff --git a/man/zip_file_set_mtime.man b/man/zip_file_set_mtime.man deleted file mode 100644 index a348982..0000000 --- a/man/zip_file_set_mtime.man +++ /dev/null @@ -1,55 +0,0 @@ -.TH "ZIP_FILE_SET_MTIME" "3" "August 5, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_set_mtime\fR -\- set last modification time (mtime) for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_set_file_mtime\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fItime_t\ mtime\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_file_set_mtime\fR() -function sets the last modification time (mtime) for the file at -position -\fIindex\fR -in the zip archive to -\fImtime\fR. -Currently, no support for any -\fIflags\fR -is implemented. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_file_set_mtime\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_RDONLY\fR] -The -\fIarchive\fR -was opened in read-only mode. -.SH "SEE ALSO" -libzip(3), -zip_stat(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_set_mtime.mdoc b/man/zip_file_set_mtime.mdoc index 82ae600..4c78217 100644 --- a/man/zip_file_set_mtime.mdoc +++ b/man/zip_file_set_mtime.mdoc @@ -1,5 +1,5 @@ .\" zip_file_set_mtime.mdoc -- set mtime for file in zip -.\" Copyright (C) 2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd August 5, 2014 +.Dd December 29, 2016 .Dt ZIP_FILE_SET_MTIME 3 .Os .Sh NAME @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_set_file_mtime "zip_t *archive" "zip_uint64_t index" \ -"time_t mtime" "zip_flags_t flags" +.Fn zip_file_set_mtime "zip_t *archive" "zip_uint64_t index" "time_t mtime" "zip_flags_t flags" .Sh DESCRIPTION The .Fn zip_file_set_mtime diff --git a/man/zip_file_strerror.man b/man/zip_file_strerror.man deleted file mode 100644 index ae5ffde..0000000 --- a/man/zip_file_strerror.man +++ /dev/null @@ -1,56 +0,0 @@ -.TH "ZIP_FILE_STRERROR" "3" "December 27, 2004" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_file_strerror\fR, -\fBzip_strerror\fR -\- get string representation for a zip error -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_file_strerror\fR(\fIzip_file_t\ *file\fR); -.PD -.PP -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_strerror\fR(\fIzip_t\ *archive\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_strerror\fR() -function returns a string describing the last error for the zip archive -\fIarchive\fR, -while the -\fBzip_file_strerror\fR() -function does the same for a zip file -\fIfile\fR -(one file in an archive). -The returned string must not be modified or freed, and becomes invalid when -\fIarchive\fR -or -\fIfile\fR, -respectively, -is closed or on the next call to -\fBzip_strerror\fR() -or -\fBzip_file_strerror\fR(), -respectively, -for the same archive. -.SH "RETURN VALUES" -\fBzip_file_strerror\fR() -and -\fBzip_strerror\fR() -return a pointer to the error string. -.SH "SEE ALSO" -libzip(3), -zip_error_to_str(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_file_strerror.mdoc b/man/zip_file_strerror.mdoc index 76ef37c..e5d11be 100644 --- a/man/zip_file_strerror.mdoc +++ b/man/zip_file_strerror.mdoc @@ -1,5 +1,5 @@ .\" zip_file_strerror.mdoc -- get string representation for a zip error -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_fopen.man b/man/zip_fopen.man deleted file mode 100644 index 8c0db87..0000000 --- a/man/zip_fopen.man +++ /dev/null @@ -1,126 +0,0 @@ -.TH "ZIP_FOPEN" "3" "October 23, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_fopen\fR, -\fBzip_fopen_index\fR -\- open file in zip archive for reading -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_file_t *\fR -.PD 0 -.HP 4n -\fBzip_fopen\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *fname\fR, \fIzip_flags_t\ flags\fR); -.PD -.PP -\fIzip_file_t *\fR -.PD 0 -.HP 4n -\fBzip_fopen_index\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_fopen\fR() -function opens the file name -\fIfname\fR -in -\fIarchive\fR. -The -\fIflags\fR -argument specifies how the name lookup should be done, according to -the values are described in -zip_name_locate(3). -Also, the following values may be -\fIor\fR'ed -to it. -.RS 6n -.TP 19n -\fRZIP_FL_COMPRESSED\fR -Read the compressed data. -Otherwise the data is uncompressed by -\fBzip_fread\fR(). -.TP 19n -\fRZIP_FL_UNCHANGED\fR -Read the original data from the zip archive, ignoring any changes made -to the file. -.RE -.PP -The -\fBzip_fopen_index\fR() -function opens the file at position -\fIindex\fR. -.PP -If encrypted data is encountered, the functions call -zip_fopen_encrypted(3) -or -zip_fopen_index_encrypted(3) -respectively, using the default password set with -zip_set_default_password(3). -.SH "RETURN VALUES" -Upon successful completion, a -\fIstruct zip_file\fR -pointer is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -.TP 19n -[\fRZIP_ER_CHANGED\fR] -The file data has been changed. -.TP 19n -[\fRZIP_ER_COMPNOTSUPP\fR] -The compression method used is not supported. -.TP 19n -[\fRZIP_ER_ENCRNOTSUPP\fR] -The encryption method used is not supported. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_NOPASSWD\fR] -The file is encrypted, but no password has been provided. -.TP 19n -[\fRZIP_ER_READ\fR] -A file read error occurred. -.TP 19n -[\fRZIP_ER_SEEK\fR] -A file seek error occurred. -.TP 19n -[\fRZIP_ER_WRONGPASSWD\fR] -The provided password does not match the password used for encryption. -Note that some incorrect passwords are not detected by the check done by -\fBzip_fopen\fR(). -.TP 19n -[\fRZIP_ER_ZLIB\fR] -Initializing the zlib stream failed. -.PP -The function -\fBzip_fopen\fR() -may also fail and set -\fIzip_err\fR -for any of the errors specified for the routine -zip_name_locate(3). -.PP -The function -\fBzip_fopen_index\fR() -may also fail with -\fRZIP_ER_INVAL\fR -if -\fIindex\fR -is invalid. -.SH "SEE ALSO" -libzip(3), -zip_fclose(3), -zip_fread(3), -zip_get_num_entries(3), -zip_name_locate(3), -zip_set_default_password(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_fopen.mdoc b/man/zip_fopen.mdoc index 4f8371a..948acb3 100644 --- a/man/zip_fopen.mdoc +++ b/man/zip_fopen.mdoc @@ -1,5 +1,5 @@ .\" zip_fopen.mdoc -- open file in zip archive for reading -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd October 23, 2013 +.Dd September 12, 2016 .Dt ZIP_FOPEN 3 .Os .Sh NAME @@ -131,6 +131,7 @@ is invalid. .Xr libzip 3 , .Xr zip_fclose 3 , .Xr zip_fread 3 , +.Xr zip_fseek 3 , .Xr zip_get_num_entries 3 , .Xr zip_name_locate 3 , .Xr zip_set_default_password 3 diff --git a/man/zip_fopen_encrypted.man b/man/zip_fopen_encrypted.man deleted file mode 100644 index 1acc6db..0000000 --- a/man/zip_fopen_encrypted.man +++ /dev/null @@ -1,87 +0,0 @@ -.TH "ZIP_FOPEN_ENCRYPTED" "3" "July 22, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_fopen_encrypted\fR, -\fBzip_fopen_index_encrypted\fR -\- open encrypted file in zip archive for reading -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_file_t *\fR -.PD 0 -.HP 4n -\fBzip_fopen_encrypted\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *fname\fR, \fIzip_flags_t\ flags\fR, \fIconst\ char\ *password\fR); -.PD -.PP -\fIzip_file_t *\fR -.PD 0 -.HP 4n -\fBzip_fopen_index_encrypted\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_flags_t\ flags\fR, \fIconst\ char\ *password\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_fopen_encrypted\fR() -function opens the encrypted file name -\fIfname\fR -in -\fIarchive\fR -using the password given in the -\fIpassword\fR -argument. -The -\fIflags\fR -argument are the same as for -zip_fopen(3). -.PP -The -\fBzip_fopen_index_encrypted\fR() -function opens the file at position -\fIindex\fR, -see -zip_fopen_index(3). -These functions are called automatically by -zip_fopen(3); -you only need to call them if you want to specify a non-default password -(see -zip_set_default_password(3)). -.SH "RETURN VALUES" -Upon successful completion, a -\fIstruct zip_file\fR -pointer is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -.TP 22n -[\fRZIP_ER_NOPASSWD\fR] -No password was provided. -.PP -The function -\fBzip_fopen_encrypted\fR() -may also fail and set -\fIzip_err\fR -for any of the errors specified for the routine -zip_fopen(3). -.PP -The function -\fBzip_fopen_index_encrypted\fR() -may also fail and set -\fIzip_err\fR -for any of the errors specified for the routine -zip_fopen_index(3). -.SH "SEE ALSO" -libzip(3), -zip_fclose(3), -zip_fopen(3), -zip_fread(3), -zip_get_num_entries(3), -zip_name_locate(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_fopen_encrypted.mdoc b/man/zip_fopen_encrypted.mdoc index 86fbd06..3a930c9 100644 --- a/man/zip_fopen_encrypted.mdoc +++ b/man/zip_fopen_encrypted.mdoc @@ -1,5 +1,5 @@ .\" zip_fopen_encrypted.mdoc -- open encrypted file in zip archive for reading -.\" Copyright (C) 2011-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2011-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_fread.man b/man/zip_fread.man deleted file mode 100644 index d54d084..0000000 --- a/man/zip_fread.man +++ /dev/null @@ -1,36 +0,0 @@ -.TH "ZIP_FREAD" "3" "March 10, 2009" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_fread\fR -\- read from file -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_fread\fR(\fIzip_file_t\ *file\fR, \fIvoid\ *buf\fR, \fIzip_uint64_t\ nbytes\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_fread\fR() -function reads at most -\fInbytes\fR -bytes from -\fIfile\fR -into -\fIbuf\fR. -.SH "RETURN VALUES" -If successful, the number of bytes actually read is returned. -Otherwise, \-1 is returned. -.SH "SEE ALSO" -libzip(3), -zip_fclose(3), -zip_fopen(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_fread.mdoc b/man/zip_fread.mdoc index e582ffa..f14e703 100644 --- a/man/zip_fread.mdoc +++ b/man/zip_fread.mdoc @@ -1,5 +1,5 @@ .\" zip_fread.mdoc -- read from file -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd March 10, 2009 +.Dd September 12, 2016 .Dt ZIP_FREAD 3 .Os .Sh NAME @@ -56,6 +56,7 @@ Otherwise, \-1 is returned. .Sh SEE ALSO .Xr libzip 3 , .Xr zip_fclose 3 , +.Xr zip_fseek 3 , .Xr zip_fopen 3 .Sh AUTHORS .An -nosplit diff --git a/man/zip_fseek.mdoc b/man/zip_fseek.mdoc new file mode 100644 index 0000000..7bd371e --- /dev/null +++ b/man/zip_fseek.mdoc @@ -0,0 +1,72 @@ +.\" zip_fseek.mdoc -- seek in file +.\" Copyright (C) 2016 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" 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. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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. +.\" +.Dd October 1, 2016 +.Dt ZIP_FSEEK 3 +.Os +.Sh NAME +.Nm zip_fseek +.Nd seek in file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int8_t +.Fn zip_fseek "zip_file_t *file" "zip_int64_t offset" "int whence" +.Sh DESCRIPTION +The +.Fn zip_fseek +function seeks to the specified +.Ar offset +relative to +.Ar whence , +just like +.Xr fseek 3 . +.Pp +.Nm +only works on uncompressed (stored) data. +When called on compressed data it will return an error. +.Sh RETURN VALUES +If successful, +.Nm +returns 0. +Otherwise, \-1 is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_ftell 3 +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt tk@giga.or.at diff --git a/man/zip_ftell.mdoc b/man/zip_ftell.mdoc new file mode 100644 index 0000000..6aeeabf --- /dev/null +++ b/man/zip_ftell.mdoc @@ -0,0 +1,67 @@ +.\" zip_ftell.mdoc -- tell position in file +.\" Copyright (C) 2016 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" 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. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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. +.\" +.Dd October 1, 2016 +.Dt ZIP_FTELL 3 +.Os +.Sh NAME +.Nm zip_ftell +.Nd tell position in file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_ftell "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_ftell +function reports the current offset in the file. +.Pp +.Nm +only works on uncompressed (stored) data. +When called on compressed data it will return an error. +.Sh RETURN VALUES +If successful, +.Nm +returns the current file position. +Otherwise, \-1 is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_fseek 3 +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt tk@giga.or.at diff --git a/man/zip_get_archive_comment.man b/man/zip_get_archive_comment.man deleted file mode 100644 index d2decf7..0000000 --- a/man/zip_get_archive_comment.man +++ /dev/null @@ -1,72 +0,0 @@ -.TH "ZIP_GET_ARCHIVE_COMMENT" "3" "February 20, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_get_archive_comment\fR -\- get zip archive comment -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_get_archive_comment\fR(\fIzip_t\ *archive\fR, \fIint\ *lenp\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_get_archive_comment\fR() -function returns the comment for the entire zip archive. -The name is in UTF-8 encoding unless -\fRZIP_FL_ENC_RAW\fR -was specified (see below). -This pointer should not be modified or -free(3)'d, -and becomes invalid when -\fIarchive\fR -is closed. -If -\fIlenp\fR -is not -\fRNULL\fR, -the integer to which it points will be set to the length of the -comment. -If -\fIflags\fR -is set to -\fRZIP_FL_UNCHANGED\fR, -the original unchanged comment is returned. -.PP -Additionally, the following -\fIflags\fR -are supported: -.RS 6n -.TP 21n -\fRZIP_FL_ENC_RAW\fR -Return the unmodified archive comment as it is in the ZIP archive. -.TP 21n -\fRZIP_FL_ENC_GUESS\fR -(Default.) -Guess the encoding of the archive comment in the ZIP archive and convert it -to UTF-8, if necessary. -.TP 21n -\fRZIP_FL_ENC_STRICT\fR -Follow the ZIP specification for file names and extend it to the -archive comment, thus also expecting it in CP-437 encoding. -Convert it to UTF-8. -.RE -\fINote\fR: -ASCII is a subset of both CP-437 and UTF-8. -.SH "RETURN VALUES" -Upon successful completion, a pointer to the comment is returned, -or -\fRNULL\fR -if there is no comment. -.SH "SEE ALSO" -libzip(3), -zip_get_file_comment(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_get_archive_comment.mdoc b/man/zip_get_archive_comment.mdoc index 5b0ef4d..9050fb7 100644 --- a/man/zip_get_archive_comment.mdoc +++ b/man/zip_get_archive_comment.mdoc @@ -1,5 +1,5 @@ .\" zip_get_archive_comment.mdoc -- get zip archive comment -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_get_archive_flag.man b/man/zip_get_archive_flag.man deleted file mode 100644 index 61dfaa3..0000000 --- a/man/zip_get_archive_flag.man +++ /dev/null @@ -1,50 +0,0 @@ -.TH "ZIP_GET_ARCHIVE_FLAG" "3" "April 29, 2015" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_get_archive_flag\fR -\- get status flags for zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_get_archive_flag\fR(\fIzip_t\ *archive\fR, \fIzip_flags_t\ flag\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_get_archive_flag\fR() -function returns if the flag -\fIflag\fR -is set for the archive -\fIarchive\fR. -The archive flags might have been changed with -\fBzip_set_archive_flag\fR(); -if -\fIflags\fR -is set to -\fRZIP_FL_UNCHANGED\fR, -the original unchanged flags are tested. -.PP -Supported flags are: -.TP 20n -\fRZIP_AFL_RDONLY\fR -The archive is read-only. -.SH "RETURN VALUES" -\fBzip_get_archive_flag\fR() -returns 1 if -\fIflag\fR -is set for -\fIarchive\fR, -0 if not, -and \-1 if an error occurred. -.SH "SEE ALSO" -libzip(3), -zip_set_archive_flag(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_get_error.man b/man/zip_get_error.man deleted file mode 100644 index ac315f1..0000000 --- a/man/zip_get_error.man +++ /dev/null @@ -1,29 +0,0 @@ -.TH "ZIP_GET_ERROR" "3" "October 30, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_get_error\fR -\- get zip error for archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_error_t *\fR -.PD 0 -.HP 4n -\fBzip_get_error\fR(\fIzip_t\ *archive\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_get_error\fR() -function returns the zip error for the zip archive -\fIarchive\fR. -.SH "SEE ALSO" -libzip(3), -zip_error_code_system(3), -zip_error_code_zip(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_get_file_comment.man b/man/zip_get_file_comment.man deleted file mode 100644 index 70f7a57..0000000 --- a/man/zip_get_file_comment.man +++ /dev/null @@ -1,33 +0,0 @@ -.TH "ZIP_GET_FILE_COMMENT" "3" "June 23, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_get_file_comment\fR -\- get comment for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_get_file_comment\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIint\ *lenp\fR, \fIint\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_get_file_comment\fR() -function is the obsolete version of -zip_file_get_comment(3). -The only differences are the types of the -\fIlenp\fR -and -\fIflags\fR -arguments. -.SH "SEE ALSO" -libzip(3), -zip_file_get_comment(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_get_file_comment.mdoc b/man/zip_get_file_comment.mdoc index 3e0b87e..51fef9a 100644 --- a/man/zip_get_file_comment.mdoc +++ b/man/zip_get_file_comment.mdoc @@ -1,5 +1,5 @@ .\" zip_get_file_comment.mdoc -- get comment for file in zip -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at diff --git a/man/zip_get_name.man b/man/zip_get_name.man deleted file mode 100644 index 8f9f996..0000000 --- a/man/zip_get_name.man +++ /dev/null @@ -1,92 +0,0 @@ -.TH "ZIP_GET_NAME" "3" "February 20, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_get_name\fR -\- get name of file by index -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIconst char *\fR -.PD 0 -.HP 4n -\fBzip_get_name\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_get_name\fR() -function returns the name of the file at position -\fIindex\fR -in -\fIarchive\fR. -The name is in UTF-8 encoding unless -\fRZIP_FL_ENC_RAW\fR -was specified (see below). -.PP -If -\fIflags\fR -is set to -\fRZIP_FL_UNCHANGED\fR, -the original unchanged filename is returned. -The returned string must not be modified or freed, and becomes invalid when -\fIarchive\fR -is closed. -.PP -Additionally, the following -\fIflags\fR -are supported: -.RS 6n -.TP 21n -\fRZIP_FL_ENC_RAW\fR -Return the unmodified names as it is in the ZIP archive. -.TP 21n -\fRZIP_FL_ENC_GUESS\fR -(Default.) -Guess the encoding of the name in the ZIP archive and convert it -to UTF-8, if necessary. -.TP 21n -\fRZIP_FL_ENC_STRICT\fR -Follow the ZIP specification and expect CP-437 encoded names in -the ZIP archive (except if they are explicitly marked as UTF-8). -Convert it to UTF-8. -.RE -\fINote\fR: -ASCII is a subset of both CP-437 and UTF-8. -.SH "RETURN VALUES" -Upon successful completion, a pointer to the name is returned. -Otherwise, -\fRNULL\fR -and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_get_name\fR() -fails if: -.TP 19n -[\fRZIP_ER_DELETED\fR] -\fIindex\fR -refers to a file that has been deleted -(see -zip_delete(3)). -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR, -or -\fIindex\fR -points to an added file and -\fRZIP_FL_UNCHANGED\fR -is set. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.SH "SEE ALSO" -libzip(3), -zip_name_locate(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_get_name.mdoc b/man/zip_get_name.mdoc index 8140fb0..229c4e6 100644 --- a/man/zip_get_name.mdoc +++ b/man/zip_get_name.mdoc @@ -1,5 +1,5 @@ .\" zip_get_name.mdoc -- get name of file by index -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_get_num_entries.man b/man/zip_get_num_entries.man deleted file mode 100644 index 4965e98..0000000 --- a/man/zip_get_num_entries.man +++ /dev/null @@ -1,41 +0,0 @@ -.TH "ZIP_GET_NUM_ENTRIES" "3" "August 1, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_get_num_entries\fR -\- get number of files in archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_get_num_entries\fR(\fIzip_t\ *archive\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_get_num_entries\fR() -function returns the number of files in -\fIarchive\fR. -If -\fIflags\fR -is set to -\fRZIP_FL_UNCHANGED\fR, -the original number of entries is returned. -.SH "RETURN VALUES" -\fBzip_get_num_entries\fR() -returns the number of files in the zip archive, -or \-1 if -\fIarchive\fR -is -\fRNULL\fR. -.SH "SEE ALSO" -libzip(3), -zip_fopen_index(3), -zip_stat_index(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_get_num_entries.mdoc b/man/zip_get_num_entries.mdoc index cd7b687..45ffe9e 100644 --- a/man/zip_get_num_entries.mdoc +++ b/man/zip_get_num_entries.mdoc @@ -1,5 +1,5 @@ .\" zip_get_num_entries.mdoc -- get number of files in archive -.\" Copyright (C) 2011-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2011-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_get_num_files.man b/man/zip_get_num_files.man deleted file mode 100644 index 5a688b2..0000000 --- a/man/zip_get_num_files.man +++ /dev/null @@ -1,41 +0,0 @@ -.TH "ZIP_GET_NUM_FILES" "3" "February 14, 2011" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_get_num_files\fR -\- get number of files in archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_get_num_files\fR(\fIzip_t\ *archive\fR); -.PD -.SH "DESCRIPTION" -\fIThis function is deprecated\fR. -\fIUse\fR -zip_get_num_entries(3) -\fIinstead\fR. -.PP -The -\fBzip_get_num_files\fR() -function returns the number of files in -\fIarchive\fR. -.SH "RETURN VALUES" -\fBzip_get_num_files\fR() -returns the number of files in the zip archive, -or \-1 if -\fIarchive\fR -is -\fRNULL\fR. -.SH "SEE ALSO" -libzip(3), -zip_fopen_index(3), -zip_stat_index(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_get_num_files.mdoc b/man/zip_get_num_files.mdoc index e4011bf..709e175 100644 --- a/man/zip_get_num_files.mdoc +++ b/man/zip_get_num_files.mdoc @@ -1,5 +1,5 @@ .\" zip_get_num_files.mdoc -- get number of files in archive -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_name_locate.man b/man/zip_name_locate.man deleted file mode 100644 index 5330956..0000000 --- a/man/zip_name_locate.man +++ /dev/null @@ -1,84 +0,0 @@ -.TH "ZIP_NAME_LOCATE" "3" "July 21, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_name_locate\fR -\- get index of file by name -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_name_locate\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *fname\fR, \fIzip_flags_t\ flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_name_locate\fR() -function returns the index of the file named -\fIfname\fR -in -\fIarchive\fR. -If -\fIarchive\fR -does not contain a file with that name, \-1 is returned. -The -\fIflags\fR -are specified by -\fIor\fR'ing -the following values, or 0 for none of them. -.RS 6n -.TP 15n -\fRZIP_FL_NOCASE\fR -Ignore case distinctions. -(Will only work well if the file names are ASCII.) -.TP 15n -\fRZIP_FL_NODIR\fR -Ignore directory part of file name in archive. -.TP 15n -\fRZIP_FL_ENC_RAW\fR -.br -Compare against the unmodified names as it is in the ZIP archive. -.TP 15n -\fRZIP_FL_ENC_GUESS\fR -(Default.) -Guess the encoding of the name in the ZIP archive and convert it -to UTF-8, if necessary, before comparing. -.TP 15n -\fRZIP_FL_ENC_STRICT\fR -Follow the ZIP specification and expect CP-437 encoded names in -the ZIP archive (except if they are explicitly marked as UTF-8). -Convert it to UTF-8 before comparing. -.RE -\fINote\fR: -ASCII is a subset of both CP-437 and UTF-8. -.SH "RETURN VALUES" -\fBzip_name_locate\fR() -returns the index of the file named -\fIfname\fR -or \-1, if -\fIarchive\fR -does not contain an entry of that name. -.SH "ERRORS" -\fBzip_name_locate\fR() -fails if: -.TP 19n -[\fRZIP_ER_NOENT\fR] -No entry of the name -\fIfname\fR -is found in the archive. -.TP 19n -[\fRZIP_ER_INVAL\fR] -One of the arguments is invalid. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.SH "SEE ALSO" -libzip(3), -zip_get_name(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_name_locate.mdoc b/man/zip_name_locate.mdoc index 2fe3a95..4ce79ab 100644 --- a/man/zip_name_locate.mdoc +++ b/man/zip_name_locate.mdoc @@ -1,5 +1,5 @@ .\" zip_name_locate.mdoc -- get index of file by name -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_open.man b/man/zip_open.man deleted file mode 100644 index 9027d07..0000000 --- a/man/zip_open.man +++ /dev/null @@ -1,153 +0,0 @@ -.TH "ZIP_OPEN" "3" "November 9, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_open\fR, -\fBzip_open_from_source\fR -\- open zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_t *\fR -.PD 0 -.HP 4n -\fBzip_open\fR(\fIconst\ char\ *path\fR, \fIint\ flags\fR, \fIint\ *errorp\fR); -.PD -.PP -\fIzip_t *\fR -.PD 0 -.HP 4n -\fBzip_open_from_source\fR(\fIzip_source_t\ *zs\fR, \fIint\ flags\fR, \fIzip_error_t\ *ze\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_open\fR() -function opens the zip archive specified by -\fIpath\fR -and returns a pointer to a -\fIstruct zip\fR, -used to manipulate the archive. -The -\fIflags\fR -are specified by -\fIor\fR'ing -the following values, or 0 for none of them. -.RS 6n -.TP 15n -\fRZIP_CHECKCONS\fR -Perform additional stricter consistency checks on the archive, and -error if they fail. -.TP 15n -\fRZIP_CREATE\fR -Create the archive if it does not exist. -.TP 15n -\fRZIP_EXCL\fR -Error if archive already exists. -.TP 15n -\fRZIP_TRUNCATE\fR -If archive exists, ignore its current contents. -In other words, handle it the same way as an empty archive. -.TP 15n -\fRZIP_RDONLY\fR -Open archive in read-only mode. -.RE -.PP -If an error occurs and -\fIerrorp\fR -is -non-\fRNULL\fR, -it will be set to the corresponding error code. -.PP -The -\fBzip_open_from_source\fR() -function opens a zip archive encapsulated by the zip_source -\fIzs\fR -using the provided -\fIflags\fR. -In case of error, the zip_error -\fIze\fR -is filled in. -.SH "RETURN VALUES" -Upon successful completion -\fBzip_open\fR() -and -\fBzip_open_from_source\fR() -return a -\fIstruct zip\fR -pointer. -Otherwise, -\fRNULL\fR -is returned and -\fBzip_open\fR() -sets -\fI*errorp\fR -to indicate the error, while -\fBzip_open_from\fR(\fIsource\fR) -sets -\fIze\fR -to indicate the error. -.SH "ERRORS" -The archive specified by -\fIpath\fR -is opened unless: -.TP 19n -[\fRZIP_ER_EXISTS\fR] -The file specified by -\fIpath\fR -exists and -\fRZIP_EXCL\fR -is set. -.TP 19n -[\fRZIP_ER_INCONS\fR] -Inconsistencies were found in the file specified by -\fIpath\fR. -This error is often caused by specifying -\fRZIP_CHECKCONS\fR -but can also happen without it. -.TP 19n -[\fRZIP_ER_INVAL\fR] -The -\fIpath\fR -argument is -\fRNULL\fR. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_NOENT\fR] -The file specified by -\fIpath\fR -does not exist and -\fRZIP_CREATE\fR -is not set. -.TP 19n -[\fRZIP_ER_NOZIP\fR] -The file specified by -\fIpath\fR -is not a zip archive. -.TP 19n -[\fRZIP_ER_OPEN\fR] -The file specified by -\fIpath\fR -could not be opened. -.TP 19n -[\fRZIP_ER_READ\fR] -A read error occurred; see -\fIerrno\fR -for details. -.TP 19n -[\fRZIP_ER_SEEK\fR] -The file specified by -\fIpath\fR -does not allow seeks. -.SH "SEE ALSO" -libzip(3), -zip_close(3), -zip_error_to_str(3), -zip_fdopen(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_register_progress_callback.mdoc b/man/zip_register_progress_callback.mdoc new file mode 100644 index 0000000..25da988 --- /dev/null +++ b/man/zip_register_progress_callback.mdoc @@ -0,0 +1,66 @@ +.\" zip_register_progress_callback.mdoc -- provide updates during zip_close +.\" Copyright (C) 2016 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" 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. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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. +.\" +.Dd December 18, 2016 +.Dt ZIP_REGISTER_PROGRESS_CALLBACK 3 +.Os +.Sh NAME +.Nm zip_register_progress_callback +.Nd provide updates during zip_close +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt typedef void (*zip_progress_callback_t)(double); +.Ft void +.Fn zip_register_progress_callback "zip_t *archive" "zip_progress_callback_t progress_callback" +.Sh DESCRIPTION +The +.Fn zip_register_progress_callback +function registers a callback function +.Ar progress_callback +for the zip archive +.Ar archive . +This function is called during +.Xr zip_close 3 +after every zip archive entry that's completely written to disk. +The value is a +.Vt double +in the range from 0.0 to 1.0. +This can be used to provide progress indicators for user interfaces. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt tk@giga.or.at diff --git a/man/zip_rename.man b/man/zip_rename.man deleted file mode 100644 index 43b0bd5..0000000 --- a/man/zip_rename.man +++ /dev/null @@ -1,30 +0,0 @@ -.TH "ZIP_RENAME" "3" "June 23, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_rename\fR -\- rename file in zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_rename\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIconst\ char\ *name\fR); -.PD -.SH "DESCRIPTION" -\fBzip_rename\fR() -is the obsolete version of -zip_file_rename(3). -It is the same as calling -zip_file_rename(3) -with an empty flags argument. -.SH "SEE ALSO" -libzip(3), -zip_file_rename(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_rename.mdoc b/man/zip_rename.mdoc index 7f22608..d50cc70 100644 --- a/man/zip_rename.mdoc +++ b/man/zip_rename.mdoc @@ -1,5 +1,5 @@ .\" zip_rename.mdoc -- rename file in zip archive -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_set_archive_comment.man b/man/zip_set_archive_comment.man deleted file mode 100644 index a0998bd..0000000 --- a/man/zip_set_archive_comment.man +++ /dev/null @@ -1,56 +0,0 @@ -.TH "ZIP_SET_ARCHIVE_COMMENT" "3" "July 22, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_set_archive_comment\fR -\- set zip archive comment -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_set_archive_comment\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *comment\fR, \fIzip_uint16_t\ len\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_set_archive_comment\fR() -function sets the comment for the entire zip archive. -If -\fIcomment\fR -is -\fRNULL\fR -and -\fIlen\fR -is 0, the archive comment will be removed. -\fIcomment\fR -must be encoded in ASCII or UTF-8. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_set_archive_comment\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIlen\fR -is less than 0 or longer than the maximum comment length in a zip file -(65535), or -\fIcomment\fR -is not a valid UTF-8 encoded string. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.SH "SEE ALSO" -libzip(3), -zip_get_archive_comment(3), -zip_get_file_comment(3), -zip_set_file_comment(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_set_archive_comment.mdoc b/man/zip_set_archive_comment.mdoc index 8c883a8..fc4f6da 100644 --- a/man/zip_set_archive_comment.mdoc +++ b/man/zip_set_archive_comment.mdoc @@ -1,5 +1,5 @@ .\" zip_set_archive_comment.mdoc -- set zip archive comment -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_set_archive_comment "zip_t *archive" \ -"const char *comment" "zip_uint16_t len" +.Fn zip_set_archive_comment "zip_t *archive" "const char *comment" "zip_uint16_t len" .Sh DESCRIPTION The .Fn zip_set_archive_comment diff --git a/man/zip_set_archive_flag.man b/man/zip_set_archive_flag.man deleted file mode 100644 index adfb95b..0000000 --- a/man/zip_set_archive_flag.man +++ /dev/null @@ -1,37 +0,0 @@ -.TH "ZIP_SET_ARCHIVE_FLAG" "3" "April 29, 2015" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_set_archive_flag\fR -\- set zip archive flag -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_set_archive_flag\fR(\fIzip_t\ *archive\fR, \fIzip_flags_t\ flag\fR, \fIint\ value\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_set_archive_flag\fR() -function sets the flag -\fIflag\fR -for the archive -\fIarchive\fR -to the value -\fIvalue\fR. -.PP -Currently there are no supported flags. -.SH "RETURN VALUES" -Upon successful completion 0 is returned, and \-1 if an error -occurred. -.SH "SEE ALSO" -libzip(3), -zip_get_archive_flag(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_set_default_password.man b/man/zip_set_default_password.man deleted file mode 100644 index 2219e71..0000000 --- a/man/zip_set_default_password.man +++ /dev/null @@ -1,51 +0,0 @@ -.TH "ZIP_SET_DEFAULT_PASSWORD" "3" "January 3, 2011" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_set_default_password\fR -\- set default password for encrypted files in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_set_default_password\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *password\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_set_default_password\fR() -function sets the default password used when accessing encrypted files. -If -\fIpassword\fR -is -\fRNULL\fR, -the default password is unset. -.PP -If you prefer a different password for single files, use -zip_fopen_encrypted(3) -instead of -zip_fopen(3). -Usually, however, the same password is used for every file in an -zip archive. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_set_default_password\fR() -fails if: -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.SH "SEE ALSO" -libzip(3), -zip_fopen(3), -zip_fopen_encrypted(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_set_default_password.mdoc b/man/zip_set_default_password.mdoc index 1115ca3..c6c6b67 100644 --- a/man/zip_set_default_password.mdoc +++ b/man/zip_set_default_password.mdoc @@ -1,5 +1,5 @@ .\" zip_set_default_password.mdoc -- set default password for zip -.\" Copyright (C) 2011-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2011-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at diff --git a/man/zip_set_file_comment.man b/man/zip_set_file_comment.man deleted file mode 100644 index 5a22dc4..0000000 --- a/man/zip_set_file_comment.man +++ /dev/null @@ -1,39 +0,0 @@ -.TH "ZIP_SET_FILE_COMMENT" "3" "June 23, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_set_file_comment\fR -\- set comment for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_set_file_comment\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIconst\ char\ *comment\fR, \fIint\ len\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_set_file_comment\fR() -function is the obsolete version of -zip_file_set_comment(3). -The only differences are the type of the -\fIlen\fR -argument and the additional -\fIflags\fR -argument. -\fBzip_set_file_comment\fR() -is the same as calling -zip_file_set_comment(3) -with an empty -\fIflags\fR -argument. -.SH "SEE ALSO" -libzip(3), -zip_file_set_comment(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_set_file_comment.mdoc b/man/zip_set_file_comment.mdoc index a6dd088..d8c83c3 100644 --- a/man/zip_set_file_comment.mdoc +++ b/man/zip_set_file_comment.mdoc @@ -1,5 +1,5 @@ .\" zip_set_file_comment.mdoc -- set comment for file in zip -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_set_file_comment "zip_t *archive" "zip_uint64_t index" \ -"const char *comment" "int len" +.Fn zip_set_file_comment "zip_t *archive" "zip_uint64_t index" "const char *comment" "int len" .Sh DESCRIPTION The .Fn zip_set_file_comment diff --git a/man/zip_set_file_compression.man b/man/zip_set_file_compression.man deleted file mode 100644 index fd870f3..0000000 --- a/man/zip_set_file_compression.man +++ /dev/null @@ -1,79 +0,0 @@ -.TH "ZIP_SET_FILE_COMPRESSION" "3" "May 1, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_set_file_compression\fR -\- set compression method for file in zip -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_set_file_compression\fR(\fIzip_t\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIzip_int32_t\ comp\fR, \fIzip_uint32_t\ comp_flags\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_set_file_compression\fR() -function sets the compression method for the file at position -\fIindex\fR -in the zip archive to -\fIcomp\fR -with the compression method specific -\fIcomp_flags\fR. -The -\fIcomp\fR -is the same as returned by -zip_stat(3). -For the -\fIcomp\fR -argument, currently only the following values are supported: -.TP 19n -\fRZIP_CM_DEFAULT\fR -default compression; currently the same as -\fRZIP_CM_DEFLATE\fR. -.TP 19n -\fRZIP_CM_STORE\fR -Store the file uncompressed. -.TP 19n -\fRZIP_CM_DEFLATE\fR -Deflate the file with the -zlib(3) -algorithm and default options -.PP -The -\fIcomp_flags\fR -argument is currently ignored. -.PP -The current compression method for a file in a zip archive can be -determined using -zip_stat(3). -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_set_file_compression\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIarchive\fR, -or the argument combination is invalid. -.TP 19n -[\fRZIP_ER_COMPNOTSUPP\fR] -Unsupported compression method requested. -.TP 19n -[\fRZIP_ER_RDONLY\fR] -Read-only zip file, no changes allowed. -.SH "SEE ALSO" -libzip(3), -zip_stat(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_set_file_compression.mdoc b/man/zip_set_file_compression.mdoc index c062622..7924aeb 100644 --- a/man/zip_set_file_compression.mdoc +++ b/man/zip_set_file_compression.mdoc @@ -1,5 +1,5 @@ .\" zip_set_file_compression.mdoc -- set compression method and its flags -.\" Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2012-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP files. .\" The authors can be contacted at @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_set_file_compression "zip_t *archive" "zip_uint64_t index" \ -"zip_int32_t comp" "zip_uint32_t comp_flags" +.Fn zip_set_file_compression "zip_t *archive" "zip_uint64_t index" "zip_int32_t comp" "zip_uint32_t comp_flags" .Sh DESCRIPTION The .Fn zip_set_file_compression diff --git a/man/zip_source.man b/man/zip_source.man deleted file mode 100644 index c3e0406..0000000 --- a/man/zip_source.man +++ /dev/null @@ -1,57 +0,0 @@ -.TH "ZIP_SOURCE" "3" "October 24, 2015" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source\fR -\- zip data source structure -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_source_t *zs\fR; -.SH "DESCRIPTION" -A -\fIstruct zip_source\fR -is a data source used by -libzip(3) -for adding or replacing file contents for a file in a zip archive. -If the source supports seeking, it can also be used to open zip archives from. -It is created by calling one of -zip_source_buffer(3), -zip_source_buffer_create(3), -zip_source_file(3), -zip_source_file_create(3), -zip_source_filep(3), -zip_source_filep_create(3), -zip_source_function(3), -zip_source_function_create(3), -or -zip_source_zip(3). -\fIzip_source_t\fR -is reference counted, and created with a reference count of 1. -zip_open_from_source(3), -zip_file_add(3), -and -zip_file_replace(3) -will decrement the reference count of the -\fIzip_source_t\fR -when they are done using it, so -zip_source_free(3) -only needs to be called when these functions return an error. -Use -zip_source_keep(3) -to increase the reference count, for example if you need the source after -zip_close(3). -.SH "SEE ALSO" -libzip(3), -zip_source_buffer(3), -zip_source_file(3), -zip_source_filep(3), -zip_source_free(3), -zip_source_function(3), -zip_source_zip(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source.mdoc b/man/zip_source.mdoc index 28cbd73..6b3a34d 100644 --- a/man/zip_source.mdoc +++ b/man/zip_source.mdoc @@ -1,5 +1,5 @@ .\" zip_source.mdoc -- description of zip data source -.\" Copyright (C) 2014-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_source_begin_write.man b/man/zip_source_begin_write.man deleted file mode 100644 index 5ba499c..0000000 --- a/man/zip_source_begin_write.man +++ /dev/null @@ -1,40 +0,0 @@ -.TH "ZIP_SOURCE_BEGIN_WRITE" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_begin_write\fR -\- prepare zip source for writing -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_begin_write\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_begin_write\fR() -prepares -\fIsource\fR -for writing. -Usually this involves creating temporary files or allocating buffers. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_commit_write(3), -zip_source_rollback_write(3), -zip_source_seek_write(3), -zip_source_tell_write(3), -zip_source_write(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_buffer.man b/man/zip_source_buffer.man deleted file mode 100644 index 7e26c44..0000000 --- a/man/zip_source_buffer.man +++ /dev/null @@ -1,72 +0,0 @@ -.TH "ZIP_SOURCE_BUFFER" "3" "October 17, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_buffer\fR -\- create zip data source from buffer -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_buffer\fR(\fIzip_t\ *archive\fR, \fIconst\ void\ *data\fR, \fIzip_uint64_t\ len\fR, \fIint\ freep\fR); -.PD -.PP -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_buffer_create\fR(\fIconst\ void\ *data\fR, \fIzip_uint64_t\ len\fR, \fIint\ freep\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -The functions -\fBzip_source_buffer\fR() -and -\fBzip_source_buffer_create\fR() -create a zip source from the buffer -\fIdata\fR -of size -\fIlen\fR. -If -\fIfreep\fR -is non-zero, the buffer will be freed when it is no longer needed. -\fIdata\fR -must remain valid for the lifetime of the created source. -.PP -The source can be used to open a zip archive from. -.SH "RETURN VALUES" -Upon successful completion, the created source is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -or -\fIerror\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_source_buffer\fR() -and -\fBzip_source_buffer_create\fR() -fail if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIlen\fR -is greater than zero and -\fIdata\fR -is -\fRNULL\fR. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.SH "SEE ALSO" -libzip(3), -zip_add(3), -zip_open_from_source(3), -zip_replace(3), -zip_source(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_buffer.mdoc b/man/zip_source_buffer.mdoc index db865d7..cbda0ad 100644 --- a/man/zip_source_buffer.mdoc +++ b/man/zip_source_buffer.mdoc @@ -1,5 +1,5 @@ .\" zip_source_buffer.mdoc -- create zip data source from buffer -.\" Copyright (C) 2004-2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2004-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -40,11 +40,9 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft zip_source_t * -.Fn zip_source_buffer "zip_t *archive" "const void *data" \ -"zip_uint64_t len" "int freep" +.Fn zip_source_buffer "zip_t *archive" "const void *data" "zip_uint64_t len" "int freep" .Ft zip_source_t * -.Fn zip_source_buffer_create "const void *data" \ -"zip_uint64_t len" "int freep" "zip_error_t *error" +.Fn zip_source_buffer_create "const void *data" "zip_uint64_t len" "int freep" "zip_error_t *error" .Sh DESCRIPTION The functions .Fn zip_source_buffer diff --git a/man/zip_source_close.man b/man/zip_source_close.man deleted file mode 100644 index 8c0a873..0000000 --- a/man/zip_source_close.man +++ /dev/null @@ -1,36 +0,0 @@ -.TH "ZIP_SOURCE_CLOSE" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_close\fR -\- open zip_source (which was open for reading) -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_close\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_close\fR() -closes -\fIsource\fR, -indicating that no more data will be read. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_free(3), -zip_source_open(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_commit_write.man b/man/zip_source_commit_write.man deleted file mode 100644 index 6bd026a..0000000 --- a/man/zip_source_commit_write.man +++ /dev/null @@ -1,39 +0,0 @@ -.TH "ZIP_SOURCE_COMMIT_WRITE" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_commit_write\fR -\- finalize changes to zip source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_commit_write\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_commit_write\fR() -finishes writing data to -\fIsource\fR -and replaces the original with the newly written data. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_begin_write(3), -zip_source_rollback_write(3), -zip_source_seek_write(3), -zip_source_tell_write(3), -zip_source_write(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_error.man b/man/zip_source_error.man deleted file mode 100644 index 16a57d9..0000000 --- a/man/zip_source_error.man +++ /dev/null @@ -1,29 +0,0 @@ -.TH "ZIP_SOURCE_ERROR" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_error\fR -\- get zip error for data source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_error_t *\fR -.PD 0 -.HP 4n -\fBzip_source_error\fR(\fIzip_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_source_error\fR() -function returns the zip error for the data source -\fIsource\fR. -.SH "SEE ALSO" -libzip(3), -zip_error_code_system(3), -zip_error_code_zip(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_error.mdoc b/man/zip_source_error.mdoc index 54bf75b..ffea10b 100644 --- a/man/zip_source_error.mdoc +++ b/man/zip_source_error.mdoc @@ -1,5 +1,5 @@ .\" zip_source_error.mdoc -- get zip_error for data source -.\" Copyright (C) 2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd November 18, 2014 +.Dd December 298, 2016 .Dt ZIP_SOURCE_ERROR 3 .Os .Sh NAME @@ -40,7 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft zip_error_t * -.Fn zip_source_error "zip_t *source" +.Fn zip_source_error "zip_source_t *source" .Sh DESCRIPTION The .Fn zip_source_error diff --git a/man/zip_source_file.man b/man/zip_source_file.man deleted file mode 100644 index 98207b6..0000000 --- a/man/zip_source_file.man +++ /dev/null @@ -1,83 +0,0 @@ -.TH "ZIP_SOURCE_FILE" "3" "March 11, 2015" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_file\fR -\- create data source from a file -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_file\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *fname\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR); -.PD -.PP -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_file_create\fR(\fIconst\ char\ *fname\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -The functions -\fBzip_source_file\fR() -and -\fBzip_source_file_create\fR() -create a zip source from a file. -They open -\fIfname\fR -and read -\fIlen\fR -bytes from offset -\fIstart\fR -from it. -If -\fIlen\fR -is 0 or \-1, the whole file (starting from -\fIstart\fR) -is used. -.PP -If the file supports seek, the source can be used to open a zip archive from. -.PP -The file is opened and read when the data from the source is used, usually by -\fBzip_close\fR() -or -\fBzip_open_from_source\fR(). -.SH "RETURN VALUES" -Upon successful completion, the created source is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -or -\fIerror\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_source_file\fR() -and -\fBzip_source_file_create\fR() -fail if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIfname\fR, -\fIstart\fR, -or -\fIlen\fR -are invalid. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_OPEN\fR] -Opening -\fIfname\fR -failed. -.SH "SEE ALSO" -libzip(3), -zip_add(3), -zip_replace(3), -zip_source(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_file.mdoc b/man/zip_source_file.mdoc index 363e1ee..11da5d1 100644 --- a/man/zip_source_file.mdoc +++ b/man/zip_source_file.mdoc @@ -1,5 +1,5 @@ .\" zip_source_file.mdoc -- create data source from a file -.\" Copyright (C) 2004-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2004-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd March 11, 2015 +.Dd December 29, 2016 .Dt ZIP_SOURCE_FILE 3 .Os .Sh NAME @@ -38,12 +38,11 @@ .Sh LIBRARY libzip (-lzip) .Sh SYNOPSIS +.In zip.h .Ft zip_source_t * -.Fn zip_source_file "zip_t *archive" "const char *fname" \ -"zip_uint64_t start" "zip_int64_t len" +.Fn zip_source_file "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" .Ft zip_source_t * -.Fn zip_source_file_create "const char *fname" \ -"zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Fn zip_source_file_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" .Sh DESCRIPTION The functions .Fn zip_source_file diff --git a/man/zip_source_filep.man b/man/zip_source_filep.man deleted file mode 100644 index e4b2cf6..0000000 --- a/man/zip_source_filep.man +++ /dev/null @@ -1,75 +0,0 @@ -.TH "ZIP_SOURCE_FILEP" "3" "November 10, 2015" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_filep\fR -\- create data source from FILE * -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_filep\fR(\fIzip_t\ *archive\fR, \fIFILE\ *file\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR); -.PD -.PP -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_filep\fR(\fIFILE\ *file\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -The functions -\fBzip_source_filep\fR() -and -\fBzip_source_filep_create\fR() -create a zip source from a file stream. -They read -\fIlen\fR -bytes from offset -\fIstart\fR -from the open file stream -\fIfile\fR. -If -\fIlen\fR -is 0 or \-1, the whole file (starting from -\fIstart\fR) -is used. -.PP -If the file stream supports seeking, the source can be used to open -a read-only zip archive from. -.PP -The file stream is closed when the source is being freed, usually -by -zip_close(3). -.SH "RETURN VALUES" -Upon successful completion, the created source is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -or -\fIerror\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_source_filep\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIfile\fR, -\fIstart\fR, -or -\fIlen\fR -are invalid. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.SH "SEE ALSO" -libzip(3), -zip_add(3), -zip_replace(3), -zip_source(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_filep.mdoc b/man/zip_source_filep.mdoc index 8e350e1..6e4e4fb 100644 --- a/man/zip_source_filep.mdoc +++ b/man/zip_source_filep.mdoc @@ -1,5 +1,5 @@ .\" zip_source_filep.mdoc -- create data source from a file stream -.\" Copyright (C) 2004-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2004-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd November 10, 2015 +.Dd December 29, 2016 .Dt ZIP_SOURCE_FILEP 3 .Os .Sh NAME @@ -38,12 +38,11 @@ .Sh LIBRARY libzip (-lzip) .Sh SYNOPSIS +.In zip.h .Ft zip_source_t * -.Fn zip_source_filep "zip_t *archive" "FILE *file" \ -"zip_uint64_t start" "zip_int64_t len" +.Fn zip_source_filep "zip_t *archive" "FILE *file" "zip_uint64_t start" "zip_int64_t len" .Ft zip_source_t * -.Fn zip_source_filep "FILE *file" \ -"zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Fn zip_source_filep_create "FILE *file" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" .Sh DESCRIPTION The functions .Fn zip_source_filep diff --git a/man/zip_source_free.man b/man/zip_source_free.man deleted file mode 100644 index 13541ae..0000000 --- a/man/zip_source_free.man +++ /dev/null @@ -1,45 +0,0 @@ -.TH "ZIP_SOURCE_FREE" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_free\fR -\- free zip data source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_source_free\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_free\fR() -decrements the reference count of -\fIsource\fR -and frees it if the reference count drops to 0. -If -\fIsource\fR -is -\fRNULL\fR, -it does nothing. -.PP -\fINOTE\fR: -This function should not be called on a -\fIsource\fR -after it was used successfully in a -zip_open_from_source(3), -zip_add(3), -or -zip_replace(3) -call. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_keep(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_function.man b/man/zip_source_function.man deleted file mode 100644 index 6c9f1c2..0000000 --- a/man/zip_source_function.man +++ /dev/null @@ -1,271 +0,0 @@ -.TH "ZIP_SOURCE_FUNCTION" "3" "November 13, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_function\fR -\- create data source from function -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_function\fR(\fIzip_t\ *archive\fR, \fIzip_source_callback\ fn\fR, \fIvoid\ *userdata\fR); -.PD -.PP -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_function_create\fR(\fIzip_source_callback\ fn\fR, \fIvoid\ *userdata\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -The functions -\fBzip_source_function\fR() -and -\fBzip_source_function_create\fR() -creates a zip source from the user-provided function -\fIfn\fR, -which must be of the following type: -.PP -\fItypedef zip_int64_t\fR -\fB\fR(*\fPzip_source_callback\fR)\fP\fR(\fIvoid\ *userdata\fR, \fIvoid\ *data\fR, \fIzip_uint64_t\ len\fR, \fIzip_source_cmd_t\ cmd\fR) -.PP -\fIarchive\fR -or -\fIerror\fR -are used for reporting errors and can be -\fRNULL\fR. -.PP -When called by the library, the first argument is the -\fIuserdata\fR -argument supplied to the function. -The next two arguments are a buffer -\fIdata\fR -of size -\fIlen\fR -when data is passed in or expected to be returned, or else -\fRNULL\fR -and 0. -The last argument, -\fIcmd\fR, -specifies which action the function should perform. -.PP -Depending on the uses, there are three useful sets of commands to be supported by a -\fBzip_source_callback\fR(): -.TP 24n -read source -Providing streamed data (for file data added to archives). -Must support -\fRZIP_SOURCE_OPEN\fR, -\fRZIP_SOURCE_READ\fR, -\fRZIP_SOURCE_CLOSE\fR, -\fRZIP_SOURCE_STAT\fR, -and -\fRZIP_SOURCE_ERROR\fR. -.TP 24n -seekable read source -Same as previous, but from a source allowing reading from arbitrary -offsets (also for read-only zip archive). -Must additionally support -\fRZIP_SOURCE_SEEK\fR, -\fRZIP_SOURCE_TELL\fR, -and -\fRZIP_SOURCE_SUPPORTS\fR. -.TP 24n -read/write source -Same as previous, but additionally allowing writing (also for writable -zip archives). -Must additionally support -\fRZIP_SOURCE_BEGIN_WRITE\fR, -\fRZIP_SOURCE_COMMIT_WRITE\fR, -\fRZIP_SOURCE_ROLLBACK_WRITE\fR, -\fRZIP_SOURCE_SEEK_WRITE\fR, -\fRZIP_SOURCE_TELL_WRITE\fR, -and -\fRZIP_SOURCE_REMOVE\fR. -.SS "\fRZIP_SOURCE_BEGIN_WRITE\fR" -Prepare the source for writing. -Use this to create any temporary file(s). -.SS "\fRZIP_SOURCE_CLOSE\fR" -Reading is done. -.SS "\fRZIP_SOURCE_COMMIT_WRITE\fR" -Finish writing to the source. -Replace the original data with the newly written data. -Clean up temporary files or internal buffers. -Subsequently opening and reading from the source should return the -newly written data. -.SS "\fRZIP_SOURCE_ERROR\fR" -Get error information. -\fIdata\fR -points to an array of two ints, which should be filled with the libzip -error code and the corresponding system error code for the error that -occurred. -See -zip_errors(3) -for details on the error codes. -If the source stores error information in a zip_error_t, use -zip_error_to_data(3) -and return its return value. -Otherwise, return 2 * sizeof(int). -.SS "\fRZIP_SOURCE_FREE\fR" -Clean up and free all resources, including -\fIstate\fR. -The callback function will not be called again. -.SS "\fRZIP_SOURCE_OPEN\fR" -Prepare for reading. -.SS "\fRZIP_SOURCE_READ\fR" -Read data into the buffer -\fIdata\fR -of size -\fIlen\fR. -Return the number of bytes placed into -\fIdata\fR -on success. -.SS "\fRZIP_SOURCE_REMOVE\fR" -Remove the underlying file. -This is called if a zip archive is empty when closed. -.SS "\fRZIP_SOURCE_ROLLBACK_WRITE\fR" -Abort writing to the source. -Discard written data. -Clean up temporary files or internal buffers. -Subsequently opening and reading from the source should return the -original data. -.SS "\fRZIP_SOURCE_SEEK\fR" -Specify position to read next byte from, like -fseek(3). -Use -ZIP_SOURCE_GET_ARGS(3) -to decode the arguments into the following struct: -.nf -.sp -.RS 0n -struct zip_source_args_seek { - zip_int64_t offset; - int whence; -}; -.RE -.fi -.PP -If the size of the source's data is known, use -zip_source_seek_compute_offset(3) -to validate the arguments and compute the new offset. -.SS "\fRZIP_SOURCE_SEEK_WRITE\fR" -Specify position to write next byte to, like -fseek(3). -See -\fRZIP_SOURCE_SEEK\fR -for details. -.SS "\fRZIP_SOURCE_STAT\fR" -Get meta information for the input data. -\fIdata\fR -points to an allocated -\fIstruct zip_stat\fR, -which should be initialized using -zip_stat_init(3) -and then filled in. -Information only available after the source has been read (e.g. size) -can be omitted in an earlier call. -Return sizeof(struct zip_stat) on success. -\fINOTE\fR: -\fBzip_source_function\fR() -may be called with this argument even after being called with -\fRZIP_SOURCE_CLOSE\fR. -.SS "\fRZIP_SOURCE_SUPPORTS\fR" -Return bitmap specifying which commands are supported. -Use -zip_source_make_command_bitmap(3). -If this command is not implemented, the source is assumed to be a -read source without seek support. -.SS "\fRZIP_SOURCE_TELL\fR" -Return the current read offset in the source, like -ftell(3). -.SS "\fRZIP_SOURCE_TELL_WRITE\fR" -Return the current write offset in the source, like -ftell(3). -.SS "\fRZIP_SOURCE_WRITE\fR" -Write data to the source. -Return number of bytes written. -.SS "Return Values" -Commands should return \-1 on error. -\fRZIP_SOURCE_ERROR\fR -will be called to retrieve the error code. -On success, commands return 0, unless specified otherwise in the -description above. -.SS "Calling Conventions" -The library will always issue -\fRZIP_SOURCE_OPEN\fR -before issuing -\fRZIP_SOURCE_READ\fR, -\fRZIP_SOURCE_SEEK\fR, -or -\fRZIP_SOURCE_TELL\fR. -When it no longer wishes to read from this source, it will issue -\fRZIP_SOURCE_CLOSE\fR. -If the library wishes to read the data again, it will issue -\fRZIP_SOURCE_OPEN\fR -a second time. -If the function is unable to provide the data again, it should -return \-1. -.PP -\fRZIP_SOURCE_BEGIN_WRITE\fR -will be called before -\fRZIP_SOURCE_WRITE\fR, -\fRZIP_SOURCE_SEEK_WRITE\fR, -or -\fRZIP_SOURCE_TELL_WRITE\fR. -When writing is complete, either -\fRZIP_SOURCE_COMMIT_WRITE\fR -or -\fRZIP_SOURCE_ROLLBACK_WRITE\fR -will be called. -.PP -\fRZIP_SOURCE_STAT\fR -can be issued at any time. -.PP -\fRZIP_SOURCE_ERROR\fR -will only be issued in response to the function -returning \-1. -.PP -\fRZIP_SOURCE_FREE\fR -will be the last command issued; -if -\fRZIP_SOURCE_OPEN\fR -was called and succeeded, -\fRZIP_SOURCE_CLOSE\fR -will be called before -\fRZIP_SOURCE_FREE\fR, -and similarly for -\fRZIP_SOURCE_BEGIN_WRITE\fR -and -\fRZIP_SOURCE_COMMIT_WRITE\fR -or -\fRZIP_SOURCE_ROLLBACK_WRITE\fR. -.SH "RETURN VALUES" -Upon successful completion, the created source is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -or -\fIerror\fR -is set to indicate the error (unless -it is -\fRNULL\fR). -.SH "ERRORS" -\fBzip_source_function\fR() -fails if: -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.SH "SEE ALSO" -libzip(3), -zip_add(3), -zip_replace(3), -zip_source(3), -zip_stat_init(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_function.mdoc b/man/zip_source_function.mdoc index ae8b865..4cdfd44 100644 --- a/man/zip_source_function.mdoc +++ b/man/zip_source_function.mdoc @@ -1,5 +1,5 @@ .\" zip_source_function.mdoc -- create data source from function -.\" Copyright (C) 2004-2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2004-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd November 13, 2014 +.Dd December 16, 2016 .Dt ZIP_SOURCE_FUNCTION 3 .Os .Sh NAME @@ -146,7 +146,7 @@ of size .Ar len . Return the number of bytes placed into .Ar data -on success. +on success, and zero for end-of-file. .Ss Dv ZIP_SOURCE_REMOVE Remove the underlying file. This is called if a zip archive is empty when closed. diff --git a/man/zip_source_is_deleted.man b/man/zip_source_is_deleted.man deleted file mode 100644 index 6313d81..0000000 --- a/man/zip_source_is_deleted.man +++ /dev/null @@ -1,31 +0,0 @@ -.TH "ZIP_SOURCE_IS_DELETED" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_is_deleted\fR -\- check if zip_source is deleted -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_is_deleted\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_is_deleted\fR() -returns whether the zip_source was deleted. -This can for example happen when all entries are removed from a zip archive. -.SH "RETURN VALUES" -\fBzip_source_is_deleted\fR() -returns 1 if the zip_source is deleted and 0 otherwise. -.SH "SEE ALSO" -libzip(3), -zip_source(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_keep.man b/man/zip_source_keep.man deleted file mode 100644 index b952cfe..0000000 --- a/man/zip_source_keep.man +++ /dev/null @@ -1,29 +0,0 @@ -.TH "ZIP_SOURCE_KEEP" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_keep\fR -\- increment reference count of zip data source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_source_keep\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_keep\fR() -increments the reference count of -\fIsource\fR. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_free(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_make_command_bitmap.man b/man/zip_source_make_command_bitmap.man deleted file mode 100644 index a90ffd3..0000000 --- a/man/zip_source_make_command_bitmap.man +++ /dev/null @@ -1,31 +0,0 @@ -.TH "ZIP_SOURCE_MAKE_COMMAND_BITMAP" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_make_command_bitmap\fR -\- create bitmap of supported source operations -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_source_make_command_bitmap\fR(\fIzip_source_cmd_t\ command\fR, \fI...\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_source_make_command_bitmap\fR() -function returns a bitmap of source commands suitable as return value -for -\fRZIP_SOURCE_SUPPORTS\fR. -It includes all the commands from the argument list, which must be -terminated by \-1. -.SH "SEE ALSO" -libzip(3), -zip_source_function(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_open.man b/man/zip_source_open.man deleted file mode 100644 index b42761b..0000000 --- a/man/zip_source_open.man +++ /dev/null @@ -1,39 +0,0 @@ -.TH "ZIP_SOURCE_OPEN" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_open\fR -\- open zip_source for reading -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_open\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_open\fR() -opens -\fIsource\fR -for reading. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_begin_write(3), -zip_source_close(3), -zip_source_read(3), -zip_source_seek(3), -zip_source_tell(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_read.man b/man/zip_source_read.man deleted file mode 100644 index 5a06ca5..0000000 --- a/man/zip_source_read.man +++ /dev/null @@ -1,46 +0,0 @@ -.TH "ZIP_SOURCE_READ" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_read\fR -\- read data from zip source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_source_read\fR(\fIzip_source_t\ *source\fR, \fIvoid\ *data\fR, \fIzip_uint64_t\ len\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_read\fR() -reads up to -\fIlen\fR -bytes of data from -\fIsource\fR -at the current read offset into the buffer -\fIdata\fR. -.PP -The zip source -\fIsource\fR -has to be opened for reading by calling -zip_source_open(3) -first. -.SH "RETURN VALUES" -Upon successful completion the number of bytes read is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_seek(3), -zip_source_tell(3), -zip_source_write(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_read.mdoc b/man/zip_source_read.mdoc index c9a29b9..7fb5d96 100644 --- a/man/zip_source_read.mdoc +++ b/man/zip_source_read.mdoc @@ -1,5 +1,5 @@ .\" zip_source_read.mdoc -- read data from zip source -.\" Copyright (C) 2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd November 18, 2014 +.Dd December 16, 2016 .Dt ZIP_SOURCE_READ 3 .Os .Sh NAME @@ -58,6 +58,7 @@ has to be opened for reading by calling first. .Sh RETURN VALUES Upon successful completion the number of bytes read is returned. +Upon reading end-of-file, zero is returned. Otherwise, \-1 is returned and the error information in .Ar source is set to indicate the error. diff --git a/man/zip_source_rollback_write.man b/man/zip_source_rollback_write.man deleted file mode 100644 index 7e9bb4e..0000000 --- a/man/zip_source_rollback_write.man +++ /dev/null @@ -1,42 +0,0 @@ -.TH "ZIP_SOURCE_ROLLBACK_WRITE" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_rollback_write\fR -\- undo changes to zip source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_rollback_write\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_rollback_write\fR() -reverts changes written to -\fIsource\fR, -restoring the data before -zip_source_begin_write(3) -was called. -Usually this removes temporary files or frees buffers. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_begin_write(3), -zip_source_commit_write(3), -zip_source_seek_write(3), -zip_source_tell_write(3), -zip_source_write(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_rollback_write.mdoc b/man/zip_source_rollback_write.mdoc index 3533261..e313cdf 100644 --- a/man/zip_source_rollback_write.mdoc +++ b/man/zip_source_rollback_write.mdoc @@ -1,5 +1,5 @@ .\" zip_source_rollback_write.mdoc -- undo changes to zip source -.\" Copyright (C) 2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd November 18, 2014 +.Dd December 29, 2016 .Dt ZIP_SOURCE_ROLLBACK_WRITE 3 .Os .Sh NAME @@ -39,7 +39,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h -.Ft int +.Ft void .Fn zip_source_rollback_write "zip_source_t *source" .Sh DESCRIPTION The function diff --git a/man/zip_source_seek.man b/man/zip_source_seek.man deleted file mode 100644 index 1224021..0000000 --- a/man/zip_source_seek.man +++ /dev/null @@ -1,53 +0,0 @@ -.TH "ZIP_SOURCE_SEEK" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_seek\fR -\- set read offset in zip source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_seek\fR(\fIzip_source_t\ *source\fR, \fIzip_int64_t\ offset\fR, \fIint\ whence\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_seek\fR() -sets the current read offset for -\fIsource\fR. -Just like in -fseek(3), -depending on the -\fIwhence\fR -argument, the -\fIoffset\fR -is counted relative from: -.RS 6n -.TP 12n -\fRSEEK_SET\fR -start of file -.TP 12n -\fRSEEK_CUR\fR -current read offset in file -.TP 12n -\fRSEEK_END\fR -end of file -.RE -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_read(3), -zip_source_tell(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_seek_compute_offset.man b/man/zip_source_seek_compute_offset.man deleted file mode 100644 index 5e772fb..0000000 --- a/man/zip_source_seek_compute_offset.man +++ /dev/null @@ -1,49 +0,0 @@ -.TH "ZIP_SOURCE_SEEK_COMPUTE_OFFSET" "3" "November 13, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_seek_compute_offset\fR -\- validate arguments and compute offset -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_source_seek_compute_offset\fR(\fIzip_uint64_t\ offset\fR, \fIzip_uint64_t\ length\fR, \fIvoid\ *data\fR, \fIzip_uint64_t\ data_length\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -Use this function to compute the offset for a -\fRZIP_SOURCE_SEEK\fR -or -\fRZIP_SOURCE_SEEK_WRITE\fR -command. -\fIdata\fR -and -\fIdata_length\fR -are the arguments to the source callback, -\fIoffset\fR -is the current offset and -\fIlength\fR -is the length of the source data or, for -\fRZIP_SOURCE_SEEK_WRITE\fR, -the amount of data written. -.SH "RETURN VALUES" -On success, it returns the new offset, on error it returns \-1 and -sets -\fIerror\fR. -.SH "ERRORS" -\fBzip_source_seek_compute_offset\fR() -fails if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -One of the arguments is invalid or the seek would place the offset -outside the data. -.SH "SEE ALSO" -zip_source_function(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_seek_compute_offset.mdoc b/man/zip_source_seek_compute_offset.mdoc index d5885a9..89fb77f 100644 --- a/man/zip_source_seek_compute_offset.mdoc +++ b/man/zip_source_seek_compute_offset.mdoc @@ -1,5 +1,5 @@ .\" zip_source_seek_compute_offset.mdoc - validate arguments and compute offset -.\" Copyright (C) 2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_source_seek_write.man b/man/zip_source_seek_write.man deleted file mode 100644 index 0ba3192..0000000 --- a/man/zip_source_seek_write.man +++ /dev/null @@ -1,56 +0,0 @@ -.TH "ZIP_SOURCE_SEEK_WRITE" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_seek_write\fR -\- set write offset in zip source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_seek_write\fR(\fIzip_source_t\ *source\fR, \fIzip_int64_t\ offset\fR, \fIint\ whence\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_seek_write\fR() -sets the current write offset for -\fIsource\fR. -Just like in -fseek(3), -depending on the -\fIwhence\fR -argument, the -\fIoffset\fR -is counted relative from: -.RS 6n -.TP 12n -\fRSEEK_SET\fR -start of file -.TP 12n -\fRSEEK_CUR\fR -current write offset in file -.TP 12n -\fRSEEK_END\fR -end of file -.RE -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_begin_write(3), -zip_source_commit_write(3), -zip_source_rollback_write(3), -zip_source_tell_write(3), -zip_source_write(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_stat.man b/man/zip_source_stat.man deleted file mode 100644 index 24411ff..0000000 --- a/man/zip_source_stat.man +++ /dev/null @@ -1,108 +0,0 @@ -.TH "ZIP_SOURCE_STAT" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_stat\fR -\- get information about zip_source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_source_stat\fR(\fIzip_source_t\ *source\fR, \fIzip_stat_t\ *sb\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_source_stat\fR() -function obtains information about the zip source -\fIsource\fR -.PP -The -\fIsb\fR -argument is a pointer to a -\fIstruct zip_source_stat\fR -(shown below), into which information about the zip source is placed. -.nf -.sp -.RS 0n -struct zip_source_stat { - zip_uint64_t valid; /* which fields have valid values */ - const char *name; /* name of the file */ - zip_uint64_t index; /* index within archive */ - zip_uint64_t size; /* size of file (uncompressed) */ - zip_uint64_t comp_size; /* size of file (compressed) */ - time_t mtime; /* modification time */ - zip_uint32_t crc; /* crc of file data */ - zip_uint16_t comp_method; /* compression method used */ - zip_uint16_t encryption_method; /* encryption method used */ - zip_uint32_t flags; /* reserved for future use */ -}; -.RE -.fi -The structure pointed to by -\fIsb\fR -must be initialized with -\fBzip_stat_init\fR(\fI3\fR) -before calling -\fBzip_source_stat\fR(). -.PP -The -\fIvalid\fR -field of the structure specifies which other fields are valid. -Check if the flag defined by the following defines are in -\fIvalid\fR -before accessing the fields: -.RS 6n -.PD 0 -.TP 37n -\fRZIP_SOURCE_STAT_NAME\fR -\fIname\fR -.TP 37n -\fRZIP_SOURCE_STAT_INDEX\fR -\fIindex\fR -.TP 37n -\fRZIP_SOURCE_STAT_SIZE\fR -\fIsize\fR -.TP 37n -\fRZIP_SOURCE_STAT_COMP_SIZE\fR -\fIcomp_size\fR -.TP 37n -\fRZIP_SOURCE_STAT_MTIME\fR -\fImtime\fR -.TP 37n -\fRZIP_SOURCE_STAT_CRC\fR -\fIcrc\fR -.TP 37n -\fRZIP_SOURCE_STAT_COMP_METHOD\fR -\fIcomp_method\fR -.TP 37n -\fRZIP_SOURCE_STAT_ENCRYPTION_METHOD\fR -\fIencryption_method\fR -.TP 37n -\fRZIP_SOURCE_STAT_FLAGS\fR -\fIflags\fR -.RE -.PD -.PP -\fINOTE\fR: -Some fields may only be filled out after all data has been read from -the source, for example the -\fIcrc\fR -or -\fIsize\fR -fields. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_tell.man b/man/zip_source_tell.man deleted file mode 100644 index 76e146c..0000000 --- a/man/zip_source_tell.man +++ /dev/null @@ -1,43 +0,0 @@ -.TH "ZIP_SOURCE_TELL" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_tell\fR -\- report current read offset in zip source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_source_tell\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_tell\fR() -returns the current read offset -for -\fIsource\fR. -The return value can be passed to -zip_source_seek(3) -with -\fIwhence\fR -set to -\fRSEEK_SET\fR -to return to the same location in the source. -.SH "RETURN VALUES" -Upon successful completion the current read offset is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_read(3), -zip_source_tell(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_tell_write.man b/man/zip_source_tell_write.man deleted file mode 100644 index ab340ec..0000000 --- a/man/zip_source_tell_write.man +++ /dev/null @@ -1,46 +0,0 @@ -.TH "ZIP_SOURCE_TELL_WRITE" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_tell_write\fR -\- report current write offset in zip source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_source_tell_write\fR(\fIzip_source_t\ *source\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_tell_write\fR() -returns the current write offset -for -\fIsource\fR. -The return value can be passed to -zip_source_seek_write(3) -with -\fIwhence\fR -set to -\fRSEEK_SET\fR -to return to the same location in the source. -.SH "RETURN VALUES" -Upon successful completion the current write offset is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_begin_write(3), -zip_source_commit_write(3), -zip_source_rollback_write(3), -zip_source_tell_write(3), -zip_source_write(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_win32a.man b/man/zip_source_win32a.man deleted file mode 100644 index 25152d7..0000000 --- a/man/zip_source_win32a.man +++ /dev/null @@ -1,86 +0,0 @@ -.TH "ZIP_SOURCE_WIN32A" "3" "March 11, 2015" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_win32a\fR, -\fBzip_source_win32a_create\fR -\- create data source from a Windows ANSI file name -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_win32a\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *fname\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR); -.PD -.PP -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_win32a_create\fR(\fIconst\ char\ *fname\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -The functions -\fBzip_source_win32a\fR() -and -\fBzip_source_win32a_create\fR() -create a zip source on Windows using a Windows ANSI name. -They open -\fIfname\fR -and read -\fIlen\fR -bytes from offset -\fIstart\fR -from it. -If -\fIlen\fR -is 0 or \-1, the whole file (starting from -\fIstart\fR) -is used. -.PP -If the file supports seek, the source can be used to open a zip archive from. -.PP -The file is opened and read when the data from the source is used, usually by -\fBzip_close\fR() -or -\fBzip_open_from_source\fR(). -.SH "RETURN VALUES" -Upon successful completion, the created source is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -or -\fIerror\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_source_win32a\fR() -and -\fBzip_source_win32a_create\fR() -fail if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIfname\fR, -\fIstart\fR, -or -\fIlen\fR -are invalid. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_OPEN\fR] -Opening -\fIfname\fR -failed. -.SH "SEE ALSO" -libzip(3), -zip_add(3), -zip_replace(3), -zip_source(3), -zip_source_win32handle(3), -zip_source_win32w(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_win32a.mdoc b/man/zip_source_win32a.mdoc index 32e4214..b4e687d 100644 --- a/man/zip_source_win32a.mdoc +++ b/man/zip_source_win32a.mdoc @@ -1,5 +1,5 @@ .\" zip_source_win32a.mdoc -- create data source using a win32 ANSI name -.\" Copyright (C) 2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2015-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd March 11, 2015 +.Dd December 29, 2016 .Dt ZIP_SOURCE_WIN32A 3 .Os .Sh NAME @@ -39,12 +39,11 @@ .Sh LIBRARY libzip (-lzip) .Sh SYNOPSIS +.In zip.h .Ft zip_source_t * -.Fn zip_source_win32a "zip_t *archive" "const char *fname" \ -"zip_uint64_t start" "zip_int64_t len" +.Fn zip_source_win32a "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" .Ft zip_source_t * -.Fn zip_source_win32a_create "const char *fname" \ -"zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Fn zip_source_win32a_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" .Sh DESCRIPTION The functions .Fn zip_source_win32a diff --git a/man/zip_source_win32handle.man b/man/zip_source_win32handle.man deleted file mode 100644 index 4982657..0000000 --- a/man/zip_source_win32handle.man +++ /dev/null @@ -1,86 +0,0 @@ -.TH "ZIP_SOURCE_WIN32HANDLE" "3" "March 11, 2015" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_win32handle\fR, -\fBzip_source_win32handle_create\fR -\- create data source from a Windows file handle -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_win32handle\fR(\fIzip_t\ *archive\fR, \fIHANDLE\ h\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR); -.PD -.PP -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_win32handle_create\fR(\fIHANDLE\ h\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -The functions -\fBzip_source_win32handle\fR() -and -\fBzip_source_win32handle_create\fR() -create a zip source from a Windows file handle. -They open -\fIfname\fR -and read -\fIlen\fR -bytes from offset -\fIstart\fR -from it. -If -\fIlen\fR -is 0 or \-1, the whole file (starting from -\fIstart\fR) -is used. -.PP -If the file supports seek, the source can be used to open a zip archive from. -.PP -The file is opened and read when the data from the source is used, usually by -\fBzip_close\fR() -or -\fBzip_open_from_source\fR(). -.SH "RETURN VALUES" -Upon successful completion, the created source is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -or -\fIerror\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_source_w32handle\fR() -and -\fBzip_source_w32handle_create\fR() -fail if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIfname\fR, -\fIstart\fR, -or -\fIlen\fR -are invalid. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_OPEN\fR] -Opening -\fIfname\fR -failed. -.SH "SEE ALSO" -libzip(3), -zip_add(3), -zip_replace(3), -zip_source(3), -zip_source_win32a(3), -zip_source_win32w(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_win32handle.mdoc b/man/zip_source_win32handle.mdoc index dc93c88..415d994 100644 --- a/man/zip_source_win32handle.mdoc +++ b/man/zip_source_win32handle.mdoc @@ -1,5 +1,5 @@ .\" zip_source_handle.mdoc -- create data source from a Windows file handle -.\" Copyright (C) 2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2015-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd March 11, 2015 +.Dd December 29, 2016 .Dt ZIP_SOURCE_WIN32HANDLE 3 .Os .Sh NAME @@ -39,12 +39,11 @@ .Sh LIBRARY libzip (-lzip) .Sh SYNOPSIS +.In zip.h .Ft zip_source_t * -.Fn zip_source_win32handle "zip_t *archive" "HANDLE h" \ -"zip_uint64_t start" "zip_int64_t len" +.Fn zip_source_win32handle "zip_t *archive" "HANDLE h" "zip_uint64_t start" "zip_int64_t len" .Ft zip_source_t * -.Fn zip_source_win32handle_create "HANDLE h" \ -"zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Fn zip_source_win32handle_create "HANDLE h" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" .Sh DESCRIPTION The functions .Fn zip_source_win32handle diff --git a/man/zip_source_win32w.man b/man/zip_source_win32w.man deleted file mode 100644 index 9ad1685..0000000 --- a/man/zip_source_win32w.man +++ /dev/null @@ -1,86 +0,0 @@ -.TH "ZIP_SOURCE_WIN32W" "3" "March 11, 2015" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_win32w\fR, -\fBzip_source_win32w_create\fR -\- create data source from a Windows Unicode file name -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_win32w\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *fname\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR); -.PD -.PP -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_win32w_create\fR(\fIconst\ char\ *fname\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR, \fIzip_error_t\ *error\fR); -.PD -.SH "DESCRIPTION" -The functions -\fBzip_source_win32w\fR() -and -\fBzip_source_win32w_create\fR() -create a zip source on Windows using a Windows Unicode name. -They open -\fIfname\fR -and read -\fIlen\fR -bytes from offset -\fIstart\fR -from it. -If -\fIlen\fR -is 0 or \-1, the whole file (starting from -\fIstart\fR) -is used. -.PP -If the file supports seek, the source can be used to open a zip archive from. -.PP -The file is opened and read when the data from the source is used, usually by -\fBzip_close\fR() -or -\fBzip_open_from_source\fR(). -.SH "RETURN VALUES" -Upon successful completion, the created source is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -or -\fIerror\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_source_win32w\fR() -and -\fBzip_source_win32w_create\fR() -fail if: -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIfname\fR, -\fIstart\fR, -or -\fIlen\fR -are invalid. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.TP 19n -[\fRZIP_ER_OPEN\fR] -Opening -\fIfname\fR -failed. -.SH "SEE ALSO" -libzip(3), -zip_add(3), -zip_replace(3), -zip_source(3), -zip_source_win32a(3), -zip_source_win32handle(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_win32w.mdoc b/man/zip_source_win32w.mdoc index 9fe4121..ad8557f 100644 --- a/man/zip_source_win32w.mdoc +++ b/man/zip_source_win32w.mdoc @@ -1,5 +1,5 @@ .\" zip_source_win32w.mdoc -- create data source using a win32 Unicode name -.\" Copyright (C) 2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2015-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd March 11, 2015 +.Dd December 29, 2016 .Dt ZIP_SOURCE_WIN32W 3 .Os .Sh NAME @@ -39,12 +39,11 @@ .Sh LIBRARY libzip (-lzip) .Sh SYNOPSIS +.In zip.h .Ft zip_source_t * -.Fn zip_source_win32w "zip_t *archive" "const char *fname" \ -"zip_uint64_t start" "zip_int64_t len" +.Fn zip_source_win32w "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" .Ft zip_source_t * -.Fn zip_source_win32w_create "const char *fname" \ -"zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Fn zip_source_win32w_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" .Sh DESCRIPTION The functions .Fn zip_source_win32w diff --git a/man/zip_source_write.man b/man/zip_source_write.man deleted file mode 100644 index 1c029b9..0000000 --- a/man/zip_source_write.man +++ /dev/null @@ -1,49 +0,0 @@ -.TH "ZIP_SOURCE_WRITE" "3" "November 18, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_write\fR -\- write data to zip source -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_int64_t\fR -.PD 0 -.HP 4n -\fBzip_source_write\fR(\fIzip_source_t\ *source\fR, \fIconst\ void\ *data\fR, \fIzip_uint64_t\ len\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_write\fR() -writes -\fIlen\fR -bytes from the buffer -\fIdata\fR -to the zip source -\fIsource\fR -at the current write offset. -.PP -The zip source -\fIsource\fR -has to be prepared for writing by calling -zip_source_begin_write(3) -first. -.SH "RETURN VALUES" -Upon successful completion the number of bytes written is returned. -Otherwise, \-1 is returned and the error information in -\fIsource\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_source(3), -zip_source_begin_write(3), -zip_source_commit_write(3), -zip_source_rollback_write(3), -zip_source_seek_write(3), -zip_source_tell_write(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_zip.man b/man/zip_source_zip.man deleted file mode 100644 index a088036..0000000 --- a/man/zip_source_zip.man +++ /dev/null @@ -1,93 +0,0 @@ -.TH "ZIP_SOURCE_ZIP" "3" "August 2, 2014" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_source_zip\fR -\- create data source from zip file -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIzip_source_t *\fR -.PD 0 -.HP 4n -\fBzip_source_zip\fR(\fIzip_t\ *archive\fR, \fIzip_t\ *srcarchive\fR, \fIzip_uint64_t\ srcidx\fR, \fIzip_flags_t\ flags\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR); -.PD -.SH "DESCRIPTION" -The function -\fBzip_source_zip\fR() -creates a zip source from a file in a zip archive. -The -\fIsrcarchive\fR -argument is the (open) zip archive containing the source zip file -at index -\fIsrcidx\fR. -\fIlen\fR -bytes from offset -\fIstart\fR -will be used in the zip_source. -If -\fIlen\fR -is 0 or \-1, the rest of the file, starting from -\fIstart\fR, -is used. -If -\fIstart\fR -is zero and -\fIlen\fR -is \-1, the whole file will be copied without decompressing it. -.PP -Supported flags are: -.TP 23n -\fRZIP_FL_UNCHANGED\fR -Try to get the original data without any changes that may have been -made to -\fIsrcarchive\fR -after opening it. -.TP 23n -\fRZIP_FL_RECOMPRESS\fR -When adding the data from -\fIsrcarchive\fR, -re-compress it using the current settings instead of copying the -compressed data. -.SH "RETURN VALUES" -Upon successful completion, the created source is returned. -Otherwise, -\fRNULL\fR -is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_source_zip\fR() -fails if: -.TP 19n -[\fRZIP_ER_CHANGED\fR] -Unchanged data was requested, but it is not available. -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIsrcarchive\fR, -\fIsrcidx\fR, -\fIstart\fR, -or -\fIlen\fR -are invalid. -.TP 19n -[\fRZIP_ER_MEMORY\fR] -Required memory could not be allocated. -.PD 0 -.PP -Additionally, it can return all error codes from -\fBzip_stat_index\fR() -and -\fBzip_fopen_index\fR(). -.PD -.SH "SEE ALSO" -libzip(3), -zip_add(3), -zip_replace(3), -zip_source(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_source_zip.mdoc b/man/zip_source_zip.mdoc index ce03220..e332958 100644 --- a/man/zip_source_zip.mdoc +++ b/man/zip_source_zip.mdoc @@ -1,5 +1,5 @@ .\" zip_source_zip.mdoc -- create data source from zip file -.\" Copyright (C) 2004-2014 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2004-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -40,8 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft zip_source_t * -.Fn zip_source_zip "zip_t *archive" "zip_t *srcarchive" \ -"zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t len" +.Fn zip_source_zip "zip_t *archive" "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t len" .Sh DESCRIPTION The function .Fn zip_source_zip diff --git a/man/zip_stat.man b/man/zip_stat.man deleted file mode 100644 index 2419e32..0000000 --- a/man/zip_stat.man +++ /dev/null @@ -1,145 +0,0 @@ -.TH "ZIP_STAT" "3" "July 22, 2012" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_stat\fR, -\fBzip_stat_index\fR -\- get information about file -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_stat\fR(\fIzip_t\ *archive\fR, \fIconst\ char\ *fname\fR, \fIzip_flags_t\ flags\fR, \fIzip_stat_t\ *sb\fR); -.PD -.PP -\fIint\fR -.PD 0 -.HP 4n -\fBzip_stat_index\fR(\fIzip_t\ *archive\fR, \fIint\ index\fR, \fIzip_flags_t\ flags\fR, \fIzip_stat_t\ *sb\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_stat\fR() -function obtains information about the file named -\fIfname\fR -in -\fIarchive\fR. -The -\fIflags\fR -argument specifies how the name lookup should be done. -Its values are described in -zip_name_locate(3). -Also, -\fRZIP_FL_UNCHANGED\fR -may be -\fIor\fR'ed -to it to request information about the original file in the archive, -ignoring any changes made. -.PP -The -\fBzip_stat_index\fR() -function obtains information about the file at position -\fIindex\fR. -.PP -The -\fIsb\fR -argument is a pointer to a -\fIstruct zip_stat\fR -(shown below), into which information about the file is placed. -.nf -.sp -.RS 0n -struct zip_stat { - zip_uint64_t valid; /* which fields have valid values */ - const char *name; /* name of the file */ - zip_uint64_t index; /* index within archive */ - zip_uint64_t size; /* size of file (uncompressed) */ - zip_uint64_t comp_size; /* size of file (compressed) */ - time_t mtime; /* modification time */ - zip_uint32_t crc; /* crc of file data */ - zip_uint16_t comp_method; /* compression method used */ - zip_uint16_t encryption_method; /* encryption method used */ - zip_uint32_t flags; /* reserved for future use */ -}; -.RE -.fi -The structure pointed to by -\fIsb\fR -must be allocated before calling -\fBzip_stat\fR() -or -\fBzip_stat_index\fR(). -.PP -The -\fIvalid\fR -field of the structure specifies which other fields are valid. -Check if the flag defined by the following defines are in -\fIvalid\fR -before accessing the fields: -.RS 6n -.PD 0 -.TP 30n -\fRZIP_STAT_NAME\fR -\fIname\fR -.TP 30n -\fRZIP_STAT_INDEX\fR -\fIindex\fR -.TP 30n -\fRZIP_STAT_SIZE\fR -\fIsize\fR -.TP 30n -\fRZIP_STAT_COMP_SIZE\fR -\fIcomp_size\fR -.TP 30n -\fRZIP_STAT_MTIME\fR -\fImtime\fR -.TP 30n -\fRZIP_STAT_CRC\fR -\fIcrc\fR -.TP 30n -\fRZIP_STAT_COMP_METHOD\fR -\fIcomp_method\fR -.TP 30n -\fRZIP_STAT_ENCRYPTION_METHOD\fR -\fIencryption_method\fR -.TP 30n -\fRZIP_STAT_FLAGS\fR -\fIflags\fR -.RE -.PD -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error information in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -The function -\fBzip_stat\fR() -can fail for any of the errors specified for the routine -zip_name_locate(3). -.PP -The function -\fBzip_stat_index\fR() -fails and sets the error information to -\fRZIP_ER_INVAL\fR -if -\fIindex\fR -is invalid. -If -\fRZIP_FL_UNCHANGED\fR -is not set and no information can be obtained from the source -callback, the error information is set to -\fRZIP_ER_CHANGED\fR. -.SH "SEE ALSO" -libzip(3), -zip_get_num_entries(3), -zip_name_locate(3), -zip_stat_init(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_stat.mdoc b/man/zip_stat.mdoc index 1d27106..6767816 100644 --- a/man/zip_stat.mdoc +++ b/man/zip_stat.mdoc @@ -1,5 +1,5 @@ .\" zip_stat.mdoc -- get information about file -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd July 22, 2012 +.Dd December 29, 2016 .Dt ZIP_STAT 3 .Os .Sh NAME @@ -43,7 +43,7 @@ libzip (-lzip) .Ft int .Fn zip_stat "zip_t *archive" "const char *fname" "zip_flags_t flags" "zip_stat_t *sb" .Ft int -.Fn zip_stat_index "zip_t *archive" "int index" "zip_flags_t flags" "zip_stat_t *sb" +.Fn zip_stat_index "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_stat_t *sb" .Sh DESCRIPTION The .Fn zip_stat diff --git a/man/zip_stat_init.man b/man/zip_stat_init.man deleted file mode 100644 index 142a74e..0000000 --- a/man/zip_stat_init.man +++ /dev/null @@ -1,45 +0,0 @@ -.TH "ZIP_STAT_INIT" "3" "September 22, 2013" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_stat_init\fR -\- initialize zip_stat structure -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIvoid\fR -.PD 0 -.HP 4n -\fBzip_stat_init\fR(\fIzip_stat_t\ *sb\fR); -.PD -.SH "DESCRIPTION" -The -\fBzip_stat_init\fR() -function initializes the members of a struct zip_stat. -The current members are described in -zip_stat(3), -but this function should be used to initialize it to -make sure none are missed. -The structure pointed to by -\fIsb\fR -must be allocated before calling -\fBzip_stat_init\fR(). -.PP -This function should be used by functions provided to -zip_source_function(3) -when returning -\fRZIP_SOURCE_STAT\fR -information to make sure all fields are initialized. -.SH "RETURN VALUES" -If -\fIsb\fR -is valid, the function is always successful. -.SH "SEE ALSO" -libzip(3), -zip_stat(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_stat_init.mdoc b/man/zip_stat_init.mdoc index 83be074..3fe8a93 100644 --- a/man/zip_stat_init.mdoc +++ b/man/zip_stat_init.mdoc @@ -1,5 +1,5 @@ .\" zip_stat_init.mdoc -- init zip_stat structure -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_unchange.man b/man/zip_unchange.man deleted file mode 100644 index db2697b..0000000 --- a/man/zip_unchange.man +++ /dev/null @@ -1,44 +0,0 @@ -.TH "ZIP_UNCHANGE" "3" "April 23, 2006" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_unchange\fR -\- undo changes to file in zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_unchange\fR(\fIzip_t\ *archive\fR, \fIint\ index\fR); -.PD -.SH "DESCRIPTION" -Changes to the file at position -\fIindex\fR -are reverted. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "ERRORS" -\fBzip_unchange\fR() -fails if: -.TP 19n -[\fRZIP_ER_EXISTS\fR] -Unchanging the name would result in a duplicate name in the archive. -.TP 19n -[\fRZIP_ER_INVAL\fR] -\fIindex\fR -is not a valid file index in -\fIzip\fR. -.SH "SEE ALSO" -libzip(3), -zip_unchange_all(3), -zip_unchange_archive(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_unchange.mdoc b/man/zip_unchange.mdoc index 6ec8a2a..ffa7e1c 100644 --- a/man/zip_unchange.mdoc +++ b/man/zip_unchange.mdoc @@ -1,5 +1,5 @@ .\" zip_unchange.mdoc -- undo changes to file in zip archive -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at @@ -40,7 +40,7 @@ libzip (-lzip) .Sh SYNOPSIS .In zip.h .Ft int -.Fn zip_unchange "zip_t *archive" "int index" +.Fn zip_unchange "zip_t *archive" "zip_uint64_t index" .Sh DESCRIPTION Changes to the file at position .Ar index diff --git a/man/zip_unchange_all.man b/man/zip_unchange_all.man deleted file mode 100644 index 9cf0381..0000000 --- a/man/zip_unchange_all.man +++ /dev/null @@ -1,33 +0,0 @@ -.TH "ZIP_UNCHANGE_ALL" "3" "April 23, 2006" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_unchange_all\fR -\- undo all changes in a zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_unchange_all\fR(\fIzip_t\ *archive\fR); -.PD -.SH "DESCRIPTION" -All changes to files and global information in -\fIarchive\fR -are reverted. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_unchange(3), -zip_unchange_archive(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_unchange_all.mdoc b/man/zip_unchange_all.mdoc index 915064f..9f6b3f8 100644 --- a/man/zip_unchange_all.mdoc +++ b/man/zip_unchange_all.mdoc @@ -1,5 +1,5 @@ .\" zip_unchange_all.mdoc -- undo changes to all files in zip archive -.\" Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zip_unchange_archive.man b/man/zip_unchange_archive.man deleted file mode 100644 index 9b71cfa..0000000 --- a/man/zip_unchange_archive.man +++ /dev/null @@ -1,33 +0,0 @@ -.TH "ZIP_UNCHANGE_ARCHIVE" "3" "May 14, 2008" "NiH" "Library Functions Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzip_unchange_archive\fR -\- undo global changes to zip archive -.SH "LIBRARY" -libzip (-lzip) -.SH "SYNOPSIS" -\fB#include \fR -.sp -\fIint\fR -.PD 0 -.HP 4n -\fBzip_unchange_archive\fR(\fIzip_t\ *archive\fR); -.PD -.SH "DESCRIPTION" -Revert all global changes to the archive -\fIarchive\fR. -This reverts changes to the archive comment and global flags. -.SH "RETURN VALUES" -Upon successful completion 0 is returned. -Otherwise, \-1 is returned and the error code in -\fIarchive\fR -is set to indicate the error. -.SH "SEE ALSO" -libzip(3), -zip_unchange(3), -zip_unchange_all(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zip_unchange_archive.mdoc b/man/zip_unchange_archive.mdoc index f1908a7..b306b2c 100644 --- a/man/zip_unchange_archive.mdoc +++ b/man/zip_unchange_archive.mdoc @@ -1,5 +1,5 @@ .\" zip_unchange_archive.mdoc -- undo changes to all files in zip archive -.\" Copyright (C) 2006-2015 Dieter Baron and Thomas Klausner +.\" Copyright (C) 2006-2016 Dieter Baron and Thomas Klausner .\" .\" This file is part of libzip, a library to manipulate ZIP archives. .\" The authors can be contacted at diff --git a/man/zipcmp.man b/man/zipcmp.man deleted file mode 100644 index 3278029..0000000 --- a/man/zipcmp.man +++ /dev/null @@ -1,61 +0,0 @@ -.TH "ZIPCMP" "1" "January 19, 2016" "NiH" "General Commands Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzipcmp\fR -\- compare contents of zip archives -.SH "SYNOPSIS" -.HP 7n -\fBzipcmp\fR -[\fB\-hipqtVv\fR] -\fIarchive1\ archive2\fR -.SH "DESCRIPTION" -\fBzipcmp\fR -compares the zip archives or directories -\fIarchive1\fR -and -\fIarchive2\fR -and checks if they contain the same files, comparing their names, -uncompressed sizes, and CRCs. -File order and compressed size differences are ignored. -.PP -Supported options: -.TP 5n -\fB\-h\fR -Display a short help message and exit. -.TP 5n -\fB\-i\fR -Compare names ignoring case distinctions. -.TP 5n -\fB\-p\fR -Enable paranoid checks. -Compares extra fields and other meta data. -(Automatically disabled if one of the archives is a directory.) -.TP 5n -\fB\-q\fR -Quiet mode. -Compare -\fB\-v\fR. -.TP 5n -\fB\-t\fR -Test zip files by comparing the contents to their checksums. -.TP 5n -\fB\-V\fR -Display version information and exit. -.TP 5n -\fB\-v\fR -Verbose mode. -Print details about differences to stdout. -(This is the default.) -.SH "EXIT STATUS" -\fBzipcmp\fR -exits 0 if the two archives contain the same files, 1 if they differ, -and >1 if an error occurred. -.SH "SEE ALSO" -zipmerge(1), -ziptool(1), -libzip(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/zipmerge.man b/man/zipmerge.man deleted file mode 100644 index ba8418a..0000000 --- a/man/zipmerge.man +++ /dev/null @@ -1,60 +0,0 @@ -.TH "ZIPMERGE" "1" "January 19, 2016" "NiH" "General Commands Manual" -.nh -.if n .ad l -.SH "NAME" -\fBzipmerge\fR -\- merge zip archives -.SH "SYNOPSIS" -.HP 9n -\fBzipmerge\fR -[\fB\-DhIiSsV\fR] -\fItarget-zip\fR -\fIsource-zip\fR\ [\fIsource-zip\ ...\fR] -.SH "DESCRIPTION" -\fBzipmerge\fR -merges the source zip archives -\fIsource-zip\fR -into the target zip archive -\fItarget-zip\fR. -By default, files in the source zip archives overwrite -existing files of the same name in the target zip archive. -.PP -Supported options: -.TP 5n -\fB\-D\fR -Ignore directory components in file name comparisons. -.TP 5n -\fB\-h\fR -Display a short help message and exit. -.TP 5n -\fB\-I\fR -Ignore case in file name comparisons -.TP 5n -\fB\-i\fR -Ask before overwriting files. -See also -\fB\-s\fR. -.TP 5n -\fB\-S\fR -Do not overwrite files that have the same size and -CRC32 in both the source and target archives. -.TP 5n -\fB\-s\fR -When -\fB\-i\fR -is given, do not before overwriting files that have the same size -and CRC32. -.TP 5n -\fB\-V\fR -Display version information and exit. -.SH "EXIT STATUS" -\fBzipmerge\fR -exits 0 on success and >1 if an error occurred. -.SH "SEE ALSO" -zipcmp(1), -ziptool(1), -libzip(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/ziptool.man b/man/ziptool.man deleted file mode 100644 index e02c91a..0000000 --- a/man/ziptool.man +++ /dev/null @@ -1,346 +0,0 @@ -.TH "ZIPTOOL" "1" "January 19, 2016" "NiH" "General Commands Manual" -.nh -.if n .ad l -.SH "NAME" -\fBziptool\fR -\- modify zip archives -.SH "SYNOPSIS" -.HP 8n -\fBziptool\fR -[\fB\-cegHhmnrst\fR] -\fIzip-archive\fR -\fBcommand\fR\ [\fIcommand-args\ ...\fR] -[\fBcommand\fR\ [\fIcommand-args\ ...\fR]\ ...] -.SH "DESCRIPTION" -\fBziptool\fR -modifies the zip archive -\fIzip-archive\fR -according to the -\fIcommands\fR -given. -.PP -Supported options: -.TP 5n -\fB\-c\fR -Check zip archive consistency when opening it. -.TP 5n -\fB\-e\fR -Error if archive already exists (only useful with -\fB\-n\fR). -.TP 5n -\fB\-g\fR -Guess file name encoding (for -\fBstat\fR -command). -.TP 5n -\fB\-H\fR -Write files with -\(Lqholes\(Rq -compactly. -In other words, when the modified zip archive contains long runs of zeroes, -write a basic run-length encoded block instead. -\fINote\fR: -This command is for internal testing of -libzip(3) -and will usually create invalid zip archives. -.TP 5n -\fB\-h\fR -Display help. -.TP 5n -\fB\-m\fR -Read archive into memory, and modify there; write out at end. -\fINote\fR: -This command is for internal testing of -libzip(3). -.TP 5n -\fB\-n\fR -Create archive if it doesn't exist. -See also -\fB\-e\fR. -.TP 5n -\fB\-r\fR -Print raw file name encoding without translation (for -\fBstat\fR -command). -.TP 5n -\fB\-s\fR -Follow file name convention strictly (for -\fBstat\fR -command). -.TP 5n -\fB\-t\fR -Disregard current file contents, if any. -\fINote\fR: -use this with care, it deletes all existing file contents when -you modify the archive. -.SS "Commands" -For all commands below, the index is zero-based. -In other words, the first entry in the zip archive has index 0. -.PP -Supported commands and arguments are: -.TP 12n -\fBadd\fR \fIname content\fR -Add file called -\fIname\fR -using the string -\fIcontent\fR -from the command line as data. -.TP 12n -\fBadd_dir\fR \fIname\fR -Add directory -\fIname\fR. -.TP 12n -\fBadd_file\fR \fIname file_to_add offset len\fR -Add file -\fIname\fR -to archive, using -\fIlen\fR -bytes from the file -\fIfile_to_add\fR -as input data, starting at -\fIoffset\fR. -.TP 12n -\fBadd_from_zip\fR \fIname archivename index offset len\fR -Add file called -\fIname\fR -to archive using data from another zip archive -\fIarchivename\fR -using the entry with index -\fIindex\fR -and reading -\fIlen\fR -bytes from -\fIoffset\fR. -.TP 12n -\fBadd_nul\fR \fIname length\fR -Add a file -\fIname\fR -consisting of -\fIlength\fR -NUL bytes. -(Mostly useful for testing.) -.TP 12n -\fBcat\fR \fIindex\fR -Output file contents for entry -\fIindex\fR -to stdout. -.TP 12n -\fBcount_extra\fR \fIindex flags\fR -Print the number of extra fields for archive entry -\fIindex\fR -using -\fIflags\fR. -.TP 12n -\fBcount_extra_by_id\fR \fIindex extra_id flags\fR -Print number of extra fields of type -\fIextra_id\fR -for archive entry -\fIindex\fR -using -\fIflags\fR. -.TP 12n -\fBdelete\fR \fIindex\fR -Remove entry at -\fIindex\fR -from zip archive. -.TP 12n -\fBdelete_extra\fR \fIindex extra_idx flags\fR -Remove extra field number -\fIextra_idx\fR -from archive entry -\fIindex\fR -using -\fIflags\fR. -.TP 12n -\fBdelete_extra_by_id\fR \fIindex extra_id extra_index flags\fR -Remove extra field number -\fIextra_index\fR -of type -\fIextra_id\fR -from archive entry -\fIindex\fR -using -\fIflags\fR. -.TP 12n -\fBget_archive_comment\fR -Print archive comment. -.TP 12n -\fBget_extra\fR \fIindex extra_index flags\fR -Print extra field -\fIextra_index\fR -for archive entry -\fIindex\fR -using -\fIflags\fR. -.TP 12n -\fBget_extra_by_id\fR \fIindex extra_id extra_index flags\fR -Print extra field -\fIextra_index\fR -of type -\fIextra_id\fR -for archive entry -\fIindex\fR -using -\fIflags\fR. -.TP 12n -\fBget_file_comment\fR \fIindex\fR -Get file comment for archive entry -\fIindex\fR. -.TP 12n -\fBget_num_entries\fR \fIflags\fR -Print number of entries in archive using -\fIflags\fR. -.TP 12n -\fBname_locate\fR \fIname flags\fR -Find entry in archive with the filename -\fIname\fR -using -\fIflags\fR -and print its index. -.TP 12n -\fBrename\fR \fIindex name\fR -Rename archive entry -\fIindex\fR -to -\fIname\fR. -.TP 12n -\fBreplace_file_contents\fR \fIindex data\fR -Replace file contents for archive entry -\fIindex\fR -with the string -\fIdata\fR. -.TP 12n -\fBset_archive_comment\fR \fIcomment\fR -Set archive comment to -\fIcomment\fR. -.TP 12n -\fBset_extra\fR \fIindex extra_id extra_index flags value\fR -Set extra field number -\fIextra_index\fR -of type -\fIextra_id\fR -for archive entry -\fIindex\fR -using -\fIflags\fR -to -\fIvalue\fR. -.TP 12n -\fBset_file_comment\fR \fIindex comment\fR -Set file comment for archive entry -\fIindex\fR -to string -\fIcomment\fR. -.TP 12n -\fBset_file_compression\fR \fIindex method compression_flags\fR -Set file compression method for archive entry -\fIindex\fR -to -\fImethod\fR -using -\fIcompression_flags\fR. -\fINote\fR: -Currently, -\fIcompression_flags\fR -are ignored. -.TP 12n -\fBset_file_mtime\fR \fIindex timestamp\fR -Set file modification time for archive entry -\fIindex\fR -to UNIX mtime -\fItimestamp\fR. -.TP 12n -\fBset_file_mtime_all\fR \fItimestamp\fR -Set file modification time for all archive entries to UNIX mtime -\fItimestamp\fR. -.TP 12n -\fBset_password\fR \fIpassword\fR -Set default password for encryption/decryption to -\fIpassword\fR. -.TP 12n -\fBstat\fR \fIindex\fR -Print information about archive entry -\fIindex\fR. -.TP 12n -\fBunchange_all\fR -Revert all changes up to that point. -Mostly useful for testing. -.TP 12n -\fBzin_close\fR \fIindex\fR -Close input zip_source -\fIindex\fR. -For internal tests only. -.SS "Flags" -Some commands take flag arguments. -Supported flags are: -.RS 6n -.PD 0 -.TP 5n -\fIC\fR -\fRZIP_FL_NOCASE\fR -.TP 5n -\fIc\fR -\fRZIP_FL_CENTRAL\fR -.TP 5n -\fId\fR -\fRZIP_FL_NODIR\fR -.TP 5n -\fIl\fR -\fRZIP_FL_LOCAL\fR -.TP 5n -\fIu\fR -\fRZIP_FL_UNCHANGED\fR -.RE -.PD -.SS "Compression Methods" -Some commands take compression method arguments. -Supported methods are: -.RS 6n -.PD 0 -.TP 4n -\fB\(bu\fR -\fRdefault\fR -.TP 4n -\fB\(bu\fR -\fRdeflate\fR -.TP 4n -\fB\(bu\fR -\fRstore\fR -.RE -.PD -.SH "EXIT STATUS" -.br -The \fBziptool\fR utility exits\~0 on success, and\~>0 if an error occurs. -.SH "EXAMPLES" -Add a file called -\fIteststring.txt\fR -to the zip archive -\fItestbuffer.zip\fR -with data -\(LqThis is a test.\en\(Rq -where -\(Lq\en\(Rq -is replaced with a newline character: -.nf -.sp -.RS 6n -ziptool testbuffer.zip add teststring.txt \\"This is a test.\en\\" -.RE -.fi -.PP -Delete the first file from the zip archive -\fItestfile.zip\fR: -.nf -.sp -.RS 6n -ziptool testfile.zip delete 0 -.RE -.fi -.SH "SEE ALSO" -zipcmp(1), -zipmerge(1), -libzip(3) -.SH "AUTHORS" -Dieter Baron <\fIdillo@nih.at\fR> -and -Thomas Klausner <\fItk@giga.or.at\fR> diff --git a/man/ziptool.mdoc b/man/ziptool.mdoc index b402405..4eca252 100644 --- a/man/ziptool.mdoc +++ b/man/ziptool.mdoc @@ -29,7 +29,7 @@ .\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN .\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd January 19, 2016 +.Dd December 16, 2016 .Dt ZIPTOOL 1 .Os .Sh NAME @@ -38,6 +38,8 @@ .Sh SYNOPSIS .Nm .Op Fl cegHhmnrst +.Op Fl l Ar length +.Op Fl o Ar offset .Ar zip-archive .Cm command Op Ar command-args ... .Op Cm command Oo Ar command-args ... Oc ... @@ -50,7 +52,7 @@ according to the given. .Pp Supported options: -.Bl -tag -width MMM +.Bl -tag -width MoMoffsetMM .It Fl c Check zip archive consistency when opening it. .It Fl e @@ -72,6 +74,12 @@ This command is for internal testing of and will usually create invalid zip archives. .It Fl h Display help. +.It Fl l Ar length +Only read +.Ar length +bytes of archive. +See also +.Fl o . .It Fl m Read archive into memory, and modify there; write out at end. .Em Note : @@ -81,6 +89,11 @@ This command is for internal testing of Create archive if it doesn't exist. See also .Fl e . +.It Fl o Ar offset +Start reading input archive from +.Ar offset . +See also +.Fl l . .It Fl r Print raw file name encoding without translation (for .Cm stat @@ -243,6 +256,13 @@ using Currently, .Ar compression_flags are ignored. +.It Cm set_file_encryption Ar index method password +Set file encryption method for archive entry +.Ar index +to +.Ar method +with password +.Ar password . .It Cm set_file_mtime Ar index timestamp Set file modification time for archive entry .Ar index @@ -291,6 +311,19 @@ Supported methods are: .It .Dv store .El +.Ss Encryption Methods +Some commands take encryption method arguments. +Supported methods are: +.Bl -bullet -compact -offset indent +.It +.Dv none +.It +.Dv AES-128 +.It +.Dv AES-192 +.It +.Dv AES-256 +.El .Sh EXIT STATUS .Ex -std .Sh EXAMPLES diff --git a/missing b/missing deleted file mode 100755 index f62bbae..0000000 --- a/missing +++ /dev/null @@ -1,215 +0,0 @@ -#! /bin/sh -# Common wrapper for a few potentially missing GNU programs. - -scriptversion=2013-10-28.13; # UTC - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# Originally written 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 - -case $1 in - - --is-lightweight) - # Used by our autoconf macros to check whether the available missing - # script is modern enough. - exit 0 - ;; - - --run) - # Back-compat with the calling convention used by older automake. - shift - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due -to PROGRAM being missing or too old. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - -Supported PROGRAM values: - aclocal autoconf autoheader autom4te automake makeinfo - bison yacc flex lex help2man - -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 - -# Run the given program, remember its exit status. -"$@"; st=$? - -# If it succeeded, we are done. -test $st -eq 0 && exit 0 - -# Also exit now if we it failed (or wasn't found), and '--version' was -# passed; such an option is passed most likely to detect whether the -# program is present and works. -case $2 in --version|--help) exit $st;; esac - -# Exit code 63 means version mismatch. This often happens when the user -# tries to use an ancient version of a tool on a file that requires a -# minimum version. -if test $st -eq 63; then - msg="probably too old" -elif test $st -eq 127; then - # Program was missing. - msg="missing on your system" -else - # Program was found and executed, but failed. Give up. - exit $st -fi - -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software - -program_details () -{ - case $1 in - aclocal|automake) - echo "The '$1' program is part of the GNU Automake package:" - echo "<$gnu_software_URL/automake>" - echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/autoconf>" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - autoconf|autom4te|autoheader) - echo "The '$1' program is part of the GNU Autoconf package:" - echo "<$gnu_software_URL/autoconf/>" - echo "It also requires GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - esac -} - -give_advice () -{ - # Normalize program name to check for. - normalized_program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - - printf '%s\n' "'$1' is $msg." - - configure_deps="'configure.ac' or m4 files included by 'configure.ac'" - case $normalized_program in - autoconf*) - echo "You should only need it if you modified 'configure.ac'," - echo "or m4 files included by it." - program_details 'autoconf' - ;; - autoheader*) - echo "You should only need it if you modified 'acconfig.h' or" - echo "$configure_deps." - program_details 'autoheader' - ;; - automake*) - echo "You should only need it if you modified 'Makefile.am' or" - echo "$configure_deps." - program_details 'automake' - ;; - aclocal*) - echo "You should only need it if you modified 'acinclude.m4' or" - echo "$configure_deps." - program_details 'aclocal' - ;; - autom4te*) - echo "You might have modified some maintainer files that require" - echo "the 'autom4te' program to be rebuilt." - program_details 'autom4te' - ;; - bison*|yacc*) - echo "You should only need it if you modified a '.y' file." - echo "You may want to install the GNU Bison package:" - echo "<$gnu_software_URL/bison/>" - ;; - lex*|flex*) - echo "You should only need it if you modified a '.l' file." - echo "You may want to install the Fast Lexical Analyzer package:" - echo "<$flex_URL>" - ;; - help2man*) - echo "You should only need it if you modified a dependency" \ - "of a man page." - echo "You may want to install the GNU Help2man package:" - echo "<$gnu_software_URL/help2man/>" - ;; - makeinfo*) - echo "You should only need it if you modified a '.texi' file, or" - echo "any other file indirectly affecting the aspect of the manual." - echo "You might want to install the Texinfo package:" - echo "<$gnu_software_URL/texinfo/>" - echo "The spurious makeinfo call might also be the consequence of" - echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" - echo "want to install GNU make:" - echo "<$gnu_software_URL/make/>" - ;; - *) - echo "You might have modified some files without having the proper" - echo "tools for further handling them. Check the 'README' file, it" - echo "often tells you about the needed prerequisites for installing" - echo "this package. You may also peek at any GNU archive site, in" - echo "case some other package contains this missing '$1' program." - ;; - esac -} - -give_advice "$1" | sed -e '1s/^/WARNING: /' \ - -e '2,$s/^/ /' >&2 - -# Propagate the correct exit status (expected to be 127 for a program -# not found, 63 for a program that failed due to version mismatch). -exit $st - -# 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/regress/CMakeLists.txt b/regress/CMakeLists.txt index 332530f..0a36cfd 100644 --- a/regress/CMakeLists.txt +++ b/regress/CMakeLists.txt @@ -10,7 +10,7 @@ ENDIF(NOT HAVE_GETOPT) SET(STANDALONE_TEST_PROGRAMS add_from_filep fopen_unchanged -# fread + fseek ) SET(HELPER_TEST_PROGRAMS @@ -22,6 +22,12 @@ SET(GETOPT_USERS tryopen ) +SET(DISABLED_TESTS + encryption-nonrandom-aes128.test + encryption-nonrandom-aes192.test + encryption-nonrandom-aes256.test +) + SET(EXTRA_TESTS add_dir.test add_from_buffer.test @@ -38,8 +44,11 @@ SET(EXTRA_TESTS add_stored.test add_stored_in_memory.test count_entries.test - decrypt-correct-password.test - decrypt-wrong-password.test + decrypt-correct-password-aes256.test + decrypt-correct-password-pkware.test + decrypt-no-password-aes256.test + decrypt-wrong-password-aes256.test + decrypt-wrong-password-pkware.test delete_add_same.test delete_invalid.test delete_last.test @@ -47,6 +56,7 @@ SET(EXTRA_TESTS delete_multiple_partial.test delete_renamed_rename.test encrypt.test + encryption-remove.test extra_add.test extra_add_multiple.test extra_count.test @@ -63,6 +73,9 @@ SET(EXTRA_TESTS file_comment_encmismatch.test fopen_unchanged.test fread.test + fseek_deflated.test + fseek_fail.test + fseek_ok.test get_comment.test name_locate.test open_cons_extrabytes.test @@ -82,6 +95,7 @@ SET(EXTRA_TESTS open_truncate.test open_zip64_3mf.test open_zip64_ok.test + progress.test rename_ascii.test rename_cp437.test rename_deleted.test diff --git a/regress/Makefile.am b/regress/Makefile.am index 0fb4c06..19babed 100644 --- a/regress/Makefile.am +++ b/regress/Makefile.am @@ -6,14 +6,25 @@ noinst_PROGRAMS= \ add_from_filep \ fopen_unchanged \ fread \ + fseek \ tryopen -pkglib_LTLIBRARIES= malloc.la +if !WIN32_HOST +pkglib_LTLIBRARIES= malloc.la nonrandomopen.la + malloc_la_SOURCES= malloc.c malloc_la_LDFLAGS= -module -avoid-version +malloc_la_LIBADD= ${DLSYM_LIB} + +nonrandomopen_la_SOURCES= nonrandomopen.c +nonrandomopen_la_LDFLAGS= -module -avoid-version +nonrandomopen_la_LIBADD= ${DLSYM_LIB} +# we have to do it this way, because if we choose noinst_LTLIBRARIES, +# only the .a files are built install-pkglibLTLIBRARIES: @echo not installing shared objects needed only for testing +endif EXTRA_DIST= \ CMakeLists.txt \ @@ -25,7 +36,13 @@ EXTRA_DIST= \ bogus.zip \ broken.zip \ cm-default.zip \ - encrypt-aes.zip \ + encrypt-aes128-noentropy.zip \ + encrypt-aes192-noentropy.zip \ + encrypt-aes256-noentropy.zip \ + encrypt-aes128.zip \ + encrypt-aes192.zip \ + encrypt-aes256.zip \ + encrypt-none.zip \ encrypt.zip \ encrypt_plus_extra.zip \ encrypt_plus_extra_modified_c.zip \ @@ -84,6 +101,8 @@ EXTRA_DIST= \ incons-local-filename.zip \ incons-local-magic-bad.zip \ incons-local-size-larger.zip \ + junk-at-end.zip \ + junk-at-start.zip \ large-uncompressable \ manyfiles-zip.zip \ multidisk.zip \ @@ -146,11 +165,17 @@ TESTS= \ add_from_zip_stored.test \ add_stored.test \ add_stored_in_memory.test \ + cm-default.test \ count_entries.test \ - decrypt-aes-correct-password.test \ - decrypt-aes-wrong-password.test \ - decrypt-correct-password.test \ - decrypt-wrong-password.test \ + decrypt-correct-password-aes128.test \ + decrypt-correct-password-aes192.test \ + decrypt-correct-password-aes256.test \ + decrypt-correct-password-pkware.test \ + decrypt-no-password-aes256.test \ + decrypt-wrong-password-aes128.test \ + decrypt-wrong-password-aes192.test \ + decrypt-wrong-password-aes256.test \ + decrypt-wrong-password-pkware.test \ delete_add_same.test \ delete_invalid.test \ delete_last.test \ @@ -158,6 +183,7 @@ TESTS= \ delete_multiple_partial.test \ delete_renamed_rename.test \ encrypt.test \ + encryption-remove.test \ extra_add.test \ extra_add_multiple.test \ extra_count.test \ @@ -174,7 +200,12 @@ TESTS= \ file_comment_encmismatch.test \ fopen_unchanged.test \ fread.test \ + fseek_deflated.test \ + fseek_fail.test \ + fseek_ok.test \ get_comment.test \ + junk_at_end.test \ + junk_at_start.test \ name_locate.test \ open_cons_extrabytes.test \ open_empty.test \ @@ -187,6 +218,7 @@ TESTS= \ open_filename_duplicate_empty_consistency.test \ open_filename_empty.test \ open_incons.test \ + open_many_fail.test \ open_many_ok.test \ open_multidisk.test \ open_new_but_exists.test \ @@ -198,6 +230,7 @@ TESTS= \ open_truncate.test \ open_zip64_3mf.test \ open_zip64_ok.test \ + progress.test \ rename_ascii.test \ rename_cp437.test \ rename_deleted.test \ @@ -230,19 +263,53 @@ TESTS= \ zip64_creation.test \ zip64_stored_creation.test +DISABLED_TESTS= \ + encryption-nonrandom-aes128.test \ + encryption-nonrandom-aes192.test \ + encryption-nonrandom-aes256.test + #XFAIL_TESTS= AM_CPPFLAGS=-I${top_srcdir}/lib -I../lib -I${top_srcdir}/src LDADD=${top_builddir}/lib/libzip.la -check-am: bigzero.zip manyfiles.zip runtest +CREATED_FILES= \ + bigzero.zip \ + manyfiles-133000.zip \ + manyfiles-65536.zip \ + manyfiles-fewer.zip \ + manyfiles-more.zip \ + manyfiles-zip64-modulo.zip \ + manyfiles-zip64.zip \ + manyfiles.zip \ + runtest + +check-am: ${CREATED_FILES} bigzero.zip: bigzero-zip.zip ${top_builddir}/src/ziptool ${srcdir}/bigzero-zip.zip cat 0 > ${builddir}/bigzero.zip manyfiles.zip: manyfiles-zip.zip - ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 0 > ${builddir}/manyfiles.zip + ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 0 > ${builddir}/$@ + +manyfiles-133000.zip: manyfiles-zip.zip + ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 1 > ${builddir}/$@ + +manyfiles-65536.zip: manyfiles-zip.zip + ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 2 > ${builddir}/$@ + +manyfiles-fewer.zip: manyfiles-zip.zip + ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 5 > ${builddir}/$@ + +manyfiles-more.zip: manyfiles-zip.zip + ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 6 > ${builddir}/$@ + +manyfiles-zip64-modulo.zip: manyfiles-zip.zip + ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 3 > ${builddir}/$@ + +manyfiles-zip64.zip: manyfiles-zip.zip + ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 4 > ${builddir}/$@ runtest: runtest.in sed -e 's!@[s]rcdir@!${srcdir}!g' -e 's!@[a]bs_srcdir@!${abs_srcdir}!g' ${srcdir}/runtest.in > runtest @@ -251,4 +318,4 @@ runtest: runtest.in cleanup: rm -rf ${builddir}/sandbox-*.d[0-9]*/ -CLEANFILES=bigzero.zip manyfiles.zip runtest +CLEANFILES=${CREATED_FILES} diff --git a/regress/Makefile.in b/regress/Makefile.in deleted file mode 100644 index a7f6f29..0000000 --- a/regress/Makefile.in +++ /dev/null @@ -1,1259 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 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@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -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@ -noinst_PROGRAMS = add_from_filep$(EXEEXT) fopen_unchanged$(EXEEXT) \ - fread$(EXEEXT) tryopen$(EXEEXT) -subdir = regress -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/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__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(pkglibdir)" -LTLIBRARIES = $(pkglib_LTLIBRARIES) -malloc_la_LIBADD = -am_malloc_la_OBJECTS = malloc.lo -malloc_la_OBJECTS = $(am_malloc_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -malloc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(malloc_la_LDFLAGS) $(LDFLAGS) -o $@ -PROGRAMS = $(noinst_PROGRAMS) -add_from_filep_SOURCES = add_from_filep.c -add_from_filep_OBJECTS = add_from_filep.$(OBJEXT) -add_from_filep_LDADD = $(LDADD) -add_from_filep_DEPENDENCIES = ${top_builddir}/lib/libzip.la -fopen_unchanged_SOURCES = fopen_unchanged.c -fopen_unchanged_OBJECTS = fopen_unchanged.$(OBJEXT) -fopen_unchanged_LDADD = $(LDADD) -fopen_unchanged_DEPENDENCIES = ${top_builddir}/lib/libzip.la -fread_SOURCES = fread.c -fread_OBJECTS = fread.$(OBJEXT) -fread_LDADD = $(LDADD) -fread_DEPENDENCIES = ${top_builddir}/lib/libzip.la -tryopen_SOURCES = tryopen.c -tryopen_OBJECTS = tryopen.$(OBJEXT) -tryopen_LDADD = $(LDADD) -tryopen_DEPENDENCIES = ${top_builddir}/lib/libzip.la -SCRIPTS = $(noinst_SCRIPTS) -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(malloc_la_SOURCES) add_from_filep.c fopen_unchanged.c \ - fread.c tryopen.c -DIST_SOURCES = $(malloc_la_SOURCES) add_from_filep.c fopen_unchanged.c \ - fread.c tryopen.c -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__tty_colors_dummy = \ - mgn= red= grn= lgn= blu= brg= std=; \ - am__color_tests=no -am__tty_colors = { \ - $(am__tty_colors_dummy); \ - if test "X$(AM_COLOR_TESTS)" = Xno; then \ - am__color_tests=no; \ - elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ - am__color_tests=yes; \ - elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ - am__color_tests=yes; \ - fi; \ - if test $$am__color_tests = yes; then \ - red=''; \ - grn=''; \ - lgn=''; \ - blu=''; \ - mgn=''; \ - brg=''; \ - std=''; \ - fi; \ -} -am__recheck_rx = ^[ ]*:recheck:[ ]* -am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* -am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* -# A command that, given a newline-separated list of test names on the -# standard input, print the name of the tests that are to be re-run -# upon "make recheck". -am__list_recheck_tests = $(AWK) '{ \ - recheck = 1; \ - while ((rc = (getline line < ($$0 ".trs"))) != 0) \ - { \ - if (rc < 0) \ - { \ - if ((getline line2 < ($$0 ".log")) < 0) \ - recheck = 0; \ - break; \ - } \ - else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ - { \ - recheck = 0; \ - break; \ - } \ - else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ - { \ - break; \ - } \ - }; \ - if (recheck) \ - print $$0; \ - close ($$0 ".trs"); \ - close ($$0 ".log"); \ -}' -# A command that, given a newline-separated list of test names on the -# standard input, create the global log from their .trs and .log files. -am__create_global_log = $(AWK) ' \ -function fatal(msg) \ -{ \ - print "fatal: making $@: " msg | "cat >&2"; \ - exit 1; \ -} \ -function rst_section(header) \ -{ \ - print header; \ - len = length(header); \ - for (i = 1; i <= len; i = i + 1) \ - printf "="; \ - printf "\n\n"; \ -} \ -{ \ - copy_in_global_log = 1; \ - global_test_result = "RUN"; \ - while ((rc = (getline line < ($$0 ".trs"))) != 0) \ - { \ - if (rc < 0) \ - fatal("failed to read from " $$0 ".trs"); \ - if (line ~ /$(am__global_test_result_rx)/) \ - { \ - sub("$(am__global_test_result_rx)", "", line); \ - sub("[ ]*$$", "", line); \ - global_test_result = line; \ - } \ - else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ - copy_in_global_log = 0; \ - }; \ - if (copy_in_global_log) \ - { \ - rst_section(global_test_result ": " $$0); \ - while ((rc = (getline line < ($$0 ".log"))) != 0) \ - { \ - if (rc < 0) \ - fatal("failed to read from " $$0 ".log"); \ - print line; \ - }; \ - printf "\n"; \ - }; \ - close ($$0 ".trs"); \ - close ($$0 ".log"); \ -}' -# Restructured Text title. -am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } -# Solaris 10 'make', and several other traditional 'make' implementations, -# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it -# by disabling -e (using the XSI extension "set +e") if it's set. -am__sh_e_setup = case $$- in *e*) set +e;; esac -# Default flags passed to test drivers. -am__common_driver_flags = \ - --color-tests "$$am__color_tests" \ - --enable-hard-errors "$$am__enable_hard_errors" \ - --expect-failure "$$am__expect_failure" -# To be inserted before the command running the test. Creates the -# directory for the log if needed. Stores in $dir the directory -# containing $f, in $tst the test, in $log the log. Executes the -# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and -# passes TESTS_ENVIRONMENT. Set up options for the wrapper that -# will run the test scripts (or their associated LOG_COMPILER, if -# thy have one). -am__check_pre = \ -$(am__sh_e_setup); \ -$(am__vpath_adj_setup) $(am__vpath_adj) \ -$(am__tty_colors); \ -srcdir=$(srcdir); export srcdir; \ -case "$@" in \ - */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ - *) am__odir=.;; \ -esac; \ -test "x$$am__odir" = x"." || test -d "$$am__odir" \ - || $(MKDIR_P) "$$am__odir" || exit $$?; \ -if test -f "./$$f"; then dir=./; \ -elif test -f "$$f"; then dir=; \ -else dir="$(srcdir)/"; fi; \ -tst=$$dir$$f; log='$@'; \ -if test -n '$(DISABLE_HARD_ERRORS)'; then \ - am__enable_hard_errors=no; \ -else \ - am__enable_hard_errors=yes; \ -fi; \ -case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ - am__expect_failure=yes;; \ - *) \ - am__expect_failure=no;; \ -esac; \ -$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) -# A shell command to get the names of the tests scripts with any registered -# extension removed (i.e., equivalently, the names of the test logs, with -# the '.log' extension removed). The result is saved in the shell variable -# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, -# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", -# since that might cause problem with VPATH rewrites for suffix-less tests. -# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. -am__set_TESTS_bases = \ - bases='$(TEST_LOGS)'; \ - bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ - bases=`echo $$bases` -RECHECK_LOGS = $(TEST_LOGS) -AM_RECURSIVE_TARGETS = check recheck -TEST_SUITE_LOG = test-suite.log -am__test_logs1 = $(TESTS:=.log) -am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) -TEST_LOGS = $(am__test_logs2:.test.log=.log) -TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver -TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ - $(TEST_LOG_FLAGS) -am__set_b = \ - case '$@' in \ - */*) \ - case '$*' in \ - */*) b='$*';; \ - *) b=`echo '$@' | sed 's/\.log$$//'`; \ - esac;; \ - *) \ - b='$*';; \ - esac -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ - $(top_srcdir)/test-driver -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -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@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANFMT = @MANFMT@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -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@ -PKG_CONFIG_RPATH = @PKG_CONFIG_RPATH@ -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_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -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@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AUTOMAKE_OPTIONS = parallel-tests -noinst_SCRIPTS = runtest -pkglib_LTLIBRARIES = malloc.la -malloc_la_SOURCES = malloc.c -malloc_la_LDFLAGS = -module -avoid-version -EXTRA_DIST = \ - CMakeLists.txt \ - NiHTest.pm \ - runtest.in \ - ${TESTS} \ - bigstored.zh \ - bigzero-zip.zip \ - bogus.zip \ - broken.zip \ - cm-default.zip \ - encrypt-aes.zip \ - encrypt.zip \ - encrypt_plus_extra.zip \ - encrypt_plus_extra_modified_c.zip \ - encrypt_plus_extra_modified_l.zip \ - extra_field_align_1-0.zip \ - extra_field_align_1-ff.zip \ - extra_field_align_2-0.zip \ - extra_field_align_2-ff.zip \ - extra_field_align_3-0.zip \ - extra_field_align_3-ff.zip \ - extra_field_align_4-ff.zip \ - extra_field_align_1-ef_00.zip \ - extra_field_align_1-ef_ff.zip \ - extra_field_align_2-ef_00.zip \ - extra_field_align_2-ef_ff.zip \ - extra_field_align_3-ef_00.zip \ - extra_field_align_3-ef_ff.zip \ - filename_duplicate.zip \ - filename_duplicate_empty.zip \ - filename_empty.zip \ - fileorder.zip \ - firstsecond.zip \ - firstsecond-split-deflated.zip \ - firstsecond-split-stored.zip \ - foo-stored.zip \ - incons-archive-comment-longer.zip \ - incons-archive-comment-shorter.zip \ - incons-cdoffset.zip \ - incons-central-compression-method.zip \ - incons-central-compsize-larger-toolarge.zip \ - incons-central-compsize-larger.zip \ - incons-central-compsize-smaller.zip \ - incons-central-crc.zip \ - incons-central-date.zip \ - incons-central-file-comment-longer.zip \ - incons-central-file-comment-shorter.zip \ - incons-central-magic-bad.zip \ - incons-central-magic-bad2.zip \ - incons-central-size-larger.zip \ - incons-data.zip \ - incons-ef-central-size-wrong.zip \ - incons-ef-local-id-size.zip \ - incons-ef-local-id.zip \ - incons-ef-local-size.zip \ - incons-eocd-magic-bad.zip \ - incons-file-count-high.zip \ - incons-file-count-low.zip \ - incons-file-count-overflow.zip \ - incons-local-compression-method.zip \ - incons-local-compsize-larger.zip \ - incons-local-compsize-smaller.zip \ - incons-local-crc.zip \ - incons-local-filename-long.zip \ - incons-local-filename-missing.zip \ - incons-local-filename-short.zip \ - incons-local-filename.zip \ - incons-local-magic-bad.zip \ - incons-local-size-larger.zip \ - large-uncompressable \ - manyfiles-zip.zip \ - multidisk.zip \ - rename_ok.zip \ - streamed.zip \ - streamed-zip64.zip \ - test.zip \ - test2.zip \ - test-cp437.zip \ - test-cp437-comment-utf-8.zip \ - test-cp437-fc.zip \ - test-cp437-fc-utf-8-filename.zip \ - test-utf8.zip \ - test-utf8-unmarked.zip \ - testbuffer.zip \ - testdir.zip \ - testchanged.zip \ - testchangedlocal.zip \ - testcomment.zip \ - testcomment13.zip \ - testcommentremoved.zip \ - testdeflated.zip \ - testdeflated2.zip \ - testempty.zip \ - testextrabytes.zip \ - testfile.txt \ - testfile.zip \ - testfile-cp437.zip \ - testfile-plus-extra.zip \ - testfile-UTF8.zip \ - testfile2014.zip \ - teststdin.zip \ - teststored.zip \ - utf-8-standardization-input.zip \ - utf-8-standardization-output.zip \ - zip-in-archive-comment.zip \ - zip64.zip \ - zip64-3mf.zip - -TESTS_ENVIRONMENT = ZIPCMP=${top_builddir}/src/zipcmp -# ${srcdir}/runtest -#LOG_COMPILER= ${srcdir}/runtest -TEST_EXTENSIONS = .test -TEST_LOG_COMPILER = ${builddir}/runtest -#AM_TEST_LOG_FLAGS = -s -TESTS = \ - add_dir.test \ - add_from_buffer.test \ - add_from_file.test \ - add_from_file_duplicate.test \ - add_from_file_twice_duplicate.test \ - add_from_filep.test \ - add_from_stdin.test \ - add_from_zip_closed.test \ - add_from_zip_deflated.test \ - add_from_zip_deflated2.test \ - add_from_zip_partial_deflated.test \ - add_from_zip_partial_stored.test \ - add_from_zip_stored.test \ - add_stored.test \ - add_stored_in_memory.test \ - count_entries.test \ - decrypt-aes-correct-password.test \ - decrypt-aes-wrong-password.test \ - decrypt-correct-password.test \ - decrypt-wrong-password.test \ - delete_add_same.test \ - delete_invalid.test \ - delete_last.test \ - delete_multiple_last.test \ - delete_multiple_partial.test \ - delete_renamed_rename.test \ - encrypt.test \ - extra_add.test \ - extra_add_multiple.test \ - extra_count.test \ - extra_count_by_id.test \ - extra_count_ignore_zip64.test \ - extra_delete.test \ - extra_delete_by_id.test \ - extra_field_align.test \ - extra_get.test \ - extra_get_by_id.test \ - extra_set.test \ - extra_set_modify_c.test \ - extra_set_modify_l.test \ - file_comment_encmismatch.test \ - fopen_unchanged.test \ - fread.test \ - get_comment.test \ - name_locate.test \ - open_cons_extrabytes.test \ - open_empty.test \ - open_empty_2.test \ - open_extrabytes.test \ - open_file_count.test \ - open_filename_duplicate.test \ - open_filename_duplicate_consistency.test \ - open_filename_duplicate_empty.test \ - open_filename_duplicate_empty_consistency.test \ - open_filename_empty.test \ - open_incons.test \ - open_many_ok.test \ - open_multidisk.test \ - open_new_but_exists.test \ - open_new_ok.test \ - open_nonarchive.test \ - open_nosuchfile.test \ - open_ok.test \ - open_too_short.test \ - open_truncate.test \ - open_zip64_3mf.test \ - open_zip64_ok.test \ - rename_ascii.test \ - rename_cp437.test \ - rename_deleted.test \ - rename_fail.test \ - rename_ok.test \ - rename_utf8.test \ - rename_utf8_encmismatch.test \ - set_comment_all.test \ - set_comment_localonly.test \ - set_comment_removeglobal.test \ - set_comment_revert.test \ - set_compression_deflate_to_deflate.test \ - set_compression_deflate_to_store.test \ - set_compression_store_to_deflate.test \ - set_compression_store_to_store.test \ - set_compression_unknown.test \ - stat_index_cp437_guess.test \ - stat_index_cp437_raw.test \ - stat_index_cp437_strict.test \ - stat_index_fileorder.test \ - stat_index_streamed.test \ - stat_index_streamed_zip64.test \ - stat_index_utf8_guess.test \ - stat_index_utf8_raw.test \ - stat_index_utf8_strict.test \ - stat_index_utf8_unmarked_strict.test \ - stat_index_zip64.test \ - utf-8-standardization.test \ - zip-in-archive-comment.test \ - zip64_creation.test \ - zip64_stored_creation.test - - -#XFAIL_TESTS= -AM_CPPFLAGS = -I${top_srcdir}/lib -I../lib -I${top_srcdir}/src -LDADD = ${top_builddir}/lib/libzip.la -CLEANFILES = bigzero.zip manyfiles.zip runtest -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs -$(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 regress/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign regress/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): - -uninstall-pkglibLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ - done - -clean-pkglibLTLIBRARIES: - -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) - @list='$(pkglib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -malloc.la: $(malloc_la_OBJECTS) $(malloc_la_DEPENDENCIES) $(EXTRA_malloc_la_DEPENDENCIES) - $(AM_V_CCLD)$(malloc_la_LINK) -rpath $(pkglibdir) $(malloc_la_OBJECTS) $(malloc_la_LIBADD) $(LIBS) - -clean-noinstPROGRAMS: - @list='$(noinst_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 - -add_from_filep$(EXEEXT): $(add_from_filep_OBJECTS) $(add_from_filep_DEPENDENCIES) $(EXTRA_add_from_filep_DEPENDENCIES) - @rm -f add_from_filep$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(add_from_filep_OBJECTS) $(add_from_filep_LDADD) $(LIBS) - -fopen_unchanged$(EXEEXT): $(fopen_unchanged_OBJECTS) $(fopen_unchanged_DEPENDENCIES) $(EXTRA_fopen_unchanged_DEPENDENCIES) - @rm -f fopen_unchanged$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(fopen_unchanged_OBJECTS) $(fopen_unchanged_LDADD) $(LIBS) - -fread$(EXEEXT): $(fread_OBJECTS) $(fread_DEPENDENCIES) $(EXTRA_fread_DEPENDENCIES) - @rm -f fread$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(fread_OBJECTS) $(fread_LDADD) $(LIBS) - -tryopen$(EXEEXT): $(tryopen_OBJECTS) $(tryopen_DEPENDENCIES) $(EXTRA_tryopen_DEPENDENCIES) - @rm -f tryopen$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(tryopen_OBJECTS) $(tryopen_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add_from_filep.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fopen_unchanged.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fread.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tryopen.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - 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-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - 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" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -# Recover from deleted '.trs' file; this should ensure that -# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create -# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells -# to avoid problems with "make -n". -.log.trs: - rm -f $< $@ - $(MAKE) $(AM_MAKEFLAGS) $< - -# Leading 'am--fnord' is there to ensure the list of targets does not -# expand to empty, as could happen e.g. with make check TESTS=''. -am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) -am--force-recheck: - @: - -$(TEST_SUITE_LOG): $(TEST_LOGS) - @$(am__set_TESTS_bases); \ - am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ - redo_bases=`for i in $$bases; do \ - am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ - done`; \ - if test -n "$$redo_bases"; then \ - redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ - redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ - if $(am__make_dryrun); then :; else \ - rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ - fi; \ - fi; \ - if test -n "$$am__remaking_logs"; then \ - echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ - "recursion detected" >&2; \ - elif test -n "$$redo_logs"; then \ - am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ - fi; \ - if $(am__make_dryrun); then :; else \ - st=0; \ - errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ - for i in $$redo_bases; do \ - test -f $$i.trs && test -r $$i.trs \ - || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ - test -f $$i.log && test -r $$i.log \ - || { echo "$$errmsg $$i.log" >&2; st=1; }; \ - done; \ - test $$st -eq 0 || exit 1; \ - fi - @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ - ws='[ ]'; \ - results=`for b in $$bases; do echo $$b.trs; done`; \ - test -n "$$results" || results=/dev/null; \ - all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ - pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ - fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ - skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ - xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ - xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ - error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ - if test `expr $$fail + $$xpass + $$error` -eq 0; then \ - success=true; \ - else \ - success=false; \ - fi; \ - br='==================='; br=$$br$$br$$br$$br; \ - result_count () \ - { \ - if test x"$$1" = x"--maybe-color"; then \ - maybe_colorize=yes; \ - elif test x"$$1" = x"--no-color"; then \ - maybe_colorize=no; \ - else \ - echo "$@: invalid 'result_count' usage" >&2; exit 4; \ - fi; \ - shift; \ - desc=$$1 count=$$2; \ - if test $$maybe_colorize = yes && test $$count -gt 0; then \ - color_start=$$3 color_end=$$std; \ - else \ - color_start= color_end=; \ - fi; \ - echo "$${color_start}# $$desc $$count$${color_end}"; \ - }; \ - create_testsuite_report () \ - { \ - result_count $$1 "TOTAL:" $$all "$$brg"; \ - result_count $$1 "PASS: " $$pass "$$grn"; \ - result_count $$1 "SKIP: " $$skip "$$blu"; \ - result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ - result_count $$1 "FAIL: " $$fail "$$red"; \ - result_count $$1 "XPASS:" $$xpass "$$red"; \ - result_count $$1 "ERROR:" $$error "$$mgn"; \ - }; \ - { \ - echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ - $(am__rst_title); \ - create_testsuite_report --no-color; \ - echo; \ - echo ".. contents:: :depth: 2"; \ - echo; \ - for b in $$bases; do echo $$b; done \ - | $(am__create_global_log); \ - } >$(TEST_SUITE_LOG).tmp || exit 1; \ - mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ - if $$success; then \ - col="$$grn"; \ - else \ - col="$$red"; \ - test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ - fi; \ - echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ - echo "$${col}$$br$${std}"; \ - create_testsuite_report --maybe-color; \ - echo "$$col$$br$$std"; \ - if $$success; then :; else \ - echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ - if test -n "$(PACKAGE_BUGREPORT)"; then \ - echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ - fi; \ - echo "$$col$$br$$std"; \ - fi; \ - $$success || exit 1 - -check-TESTS: - @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list - @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - @set +e; $(am__set_TESTS_bases); \ - log_list=`for i in $$bases; do echo $$i.log; done`; \ - trs_list=`for i in $$bases; do echo $$i.trs; done`; \ - log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ - exit $$?; -recheck: all - @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - @set +e; $(am__set_TESTS_bases); \ - bases=`for i in $$bases; do echo $$i; done \ - | $(am__list_recheck_tests)` || exit 1; \ - log_list=`for i in $$bases; do echo $$i.log; done`; \ - log_list=`echo $$log_list`; \ - $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ - am__force_recheck=am--force-recheck \ - TEST_LOGS="$$log_list"; \ - exit $$? -.test.log: - @p='$<'; \ - $(am__set_b); \ - $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ - --log-file $$b.log --trs-file $$b.trs \ - $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ - "$$tst" $(AM_TESTS_FD_REDIRECT) -@am__EXEEXT_TRUE@.test$(EXEEXT).log: -@am__EXEEXT_TRUE@ @p='$<'; \ -@am__EXEEXT_TRUE@ $(am__set_b); \ -@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ -@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ -@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ -@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - -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 - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) -installdirs: - for dir in "$(DESTDIR)$(pkglibdir)"; 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: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) - -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) - -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -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 clean-noinstPROGRAMS \ - clean-pkglibLTLIBRARIES 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-pkglibLTLIBRARIES - -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-pkglibLTLIBRARIES - -.MAKE: check-am install-am install-strip - -.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-libtool clean-noinstPROGRAMS \ - clean-pkglibLTLIBRARIES cscopelist-am ctags ctags-am 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-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-pkglibLTLIBRARIES \ - 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 \ - recheck tags tags-am uninstall uninstall-am \ - uninstall-pkglibLTLIBRARIES - -.PRECIOUS: Makefile - - -install-pkglibLTLIBRARIES: - @echo not installing shared objects needed only for testing - -check-am: bigzero.zip manyfiles.zip runtest - -bigzero.zip: bigzero-zip.zip - ${top_builddir}/src/ziptool ${srcdir}/bigzero-zip.zip cat 0 > ${builddir}/bigzero.zip - -manyfiles.zip: manyfiles-zip.zip - ${top_builddir}/src/ziptool ${srcdir}/manyfiles-zip.zip cat 0 > ${builddir}/manyfiles.zip - -runtest: runtest.in - sed -e 's!@[s]rcdir@!${srcdir}!g' -e 's!@[a]bs_srcdir@!${abs_srcdir}!g' ${srcdir}/runtest.in > runtest - chmod +x runtest - -cleanup: - rm -rf ${builddir}/sandbox-*.d[0-9]*/ - -# 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/regress/NiHTest.pm b/regress/NiHTest.pm index e8b1db7..6021fd6 100644 --- a/regress/NiHTest.pm +++ b/regress/NiHTest.pm @@ -265,6 +265,7 @@ sub runtest { $ENV{TZ} = "UTC"; $ENV{LC_CTYPE} = "C"; + $ENV{POSIXLY_CORRECT} = 1; $self->sandbox_create($tag); $self->sandbox_enter(); @@ -283,8 +284,13 @@ sub runtest { for my $env (@{$self->{test}->{'setenv'}}) { $ENV{$env->[0]} = $env->[1]; } + my $preload_env_var = 'LD_PRELOAD'; + if ($^O eq 'darwin') { + $preload_env_var = 'DYLD_INSERT_LIBRARIES'; + } if (defined($self->{test}->{'preload'})) { - $ENV{LD_PRELOAD} = cwd() . "/../.libs/$self->{test}->{'preload'}"; + print "preloading: $preload_env_var = $self->{test}->{preload}\n"; + $ENV{$preload_env_var} = cwd() . "/../.libs/$self->{test}->{'preload'}"; } $self->run_program(); @@ -293,7 +299,7 @@ sub runtest { delete ${ENV{$env->[0]}}; } if (defined($self->{test}->{'preload'})) { - delete ${ENV{LD_PRELOAD}}; + delete ${ENV{$preload_env_var}}; } if ($self->{test}->{stdout}) { diff --git a/regress/cm-default.test b/regress/cm-default.test new file mode 100644 index 0000000..03e7200 --- /dev/null +++ b/regress/cm-default.test @@ -0,0 +1,5 @@ +# test default compression stores if smaller +return 0 +args -n test.zip add compressable aaaaaaaaaaaaaa add uncompressable uncompressable add_nul large-compressable 8200 add_file large-uncompressable large-uncompressable 0 -1 +file-new test.zip cm-default.zip +file large-uncompressable large-uncompressable large-uncompressable diff --git a/regress/decrypt-aes-correct-password.test b/regress/decrypt-aes-correct-password.test deleted file mode 100644 index 7c052e7..0000000 --- a/regress/decrypt-aes-correct-password.test +++ /dev/null @@ -1,5 +0,0 @@ -# test AES decryption support, extract file using correct password -return 1 -args encrypt.zzip set_password foofoofoo cat 0 -file encrypt.zzip encrypt-aes.zip encrypt-aes.zip -stderr can't open file at index '0': Compression method not supported diff --git a/regress/decrypt-aes-wrong-password.test b/regress/decrypt-aes-wrong-password.test deleted file mode 100644 index bd5eb1b..0000000 --- a/regress/decrypt-aes-wrong-password.test +++ /dev/null @@ -1,5 +0,0 @@ -# test AES decryption support, extract file using wrong password -return 1 -args encrypt.zzip set_password notfoonotfoo cat 0 -file encrypt.zzip encrypt-aes.zip encrypt-aes.zip -stderr can't open file at index '0': Compression method not supported diff --git a/regress/decrypt-correct-password-aes128.test b/regress/decrypt-correct-password-aes128.test new file mode 100644 index 0000000..a0409d9 --- /dev/null +++ b/regress/decrypt-correct-password-aes128.test @@ -0,0 +1,5 @@ +# test AES decryption support, extract file using correct password +return 0 +args encrypt.zzip set_password foofoofoo cat 1 +file encrypt.zzip encrypt-aes128.zip encrypt-aes128.zip +stdout encrypted diff --git a/regress/decrypt-correct-password-aes192.test b/regress/decrypt-correct-password-aes192.test new file mode 100644 index 0000000..56fc456 --- /dev/null +++ b/regress/decrypt-correct-password-aes192.test @@ -0,0 +1,5 @@ +# test AES decryption support, extract file using correct password +return 0 +args encrypt.zzip set_password foofoofoo cat 1 +file encrypt.zzip encrypt-aes192.zip encrypt-aes192.zip +stdout encrypted diff --git a/regress/decrypt-correct-password-aes256.test b/regress/decrypt-correct-password-aes256.test new file mode 100644 index 0000000..e704b53 --- /dev/null +++ b/regress/decrypt-correct-password-aes256.test @@ -0,0 +1,5 @@ +# test AES decryption support, extract file using correct password +return 0 +args encrypt.zzip set_password foofoofoo cat 1 +file encrypt.zzip encrypt-aes256.zip encrypt-aes256.zip +stdout encrypted diff --git a/regress/decrypt-correct-password.test b/regress/decrypt-correct-password-pkware.test similarity index 100% rename from regress/decrypt-correct-password.test rename to regress/decrypt-correct-password-pkware.test diff --git a/regress/decrypt-no-password-aes256.test b/regress/decrypt-no-password-aes256.test new file mode 100644 index 0000000..f1a4ce8 --- /dev/null +++ b/regress/decrypt-no-password-aes256.test @@ -0,0 +1,5 @@ +# test AES decryption support, no password provided +return 1 +args encrypt.zzip cat 1 +file encrypt.zzip encrypt-aes256.zip encrypt-aes256.zip +stderr can't open file at index '1': No password provided diff --git a/regress/decrypt-wrong-password-aes128.test b/regress/decrypt-wrong-password-aes128.test new file mode 100644 index 0000000..7866efa --- /dev/null +++ b/regress/decrypt-wrong-password-aes128.test @@ -0,0 +1,5 @@ +# test AES decryption support, extract file using wrong password +return 1 +args encrypt.zzip set_password notfoonotfoo cat 1 +file encrypt.zzip encrypt-aes128.zip encrypt-aes128.zip +stderr can't open file at index '1': Wrong password provided diff --git a/regress/decrypt-wrong-password-aes192.test b/regress/decrypt-wrong-password-aes192.test new file mode 100644 index 0000000..9a4206d --- /dev/null +++ b/regress/decrypt-wrong-password-aes192.test @@ -0,0 +1,5 @@ +# test AES decryption support, extract file using wrong password +return 1 +args encrypt.zzip set_password notfoonotfoo cat 1 +file encrypt.zzip encrypt-aes192.zip encrypt-aes192.zip +stderr can't open file at index '1': Wrong password provided diff --git a/regress/decrypt-wrong-password-aes256.test b/regress/decrypt-wrong-password-aes256.test new file mode 100644 index 0000000..8cf701c --- /dev/null +++ b/regress/decrypt-wrong-password-aes256.test @@ -0,0 +1,5 @@ +# test AES decryption support, extract file using wrong password +return 1 +args encrypt.zzip set_password notfoonotfoo cat 1 +file encrypt.zzip encrypt-aes256.zip encrypt-aes256.zip +stderr can't open file at index '1': Wrong password provided diff --git a/regress/decrypt-wrong-password.test b/regress/decrypt-wrong-password-pkware.test similarity index 100% rename from regress/decrypt-wrong-password.test rename to regress/decrypt-wrong-password-pkware.test diff --git a/regress/encrypt-aes.zip b/regress/encrypt-aes.zip deleted file mode 100644 index 5e79b38ef7b43851c0d4c3927e13693142f8fca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmWIWW@Zs#U}i{WFl?A%!Tpol?5fKDU37O8JHLxU70x;PE6MH ze`5aQ+b@&Ia|^xMuPoRl%`G}Deq+O-r+Jmzp3hzLJOFGa69Wf>DbUOnsYZ2dP%~M9 zbU{vHW}f%y^Us+W0=yZSL>O>cuMboV0t#S~0pS=fs1PHA1Ovn8=o!n?k1?XtNDhYC rg55zXP}4!Sga9$vc_=n4SC|X70gVpuW(9c*7%WT-dx3ND*&iagn^MEnIRXb5GcnW2gD$) zoDAFysd>pol?5fKDU37O8JHLxT^T_tAi!r`-(Jg2kNw+^^Z!e}w|~ONJh9i`Uk7+I zGRZOHwi=`tWXP6A5DV-EkQNbU+>QV#1c7ahnm`hplLEY1L0$v8kcpubNLPY53;-=D BFtz{y literal 0 HcmV?d00001 diff --git a/regress/encrypt-aes128.zip b/regress/encrypt-aes128.zip new file mode 100644 index 0000000000000000000000000000000000000000..e48c3c93430b90533a27fb4586e004805911c367 GIT binary patch literal 260 zcmWIWW@h1H0D+vD*&iagn^MEnIRXb5GcnW2gD$) zoDAFysd>pol?5fKDU37O8JHLxT^Sh|YO5+7g^CYl%AT1ytG9HLZ~D@!ZBw2W$$Woh zxFFFwz?+dtjv2SrARB;&Fl=cAvA}KsX%S(@?Ff)U5ZKnJ2_&&ODZrZ*D*&iagn^MEnIRXb5Gco>1jHb% zoDAFysd>pol?5fKDU37O8JHLxU70{C5Wt{l&$2HjZLW*_9P~x@q|85lj_;uR`~Yu8 zCOKx@)`Rpj0`Znc5DV-MkQNbU+ztUL1c7ahnm`hpvjV(XLEZzpl8K=dNY{cm3;?NI BEvNth literal 0 HcmV?d00001 diff --git a/regress/encrypt-aes192.zip b/regress/encrypt-aes192.zip new file mode 100644 index 0000000000000000000000000000000000000000..98865ce41e14ece71c9b09122639604473b2abc5 GIT binary patch literal 316 zcmWIWW@h1H0D+v|QZ$-un2 zvnoQMt11GlfGYrKhzJ8CLo!1y&=8;+1|=W{8OzDQ&5)XxTvS<5lA6LelbwNy!O@k8 zfkFLh>&;}BqCa7q?q!_Wuqk5g!Q6Klj~;KiDVxOc`OERRt6>4&j7)OOxSS>dvIJ-& z1H+a^5DV;%&=6LL%g|g5GD?IQw*x^2fWWp!S0IVaxdGm+pdbOdo{6CsNY4au7y#hJ BL%RR~ literal 0 HcmV?d00001 diff --git a/regress/encrypt-aes256-noentropy.zip b/regress/encrypt-aes256-noentropy.zip new file mode 100644 index 0000000000000000000000000000000000000000..0a3627a6ccdf23f8e782267d1a13e329ab4a07e5 GIT binary patch literal 268 zcmWIWW@h1H0D+vD*&iagn^MEnIRXb5Gco>2E-t( zoDAFysd>pol?5fKDU37O8JHLxU70~DP(j3jUH*FurzTBb&iU!>jT=wCRVEjSbOd-a zGRZOHb^^!@Mj+nO2x5WV0@5PFjN36Fg&?r4Q4>gFb6S8mE69sLmohPw0%@?>3;|QZ$-un2 zvnm3F!3wwnfQE=LFft@F3*gfhJ{4 z3R>o~FM6+~?h-5635S)!!_4w0mK0nm@aaBx{k*63f#dA```QD%8JXmmaXC){WD(F- z28Jz-AQspyp&_gg*P*!@WRwUqZbyO)0D*0du0Rr-lLNe2LBRs_0TV+nke&D*&ia1SrJ7kPB288rSn1qz!~Q zfjBiUxu~+BBsB%j0BT@ll4HhgHc%G>BM@(C1hK%DfV7A( + + 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. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 "zip.h" + +const char *prg; +#define USAGE "usage: %s archive index offset\n" + +int +main(int argc, char *argv[]) +{ + int ze; + zip_t *z; + zip_file_t *zf; + char *archive; + zip_int64_t offset, n; + zip_uint64_t index; + char b[1024]; + + prg = argv[0]; + + if (argc != 4) { + fprintf(stderr, USAGE, prg); + return 1; + } + + archive = argv[1]; + index = strtoull(argv[2], NULL, 10); + offset = (zip_int64_t)strtoull(argv[3], NULL, 10); + + if ((z=zip_open(archive, 0, &ze)) == NULL) { + zip_error_t error; + zip_error_init_with_code(&error, ze); + fprintf(stderr, "%s: can't open zip archive '%s': %s\n", prg, archive, zip_error_strerror(&error)); + zip_error_fini(&error); + return 1; + } + + if ((zf=zip_fopen_index(z, index, 0)) == NULL) { + fprintf(stderr, "%s: can't open file in archive '%s': %s\n", prg, archive, zip_error_strerror(zip_file_get_error(zf))); + zip_close(z); + return 1; + } + + if (zip_fseek(zf, offset, SEEK_SET) < 0) { + fprintf(stderr, "%s: zip_fseek failed: %s\n", prg, zip_error_strerror(zip_file_get_error(zf))); + zip_close(z); + return 1; + } + + while ((n=zip_fread(zf, b, sizeof(b))) > 0) { + printf("%.*s", (int)n, b); + } + if (n < 0) { + fprintf(stderr, "%s: zip_fread failed: %s\n", prg, zip_error_strerror(zip_file_get_error(zf))); + zip_close(z); + return 1; + } + + if (zip_close(z) == -1) { + fprintf(stderr, "%s: can't close zip archive '%s': %s\n", prg, archive, zip_strerror(z)); + return 1; + } + + return 0; +} diff --git a/regress/fseek_deflated.test b/regress/fseek_deflated.test new file mode 100644 index 0000000..7c560af --- /dev/null +++ b/regress/fseek_deflated.test @@ -0,0 +1,6 @@ +# unsuccessful fseek test because data is compressed +program fseek +args test.zip 0 2 +return 1 +file test.zip testdeflated.zip testdeflated.zip +stderr zip_fseek failed: Operation not supported diff --git a/regress/fseek_fail.test b/regress/fseek_fail.test new file mode 100644 index 0000000..be78a9a --- /dev/null +++ b/regress/fseek_fail.test @@ -0,0 +1,6 @@ +# successful fseek test +program fseek +args test.zip 0 8 +return 1 +file test.zip test.zip test.zip +stderr zip_fseek failed: Invalid argument diff --git a/regress/fseek_ok.test b/regress/fseek_ok.test new file mode 100644 index 0000000..29cfe67 --- /dev/null +++ b/regress/fseek_ok.test @@ -0,0 +1,6 @@ +# successful fseek test +program fseek +args test.zip 0 2 +return 0 +file test.zip test.zip test.zip +stdout st diff --git a/regress/incons-central-file-comment-shorter.zip b/regress/incons-central-file-comment-shorter.zip index bc8b13d1390a07be2fb931ed65a48d7902805810..7769a9afc860f542232e3d0edcdcbb3b3e0d5c34 100644 GIT binary patch literal 258 zcmZ{e%?-jZ423Cw2Zlgz0AL0rPNHX25x?hvQreciF0fX3 z<|;x3TmH4xk%u})tj`SDnXoiGP=l%tT&jc<(#L6rC`OW^R+OgN(ZLj+!AJJ!oL$jL gQ1)D*lFobuv8AT5F_QhF$VcNeWoG+n8R^mc0Og`bVgLXD delta 69 zcmZo-s-NIsFUG*YzzD=!8i52uqE~5gi9(`6aYlYoi9%XtPO3t3er|4RUWs0SH!B-R O2_q1C0%-*hhXDXZ9S%tV diff --git a/regress/junk-at-end.zip b/regress/junk-at-end.zip new file mode 100644 index 0000000000000000000000000000000000000000..30387b3f61c145f63946d088b765e2695fb6912f GIT binary patch literal 416 zcmWIWW@h1HU}9ikxLWI`f6R2JH7k$}!YmA;3?-?>C7~gl49t#2jrJfMTEW7Q!XN^c z;0gfi1uA8zo}q07qG5mosy8LGNFS`9Q}l`BEFcEyf5Du>0MUxgT3#frAnT1V><8%w z$pGzVWD;k_<$7MQV;F(tmPQa0;ultkUqUMwfNp?j2T5Xj0HU3NL4e_{qYYF$#5+JE nK;A(%0=q|$T~Ll>1k_t7PGMyOIfEGpPXXyYAPz%PVi6Yr?d4B* literal 0 HcmV?d00001 diff --git a/regress/junk-at-start.zip b/regress/junk-at-start.zip new file mode 100644 index 0000000000000000000000000000000000000000..8c983255bf84e2bddd16e9964abdcee63132bb59 GIT binary patch literal 416 zcmYex&*uv8W@h1HU}9ikxLWI`f6R2JH7k$}!YmA;3?-?>C7~gl49t#2jrJfMTEW7Q z!XN^cfa(P*WvHH^Z3LoWfCH*GC9_B$te;c#iQ_CF2I+snoWg+HT3#frAnT1V><8%w z$pGzVWD;k_<$7MQV;F(tmPQa0;ultkUqUMwfNp?j2T5Xj0HU3NL4e_{qYYF$#5+JE lK;A(%0$cd;G9bI49LWf%w@{qI$_8=Ew%=m9s zmV{HfWvwZiDVoZNR&GBR(agZtLEXeM1w#cyng91ZFyqYd;8xr2#yk@rr(uc3_W#m{jN6+&WLk`WjhZ)}_N!6j#%F8Ps4?g0wz{>3G=6yC_E$gr zGO8@HXU{*LXmWaHx6_GD|Nh~;2iLay%Z$)*e{GWzbZFnlV-v~_>y2e4dTUwP#Vqrc z?^5k0MP_^PZoA!Rvzg0|#^x^D6mV`)X>R%^!@2zEbLPt%vcj9jHJwxYqld=rZTd>> zRT<;neeFG!zmHz4{P+HAmH$@1R{3wmYnA_2y;k{eqw!{c8(PEZ=-v`!^S!oZa8p`D)IEQTvnJzjVw|`8(LL z(%+{!Dt`w*t@JlFN9FI})JlIBa#a4-eLrgdt`Cy>8*EgDaKeDA=A z`quK=FKP4I!*m%@4#Mt z>$dRLFB_(Q^Yy@fecQG0)-ThhezR|2-@Ywcc)y z@Yhd|(<=Y%pH}&A z_q57?ho@Ek+cmB7U-q=he_7Ki|5?t2Wyh~69agmYT-4FL&$6aj&Kw$VS$*lCHb0(T zHFtHBjZfu__tr1tR=vOa&5chT8t<)NMz4Bf_27+99USkiUnZ^Eu=?ALPaPibtzSm1 zTC}?J#zQ&dz4gn4RjXHT+<55FcyIkOW>w1S7dIX{INn>oWDSnpcxe5BWveeu+%RTU zXvEorK8rg_ZoP4bLsgtN6n+A-`TO@ZJq!4|(VNaqIVuH9&a}@SzGlm?=*{O|IQrdZyOn}% z!-`%wx_eqsw)>Y|(+t`1!-}3i>hk5__>95+8=qQxVD{=J6E}=pRV$)hju#ibIdQ|Y zt6E32J2?KU!TmNq^~r(PR(o;L7lYewd}`f+msby-xZ#;qjU!g)jQ8H6ZzpbeZdIp< z)d$CC4xX^_sr3hzuJ+=hd8=Q{8L!EYor9ZgJhb+}ORGCi-0<|Ox)GCd#(Qtk#)%t7 zuWA=D>EQU?gCjN``sBcytG&2r$?6vmj@RTz(&|e&<2CrPcl^co4kRqe?f29B#b3vD zjk`VlK2v+srpZ%|=6;qjE%8k4?7C~34GS(W_-fkXGk0b8Uz0p6c=O~Jj{fsADQJ@2 zZcW6nv`v$rR}89!N`Z$#Rc>LOJO0_cGl6SjH@ScDFsRBcEDwXK!ovFQvn6Lntcl%x z&h1Osn$k_@PJWhj#^uXyEg4l!G-XtMr6r?ku%?Wv%)ucOH|*5rhlY%*&YCi+b`Rb% zaf3!bVkd6cHCTfm^9G;MufDY9M$>CSUo1Jb`}ppH(IqdG?C> zEG&nI%FSiv>8C39Tsb{dZZ0c_hsw=m<>{xY@Lak1smeW9!?ok7!l)Xl9Z!|wjnj&! z3Zv>7?Rcuh8+YjGRV_67p%qURM%B~W@l+|^xY4VIZ#<;Qk5Q{aHy+a9$ESx%_Kvsq zD`;Kv=eTj{&C_o&y&1G5$l;&za9EZ5r#u{1<^CxThn1T-

F?#sF0!fMQ>{nNyCC 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

    XUXjD>f(aEl#Q$1z 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

    FM5tsp5j;l0;z! z<-jGPr~o>DbWQ|RIlm$%mAasuR*@S5*h?+IyC^hxomG#b&0fpV+*wta$#-5JpFrd0 z8n-2uq*J?hYo#0%DQ2NENsh9VgM{%xH_Ma}=UsUgxeBDg*r9VsyvUqE%Di}UT{ADO z*k_{XGFmfP6$f#SPq5Qf9Ciz&TLw&;<47oTP{%>qdGnIXaJ+6&S^*$9hIJee%-ZhV zLLp9!>`BPkDh|W*YT}{@j^NETY3I#L;lGNVD$PqPZ4#;~4$NwL_ii(G_@^HF6RhW~ zG*@?dSgG{NSX{=v+`d-SN)g~~xzb#~M6CT0Q>|D4(U=(RKXHOXpI}!zs|pxx!7A5e zsyGVJgY!|!dntT!9K8hIOR8R&{y^tp!88<#PQyEXUL9z6nxR#o{V4Z9@`%h-x{{vZ zR!5jx{gK+5NmZ-N%ds>}G%x3?d)Cpjh1&GkuN0Uq;oD|Zgvnz>@5Lkz;~;)KqB3P( zi~^sGcByBRkOKf^+PTG%F5&R%z?b5^nOLel$E6xg%=*vXGD#&z%E;(S4z_Rs-gD9> zvGqcx1}V6QT$>oiQ0 zaf(Bmm@#h_ENYYmdN7$fjwXd2=3$xarSwep1-<2Z&hzzs^3{7oWnS%}u{1%79hNpk zTCLe@r&ST@8vyxMZ?J`|G%>&C7@%|%qFCfg95XH}$9W`kIeE*KIFfYAgQ?xh!CvUW zOwDK+*V>$8V~AW_G`7Jc*lrrAj7IuANgh^{rT*3h=h}3h^Pt zAP#$R0bU+)yEy=chYr(^H@^6e)G| zA690Kz1SZ*E8~{l&OLouS~uEmPbGU%+h4ZDeWAs9_{~gqQq`0@Klq)y*M%mMu8k_> zAYH2bbgqztH76mt(1z}%J#@LnK{;y8!pZS!6EDjjj0zRT5a zfB($Yad5uZ`J*eNjzR;oPk19>(7^QNPG~qF{IGd7zX7H=T=`1Cz>fP`ruEN}E#S3d`U z5iPE*QU->5IlWEm+7EZvl?dcctD^nhp5BgMr8$VSj=;nRR*^-Fz!ZryiRq?P84l&J zgGTiXhf7aSn&CJ%5=F|Ijt?k9kUWi<>(t5WIEZsCf27jcb_?XiU<5=qSMj}$3hP#x zp-cpo9HiZH!6;YJ^SVZQkwEJ5z$(J~7Zw)jOV@EwrLVKvrKcf*%Ph~Cmjj~Lgf=iQ zpO?YB388s8KXw`IAXOa)ZL?aE)Xu81^=dBq(o8!A#qL~*z#PGeSbOu5%5s$ErHVX9 z)~6~Vfs*LxOH=7Jh(Lv9^rcTsn^M?ZpozANo6@o^Rh?KQ(&~5 z(^4}po*cG4GCw#7az4N=;<_)(M#J436sg)7cE`e@NxJR!hr*S9gpaA05Qd!{A8!vI zn=UI=WYKw{90j+MJ9yE{7+!6v)tS6vSmH;*#Eyhf`DzNC3-C759TlBi{%ENHPH1(2 z*QYq{!zh zTWN{_S~G-Z?4=fdQGF3w7k*)QLkXru-rSc7?izpm1Yz-kpwu=Rn^)V{NW1XH`45x^ zg^`J;9%AIoORkQCv8`18D7dVgz4+j+$>h6stw~!2<2EqV%!|ndcQaKSaPob2n|fU!gcl)IIZ20F8=R4U~OsHOBjo&RdEnr8kp3bMX_6Z4Ruy{DA(+}(RcKMAsE?-m8oV%LVuCw4w29f7 zhIYn^O(Cs3!0zsG3iwi`0_VmZ5n7}ja@X%}Kor6z)>3EKJt)1A*=q!rBAy({Z@|*e z8h@w3B0CV;>Z~dvt@1~$C&FeBbBY5!n0BVLi#x5^OD%uIb&7CGHx8g3)mH9;DL&nAP#@M8}SE>2u-Wo=Y1roIMFryg%m>Y*RmApwnz>$b2E)Q~yj* zHx=L=_5?>SyM8am3e7RQpZ8c&4}L9bsXgLdQ0i-NmV^)lPVAhZXPGJk`6Pe zIu2^!3hjnTVR_HZWRt z=|n_3rwn^6V@O>Ue<@N$95*{?)iz{11(2;PbMcoT%Rz~ffOYad4p4W-ijg$5u8so% z-uRBSBHr*pjF>?(z7Q@XO?l@yr>vB9@mY?@x+Jn3Y_Tag{V)W)x^tZ4><(qY{6Aqc zaH`Y*hNELg%))FQLwkC>@uFPUad4bx?Kqht4vw>A*o%e&%B4zsc0C9IR~e+9*wLh= z11z0>WiF(*GRFbIoE?&!BGNB%OHH9LIP>z+sHHPUJ>{ON)D=kn&T;zQDga%p;~=yY zgFp@iR9M3D&T&#V-eIS&F{Mql;AiVNctlC+hPA?Ph>dSp%j7urKKJ1?MIZ=eBp$R| zAZE%bvyN;NURU3k@mI?m4^rvr0Z&hi6F4sq%RJ?V1RZG(U&>@;+_^9`Qkz43%;|AQ z7^iYxJ|4F8<1EcxP%`SnHB(l6PE{bCk?0B|t-aK#N%Xk0&VohbalI0exQ>I0bOCvh z@rX}?UCo)7-J<+#;lsPB>mUiqL%n`3RY18r$7{|@BXxi}^GD5iRcg^SH-Zi+=SAN+ zZjbGElp9aOM2sHcl^h8hQ>8hmYHIsS%SAO6UAX;avoaTgd+}p@h1k`$zciJ7=d7Cl!s~l{ONxT?UsNTbZ!t0#J2X-W>cXpB&A`-7tLou(*ySBalT>oh z@~(}9$f!yV&RGvw(a=|ai?Vc<=Z=`#Dh9M%aLCf$+?=2w`TWxDB81Yt!+AZpM`+{t zi&0mrQZQZorAWteOdrcJr`5;lEEoA8&ORn!Zb>w@SF9EB!rek`+{Q0LqZUZ5cq-*A z-~zmDZ!JQGm>rC6r7Dmn6uc)1kf|&OF`89m%*$%a4N_N|mxn??fEw|kdCAmq7+MOl zQDzb^uR)fB2FPzUY9!F^*>xXEEswq;C@EoZXH`+8^ai^T)eLY_rCCAUo3OX&d#ekW z)+&&Cg|aZ;ZE-cn7_b zLNo*SC3WXGRba(ak!U*S$DLC}MbhEj_?#-X;QqSFG930O$W#F439A8)*=q!r)cYFZ3!apn5!w`Qu8+ntXw#W2Q)>%i%cRRV!0PIPl3W?bG5GMQ8<2uh zUJ9=gy0O@uBu3m}cTmZ=aH_>*K6JE@A$T4I=6(zy3rn#&#?5#kUQpP;TCqwln6e`W*rPOEK2 z&x-v_tEm$jx>6RATVNhfW6qT?wfa+`f?Dcz-X*WF#SaAf)Nxg8@sN&N`u4$sL&^N? zn1Y~xc|gM-$;gV4gV;w$letX{pEJ1I6xP%cw>;Vux3oY}T3&oHJ;=Co8mI8g{-H2< z*qIwECZz!cEMox)0`fu*5~h}*u4OpRahf?f>HN|5SZPTY5X$UL z6NP&)={3{}1aut-r$*a>xgkTrPeTJ{By3NQ-v>GMV&o>43(bmg`6};`(|vc1iWtRE zGtEJG7e=q@-*7&9`d0B>+0BdIF@n2QpKqs6jU{&xh6W0N~ekQnIz z?-dCRZ~@*T4)jE}<1C8y|mZByz{4c^UQ*>`*8QcTyF{QJbF{?wkoV4gFE)FFAJd6?u(9df{uii?n@3@h9>}RZGYW}I+ab`uQpkZBXxto zQsD+w?SNN+Oon6GOOJ*Epe7rZ$t2Co;gA~~r>Z~7EZ=+Io2fqD9F(&%*mOT z_|Ealyo{)A$|Dl!LKJut?EhKGGM@?^ZZQESD$@+Iyj^rz9L0 zmEm3Q=c&hS5S_i$!n-QH$rkIaqM7fc#dDAagQ@Ut%SS9>Jal@xmgJBN){M^#DvX$G zBO`16i;inkbSKt}r$|#lK%%J@u{k?OlSG7UJcF=wuE49>%{{;``LjL$CRS`3XL+#joeh z`ol-(pN^M*3opL|FJJQMS8p-Dz|*z(oQf8o$KN~g_Xv(3xo_{3&SwF`TVFL+T#CO- z(e_Jtelh;ui@&=@0NdbI_Z%5myX(S<{rCl~%s24&27Efj`!K*vKzkbgPQ%~%82Enx z){_9+^pOU7y%4>w#5@0l_MgDtr}6i%@LP*m;_yb`6%qyC5A;8FwC|Od(e5lj`6+y+ z;n&-Umm*3xe%<+j$Bu5sSerle*irubzy}{YIzdqHxd8uKjL&Se7{afkKx8Yv_kQu7 zBg361(ECH^c?P6?{wVe0s8odfh zS`e5v1flUqASb>z-UW!}f{3MgI6qvZ{dh&DfF1hDQz?>hnOQnCv@uE*bQjL_FP zjGZ47kKx4^@%b=bz7v0ciodtx@8#wXG0v$V!rwz`E`hdhMkhn)V3d5g0iNvoB$WsHdfbzPi*Dk%lVDGdtS zmdXP(ZUYK83dro6r&U?eqA1?fTDdoC2g$L^+*^ zHDP&*dFao_v8_d~b`()z)wNc&3rT3pUxw*!GL4X)6driApSR4tJ2dcazBn$P9A}oL z@-Oqr#H34L9(zLCs3l0#&!_X%V!5_Fz`VWkEWkQhriX2O;M|f#*RpVuyG=aG!X$8m zn0HCTA|I_3H)AEYsLqO}T8A%hC9&sW?h|MnZEsdi3oV2T$mCA! zdJGwwm4B9Gqj`_z2hm;_LQ+4q3j>{x&2r}U1P4J39@)iS{7n)L+=D8YRT{K%t5iPM zQyQ|m$W@!Afj$R%Sm#ViCDE}?l{TCUnG3@4#e3NwLyul-l+8;O(x^heu)_{ zchy-4cHz_a)Fz)XO_j7zPmb+SJ4l4joekctuO$w2!iT!lYq$Ds$YB0+ii29qSdN;n ziU5$lr+fPTr97}arHq2U&z8H+6VJA}piFtp%50TKI6DT40)bwWaav2vVb){}D{Zn5 zdQ^yRz7K$Qc`$_^bUgky%UXo0PSYT}gMrp6N4~auowNMO&`fm@kMF1l(NaoGEorE@ zR?3v@o$TyU3St4Kp?YkOf<-W?PVVa3|4}eo$z6}y-U`l??iSu0R7O=;W`5JPxkGw) zvanX#fR?2Vw-2)U9wrjH1SwAv^iv()MWj@KyH?dgxmyFdtA(#E)5;szsY>qDXW^#V z8;Vs)UzbPPyulw%UmxBbv*~@PVkM7xF#QhMd|g|1!Dj%-YA&u(pf^jhymX2`dWK zWft~dP%`vLWUduR>X2!=zL#RF#z)8jj~;7iBmKJIPYDaA*=VNl(|fxMyVNz~JGpkEnE=rjmdxUdcBt8!e$k3?Q9 zJk*4f!0KF~8WSuW>DCyDB}x-ky?OmD;~$qc<`MZSW{}#_^-AUn8s`&mq*KFJ&GS|a zR4+VU+`Kk=;4HxiHH7jYkwf=DXMRXt7daU4F}#pAWY)o^IJ>RC*qydn#q*@^FCu6GNpPfFdnD8jlTTeO@ zpc>mui=2=s3q(C}skp>>Oq7oCGB1|!>4WP^C{#Z9P$W+Bvin0XA5}I(2xnZC3(=16 z6VunS(-Ix9=GSD_2Y5-wpxbCsZE ztx5?lAKV{3@D{7VeMs})E;V1$u;raj($^aV1O;m*-`4Z}3X5G5Ds7z2AW{kv6W6*B z;BHJz2$%;_?I(*7d}SN8^5%#-2}Jt(ZLjMSn#&f?btkxlajO%(*hVdysx!3&HX=m1 z9m(K52RtK}YKx|ug_#bar4|&E%L0wh8vb(DnQ1y3QFCV6iPYH2kAht7v?3I&$Ryga z;2BkFLbT7YM98LrctUHJ%u`+{boI}GIC-7%L}Lmb_i4BNrV1tR#{mS}{Bb0ay4Z!_ zI(ahwbg7W{ot}=_|IIG6`)b&~RU$Ji@};c!`J|4n zcp(p5aOObTK`=kfIWwbz83$S_ZeFtB1q1Ch{=|QImEgLoOGb3DN3Q3uol6m$pkAHQ-9iD9$_ULIpGKUJh?ZFz=j?RkrC7 z)&hJlq=rI=HZxEIcC~GhIa9# z=slyZXQ$vDu;Oc4A>}-;dU^(Em0 zT8*3S0tN@&;M)6jN)tX78YDtQhY^^VT@f2Rs}_|3JGI~6f)7n&Q`6|N^ z;HmR6r#}X%5N&5_l`oZ@IYBC9NlcP@D#UMs9ZM|7iO@Y`v9)rHdd#9%ZW_Ho31006 z6ZXUHSc93O&@0g;+r$oy-p9liPuoG;K7tqGXs)K0JT;tEye_oeUKh?PYEyAfeBBZU z`WC_UuC<6Ebiw?M1Gi>po(zF0wZPh$B69)N;+#9v_QAQX{kTB<29%LFUEh`nOA+9o z1K=*3_wYDdc#4AnKk3jYc@G?#TJ+MHfR}Qy8GnfhdwEL8Rm3!cMwME-H&FwHK?+xe zL1=3MV6}+iI4kTp4Nt9*0p_FJ>$55R$6rzqZc5?QgEU{-W_6e_#Ih^e2}@ z|Lr@rrG43DD_VE0KG1XF<(IsF{=`L}NZ@6aqxl442eqSL(LAX5gTz#|;CPA2-dJcz z-(TodukD^4InxF%1(jdyNQHaQlH+jGTxJ3sbNfbXbtKBN;WVv}+gb;UbFoq6ONdMc z>^whnc<&MK5`A8f;Ji#v-}Y%cqG-|!Y-da~qvYVDu7t&JgRuk0+5w8r^w_7h1GX45 z97?NzdAo&(3{Wc2ij%XPiFa`H1p9!Gp*bQ0V((aADKYiXZ)1zFbBNv;Qp0HrM_9q> zI$rjnZOiRAbtCx{$Y7ia1i6V3#cZ1j2@4BK6{ASS6HZ$>B*e%qj8D%%TL9W*(V{w& z%av*pqM^jXmE-K+XeGz{0U!qD!(UbIw<0?Y(l-M2oYFP_FTZp5V#oK4tNl~PWaFZD zIwU@?NYR|*X{9`H3tqX1xy$Dd#p|FTuC(i5_R_C>p&c=Xa4wcnHxgxG6^6@6Ux^R9 zUjdujsNihoBH@m?TfTZqVw|;idw*I%>u#zew1)*}iuA8U9l2FeAB(f=DSJp7&>~6O7?lFT3`?1!)wxQ>naN`36*#Oj3Kj zN%eh-ov_V)R_M&4L@NI1)^3Ss$MpJ*97q9|DXHELatmTsK(3-4I*t@J^)7^dwU z8}xHpIJzUT-WwG$N8*+oho?q$r{NuhVIxX6MQEBeAuBkiu@c<=W^R

    *BKDB5mK?OJ;;?hpAk5*(aaG?UkQN6;4Owkd?aaq;4w#(@Z zqU7n-QIHp6FMf4YsP&?UmK`<}t%L>Toi1JbPlZUy#OKB@l)FlivIytyt#7l)GUdJ$ zej!O7$*kI`op$CZcc|OKE`nA;TOk#R^9Ra~au>gj z`aKQgk!Wh?uzdBxL*smLqEdj9&C7n)@~81xD9tM&=ESE8zhrg_pEMH~b%iK87(4?Jc3Q=@rtqqV}XNS4gc#gtPHb-R1f-A=kkQ9-Q7H zEzBwM)k6emXIz#E%&xaany?%Q;WKeOpZIWn)SHO+LB`D=;%&}-@%l&~y9ciUZTv|! zy>5?aNCD2~k369CMjp3Zu|JK6+UCABo;L^!129*FSb3V1CoO_>HS@Ali6@EcWG%CC zd3ENTS_;-qiv$I8O{j;p;0Rl+La>qKSZI2brw6&*YdbL4g+O`=*bGNv zeH3Ll{Q4-D;n?-x$Z*8#qb9E|6f*YgdabOGa_2_fPU@!OFJm5Yij?rtd^)YK^Pl^! za9{aJ!5vI9#StRG##A#)|LvG6b9HIxeuP^&Q}LG|%R$>MZfG*gK|UY-VH(;&=dea0Gank=*;CcWwNmUR53tW^kHB6WncfJqxipEghHkZj)-%*)YTYJ}uGaSpUbV(OxN{B$| z4!Gd?JyA%#Rkc2<)gY0LTpg`TlefHA z1x%{BF9XWra2%^&=HY}SkQ&E7dg#6BlbHC_9UjGg)Kss+QeZrVcLKs&JSp>K2zZC* z4v}=%M~}@--x>thlCTF(V zFsxLP&2fNWn|N1lw%H%{y=?`bXB=BA0IJ#3B{?`wcQ{Tx$pO>xEDVBqHr>$$ zK%!^YG)#`loS<<_WgbZu=fI4|EiE0)-I;^-K^=3<3&RgWIWnsvuqaYoAEjz@*wJcd zyW{*(OYw{fU?=-dm!g}DZFW%s5_^J--(5xpxY56nSiBS3V}w>^97R9OY(R^J@PGVd zC{}5m=Ah_0HOizpieF|Nn7}J0kNo;5Rbs<&c8w<73b4?)QgP6(mOm=gl+1Bl(TuL9 z5ni^+%|!{<+i*{#ZN^@F{s@Ot)z-s=c2(1_r{q--*tj$B%e9(zV4AUfQX24^8B0%$ z#QkW-fob_|rJQR-gFAx>yGqI(-C(sLmb$7VsH0vV4aO}o&R(qd%-l>zu6(j)Ud9Eu zx_L<)!A8+tg1N6ob--g>UKOHyf3!X_@ti>>aeXvdj)R1WnG)RS0z?DzqU&3{NO6Z! zW_@Jb^i4*q^--a$f*S|rGM#3EeRym*J9BYcsT$>9LJfLX3Rbduz4_JUJ9Qe z?%IF9a$hnzjxzi*S(<|)6-#!Z$Uu>@2%8=;PKx#BshoLnm(4rcdGj(64{0ek-K^y|RaK_x|CKRgD9$-BZ#}0%5ork$Ce0BnxAjbi`w+K;9D#rmn z&baJon!dAa=Tt{E88uw&K*r{*#_;ZF96PXtHh+qiRL3~H+whWrmc>`*J%202*O%qp zmQX1w{)^w1p*@c|zMB$(_Gya1agu{97(yS7#JxOZ$Z`x!q+)m4d?Or~Ogd;u*NCf- zEL@%Cxtp2^txIwcT454LuO&ICY}^1dNs@z1iXE7u6Y>?C*w@`M{vo@X=uPYdp_Tqe zZic@ie9a+plIRm@w_eoE+#6EF2|6%(mJGeN-VrB~C3uD65IZm}zY_#+6C>xq^u{fn zT>YHTUIkJ{2ecfWn(6*zDn7c zAk9I#co!y@;aIg^$-RJFxI%VXA+-gj<((u;JJN+)U@|*@(8x4N-TM>Ny;V{7$I_zV zHna#hATY;yh#s~WF7NmCcyZAV43CXb?We4`%Vwynqxr)jKnhdsh?SMQ8%2jkphtmq zNkvC!4p*wvVg-)Q9IFD9my^QrP0NzhvxM>w6m&(QLl)FBoUqZR7JpeCc0@fJvy?8L z2*>l|EXtjOjpj|aTaGv@GrA~V6PJ4+X5c^3~I?%&YbP%*R;6Hs)Ll0=48$(IYDb=AXlsl)A+hmR1~DvV(OtaIQ(^r+w8p zdzm8`6>H?HkcJp_-Q_K&lE}qg1NvnK!06_duo=lm>f*OzLwy8C-NBWa?Jq%=gHEyc zu~J!%DQCO|_GOzVcSyuywH=){ReA00`2IE8cgA0a{AjA91L%m3hcAS*kJ~Dc!*P6e zdOY6V26}LuM}C^7$&l4cGC;>)_9lo+^HL0_JDPwOOGZB&JvOR{gX2`@B~!#PvEnQ9 zKKz}#_eK3UL$=(CCs9(FvetM=ItUhpdk20S_d(XMN7F$^Bwbv9q)%+)IL>+L$+($k z<(!wPO1uN-MO8N1Mx-45iR#R@5LAl#*^Z61{ky)n(c$d&?>3b0EW9+cW}Y&Db7@oI z-D^ejNjtBMwe!~i5aFG5K)Us_3~}%^92>=}cKX-jx7eU1HO+;0^&SS{W$|b(y!*U@ zHVE&!?H2ObK|A&RvHDrc8^1kc<=es_LL)9Gpe!)F%Nt-6!ZMUOb@L2iUYQ>pt?9or{&Ky*rwrDJJCCy#e_1MW>ul;4 zAKqPVXAad7y_aK|3v*l%N8P*}j%5e7o8~1IJ_9_4$E7tsvS1$eK-MhGNnu}sg)zB% zakv3&ZTOO-7+BQumDt*W>5bz)6kg`1A4re{9rZeWyguTsc_L&7^=P`4jN%7TOH1U= zqM4i=6N5B;D2MKrIH8?Iih;IQLW>T~1&NM`HU)diif_Q(3c-VzcWQTZRuuvXzndc* zWI<2Lf$@bLNCqY&Nk~Zv=Z|oV!?6xTWTk{j1y)!UJfNPnc zKUc*u0gOy$6CcaLIIYF22&0mZ#K<}Cxg(mka=kHI)Y0qUVxgyYUrgq#lUc1y^u=|= zX*!O+78yCrr`gREUf=}C{q%`b#jxu`}N8;3K)yM-#G z@f~pjp=pT2yT*rx09xakX)64ZN^@|H^c zNnEDYTme#{=q7`iVP?}4htQdZMH#P=c7b`x)Nqj8AYsb)He5@Rjd7G|chB;_HMrwLbcHVK=Gg*GG-L(!IiH)_~UtAqR+Cco(y_J{naK@-nejl_0%I zI#=C}FyWOdK`Pun5WGgY`-qTXM1>D*ucd(*&G<-vZxOE(N6=#8o`vEy zc%g;}G+m$t@;%?DxdFC`HJsv2`(o0*1@y|8nRE{$VI*5u3pXPBlE`wv;l*0*A$MUB z-wugbxY}c4tpdDF-s2j!B)kmpE>apVdQ)8O6d(@p>M9P7;{&|21rJX|`dce+k$#o> zxFiQnW_Rc{*ULDdXk~zxrN;>Z@~l0Qt`>ed5<JgkE-H0F2FmO$@e~)TOs+QU#I3oj8z#vM^<7D2HBY+fFNM=4D(ducJRVrL9cR z!&0Ic?Z1B-cJ}+lkf?jh@5LY=eQa(#QGG~^esL^4j4R}zA{_|nUoYgK!m|9RC45z! znt;`z!Y+&+*K0VrT+hFBtf&zX4%B!m6DFsA$M1V5?bI~9aNPvFRF-xLburBlP%&Xuii=+ zh7qrogjTjmb`B)8640)EYRWkc`i(GwU z+q2J7hbqneyM4k*uN=U+;2uRVptgUvt;{C{%I)8EPHD(e_Bc2n0+l+vuH~K8o>K-c z|F+s*m&tKFi{8y7X%4coW?`wsN^P&x8IA`;%CZ@byHA|qsI89Fp3T6( z7r|(-tV`~s7kZKXNFrEr3=hB zr0zESRyzs78={e%foXUR)CPu&l*Bmwh0kG!kIiNet%|>x>!Xf{^IZH^a7kAui8+9o zDQRF{4m&DN?m`UGua7v@DOCbE?B$UM!?!#^ns&w{>Gb+&eK;|)N0}qjY7Ca;%KtUz>Flq2bA2OW(<6tj70Mkqqn-Zfby|I&P z(J_B)*~DH{g1UG-RA2x`9__(z&9oy#(|jwbn|N%#rDWm9A`7Xbs*w44C*r%^F)eHt zg}WyOk~vqk=v5H|G$#FNV9rSkZmT+yKQ=Hsh0kub2?8*wDh|#zJN)e}>g@;Y*d*Oa zAvw*(LJ*4t?d}kMYx%f>>SzwEWYWNVG3+QbFBx{Xu*DQi%IrONVGs&~itpCSIN0KR zi0&k197L%WfKg=}Y|&?dCpB`TGl_NRD9)+KRPDO=Eo9Z35G<;_8qr#O>S zoj+(vOq5-C*JL)7m`-c|sZ6YWpzbFH3kyo7cj&h!LgXB4m%E2Z%~%u>cg-6iuAMOD z*Nte&ahwB_O>*QMnD>bIQK-BF6Rbo;pb71&vCKaCXKXXTq8*r4d>{w8L#w|$9*csLD$3Qr#Hm&IEY6+zxbq}r;J{(oKqWMYGoWmc{@4_?gt8cG`D~n zxKIp3Dd_ly3gu9wTyQRXR24-kV_%-JL??@W5c0QniU7x91ZI!ofxJ>4Rh4pI^ifr0 zk&D30O;8pTXdTYEFQ*B82(5QtT8W!DNL{XvMl(|l_vMtEAa}B7JjH(Li+)-7B z89ui-d7&jD-cKRzym`rGIClLvG8~e5aMt*k!Vki|%nG-;T!^Lc886Q_PDH(fIu1hX z)6=Osj?%nz#p-8AH10Bv@^BGdBG40CdrAYO+ngOULBy)~1+)Jui06j!l^le|2Uk*+ z9F&)bhBGV1AjP3FT*(v%)6*wNanuR~YAKE_Vt~w&gsFne%{Z1hi*nfUebu~=#tzJD zBaT-NOl~6Q23K0L*u3aMj=;R6HYxyo^OZ@=%R-A^&AimE1VoL@vHzz-M9Ap4 ze7dE)s=&M~Rhr=i>L)q#;?JonPM!_H^tZE*#&QcvlP>f|4`hbn4nms4*vO5jDT(mf z&O0{(`G|uwCpNG%rFqE|aiII+nT&a9d6NTJg8b1~%uuIA zM~|eTZ3oH!5SdP&aLh53)MfqAxtWgOlv1T@=0)GcF=fTSVMmEf6RGPssEoG`#%gaz zt*+yscsUbW4%wPP10Rr`!L&U29MM@UA$&;#x5lp@5 zPbdcnTh?(v0cze$k6JNNq--$Hs5Nu|ZJGQ}crU>@RivHwUQ*{&VVoH+b9+>9hei(K8p*;H(ur~$wGx3^ zj>83ZC(Uu}69y>pb%h*cKzE2wy^v$dia)U~Oo||QwLGi}q^sE&eOMJW->s0chgIcV zm_-616~M2Mj3a5dN;xQWi!CIr_(C(+*EzW@Fy2LDFFwFq_>I$|Rm7+3t`p}t z`a_q?JP~RcRTwxggA5dEi-;!)xVQDWcdYnwx2mtY0p?XTIlin?CB z)fSk-olGjsBKnY za$mM81?D);eaYU(k#k?ZE|empz56oa1r3C=)FQOB(HEpep~aI=%VYa%OQbOs%>hQ$ z66w=vYuIGQHyPmdTMr10Um^`AOegKwuFMjt&*Dd&t}T)Dt>e^JE4t=~LM$&Tzs5z>a6efsa;H*-$B#V)>doH%U*q^&1}b1{{-W$!5Q z(;QbE!syN(rOviv$lctd-^tL#uQ+yxqjz#!?Am^T9QJ5tK>tXZcn@!(E|8<}-Y)32 z5?%`J`;zgD!n!m^lE8N9Vp4#L71%xxi*-ZYFuGs%E>M^;DQ$U%E($zo<^I^wa; znLWH!nxkf5YH5zjz)X_nAYo1yNwa297jh7vDnp$szHlG*Nn7KyGRDxHBvKff#MD7!`4iht;pn>Y2c4b~sTx76z3Z;L&LUV)8}~ zKs)2*FGRF+9Su)nVDzoy-oWUizx~*oaz``-7nYSLK`s)EOsbXxBh7s21X&KyMW4Z| zCvxZ*c?2gfIg48r?9H9P8=N{x4UnnTfXjKc~f^Fq3# zQB2U3m)hz`ZN;$LApH*B5kK)rw=@io@J5b=2`}8C;8a-U!HmQua#UED&J*T1#LISy zQ_peO@X@3>jm0|_Lm%)pNV!rD zs=(Bc)ehudPj0X}FfW-LM`>OrNpn!7YUV{BSA}twS3Tx@x)V8;CNv4R-Cs$^SIB4>Dk?LU_(j z`a}oe_2wm);%Eay?lap zfqB^;Qp8U+Gj=FHT6#3|J+$fsm_qGb1mzIJ!A&&GP>-uDfIw}yMUjqDTtHplwCT-D zLnT-}ERSRsVNJ&^kfmE@0Q_cF$9RJ*&q8!f<^bv*m{l^MwmjM?rkV`EIAazn^Soec zh0keaS;LVrFV!KqbTE}ySt}4Imuf39!eoUU6sb5vZIqWu=kRK)f7wEg+y#y!IrGvT zQpAfC%}b$fI20C`ZhR%QwE_W^hbFWSI%pHy_{i2pxdV8&%Cr!f7hXLhfH)paS@A^# z2rfTyh9eH|>QluyW4Zlx?Zg@gqncZC`|Gv|Oq4nwelZ*CVnvL)USWtl@ytb>*^3Up z#J6#fx{RzM$e6NIq;40fyDl+EkD~4(A*tz?uU=aE??0P+Ab-)L^g^IF?)-3?2LBQs z7qI~)eHq?Okc48_fZZY5H3w!?Xj`eQm~jVEXD5Wmjylbc*K>|(Irq`b9byV5brX=`>VoY)lrk@22NS=kBI<`KCFuV zq3y!t4y&5v5W8-_{8XmY{2<1U4i`cmMaEC!K1Gu5`bc#3VO3<&bj!BMGaT{g=v8Mp z&JpJ4G8_}oyw)U14tTs@sk<=6ozgL+iWs>Gpy@1At0F=;>78vSSaarr zI6>WreL#ZC*>bb;okRKg|JnN%u&Anbe*qB%h4Mx!f_Os$!6Fk9#WF)f#WY0|LGwbU ziC_i9$N*mW)DqAH%?o9kStf{|0f`Ps#!aQNyreOMFll*V7&RDy+5h)lYtO#Tp3eU~ z=Y0S3{ZI5f`D|wGz1F*K@A|Fxsyv9?P|iPqPskzWF0u(Z5D*wK=QuY9JWydT7UtYV z>UnJ9E|D@3{cs)3h6$79E+WrkF?Uft684toVv8{!hs=6oSS1HYairqiP;Rxc-=S~| z=7M=mrqj@BF2E9GyN4vj#@nLV5O9}oByY0qegKQko{x;eD8|CEyUF2dx-!r=`ycFk6hysvC5RODaVmsv3U2S+zx=>EZmf# z`^J-Gbmbc183gVCZb%t9KMvSw1J|-et={u6U@NU4R{bz{|!xTu7}PNSXN@FIix4>TNR48}~u zahvw|FEt$H7N}*#UPvuBNjS4rKg(i* z_{xP-#{6I@gdIX8c4I+H*<4Ge171WjE(e$%<}Z{S$Ucq>n?{CY?vY75%zP_(lcnCl zQUsXo+<0O;)!f%|v8r(7g2!7p7zJJ&X1Al|!r6cT7$AaV0ZfhsYp8yf1iWWC3h@-? zJ*b0ZWLU_`Y%nK>+!@Qda$qfD0q-8J1^%Q)rW(X&=M;7am*GuI3`P*H3T9fsU}VBo z;rM?VDPtA@WSCNpBeh}yuQY@sHG)I|uP=Xe2#+Ub8}tQPgH*t);*Un?A2K0cz$=$^ z9BH{Cg-`5qW0f4ZV4S%Pfa}&w$$=XHmLO9l8FjXzT#$3%z+99RGhYgs8n$zp-2fj+ z-ZWK&L7TP;KjIe!tK`6Twg|sA3s*&>_9wzSD*kKXVqgY9UvOZ|1iYf_J1)!*=%lEm z=HhhGF}p44kD__g6l90IdYW}G7LtQKYDH=-1ZcR%QfnsQ6)8E8TK0BiLCL|4MQY{5 zFLB(tgmaY55y$+>J@RKT&9HWq`$ROxO5Tsd%zjrT+M2j@Sply_C5I*Pi&&iD#jOTQ z_G(UT7J@iFq@MyU68l||;GkQ?$#H%ew- zBHU^f-O~AXa_FNudofdTuim?xIxkzQ$jEFzuhGwmIRTd0#yuf-F?rIiF z*@PTekH~u0EFlLjhEp(#D*0nk$@*TH>8I7AS;Z-09gr+Jaoo1xfF#Jqfz)szm1g+`3>A+0m6MEzLYdOxAT4Y}gsiD;NoKx)7+ct5L~o9--F@IPhw8S?E#mmzO5Prh-_S5UMzv`B!K86pU)4GS6>A>cyz%=?#fwF8!*WoOY2+T+ zA%Y5lmVxbjwH%ki@mJFIi5vE&upRT1^QF5TCl zS^66zgIICt9#it&6MoGU(29^Ti2NHFsp=8iLEE~&(r-W{$ashZc}Uo8$B_ zQ*FtUNri`i1#!or_aNd53a|-B6t=`1mM$P1U=;9Lz)6^M90%Bs8%#R>;+*5y4tqaR zTFN3-zLtwgLva6fuqNI1K$kXq=0@-qoJY;hDU2O0~~OavoxI=Ap{4bO|kEJl>Ff0s%GNMT(AYWDflONG|I*QgS6kw9C1X zc4H?XB``v&p_T@#!c7tftK+Y99M~l@2P9FjDx9L*w3`-#RpFAda60C)$1F^dk8oa$ z>xAnTCmQN#2I$AgBpkwn0CSQewY#{XV5d(c0Kqrd`;nWxqFdQ!$w6Q}H<{E3lGjjM z&~XqKfxl35ATeg#rGaY&wh6w$UXXI+Q9SdqCHV{Q$3eIuH=K-|9|x{~gNl2HKd50e zo#=kWiC!Zl4qjq*2pI*oQ$W$Va);zicB_Sv2*(_l;t`Y}9fwoHCJ}^@^W-29X0&j@ z2&&?vIEo>Rhmcr&9~Rvz_)YnhJh9OC+_h-F$ek;KM);6lK#L#+^<|l(AGh>_hZd;i z6~22pE{yGr5g~7&5Zl23Qy8euoM0oS9LM!?SW+xbIZpIy0{$YGkc04--7=jt}r8ol`;nh;&p@a`2n5OUm%r3;*a<&l_l7{nf!vV0E68T! zfF2S1-3u}m0m+TPEpY6jB*jLtk^?sY9c~Ls4(3-&+G*a4L&9Fg)EPPS1LK|uSiY&=r)^d$vOT7F=E+Gf@$f=l-r`L`yB&?K&Vhq(rod^k@rdvW8@C#}fDUdrWh5J|`Z1G86p z*5ruf;JEE6PBeN*-=ytCVhnZ*?8OwU%8b33xnsgzO#yc`1Te}fuD9Hhgi$gcVu#lZ zz=(7lIJ^TWWl9<4KUNe)5WJ9!vd0!$-O^#lT0*!9Va{=n+^pb&X@+@KUXrI4^N!2n zmjLNv*v(RF!CsYWI4El1T1SG#8V(rFFiZNQY;OJF*oARDV&wcdU{kvmT4+H_sYY5vwsHN+;-I&~>j`<)Hp>_ z`(1Ml2b&`HFEt!8QB)bRI77f*EO_K2dtv@U$$`{LJEIf@62*yT?RNzSrf?vcA0P)9 z)FT&T>I(NF*2By3gJiDnxEU)#MG%tv+7zq`>6JPNh?N`&2q>(xsN}%=hMWU6!y6(Z zwY+^@kn~`L#f8+S~=8}g&gRC#BdZ*l0Dmx!lj^jIIcH#keK@lUnhI9|l|hd~MehI+k>K}j~eZ=(XLAx7Nv zz`jS7&q1LM3S*&gF%<5F=Ut@r_o4Nn@FM)r+{i31eV7}pd8CA4a5J>Si`CHTA!yYJ z=<$VTwOh(!$?_zl))RJx}gI_D*jd8)QPM1|M zn#y3H)C-zwhF`C^!C*v=ggy*_k~g7bG?eUsopTRb@@*-Hdeh+lIG7w?s2it44fHbZ z@W~?&C<*HitA8r=DFzza0aZr9k0;@IP5bZg*Naec3H~y`^OrBd(uA>MmcoxEd*RoK z@ISs)2H#Y}b2>B{2joW?kK@In6pE(7pTY3IFZ75Xm;3NCH!e@Wt23cW9IU(W$#NsC z0%ahK=&$fsIFtlH30X6^IbisLe)EOFLGqiSGrln4YM@IEon*#A$Nmh%j*TT&o6o{{ z`~=m&*f3sD%_(@cW!{6oR>S|(;g=2Y%K)snA9QUZwEQ3%D$IrX%h?1=+6PuzPbgUl zCAb`po+Kh9_~kpx_bQs*R`evvy8`gR#RO$8@taa#;DhMbT2%nt~f(Fu|;}GK;Tp!@0HPGq` zs301C#81oH>fzTVQ0+eW^(;J(#X0K(6eI!#cXF^}eW7EpYJy;;s9-xWFGGnh&{nD( zkH(s~mpq{eT30THB0m_wG^pv;DX7v5=!$|y(+9wu!H3Lo_z`ER$OwxYGlA*k*JsO|$OJrB=rIA@R4Kxr7vQw_ZD z20SSex}=0?5dj08|kPEZofb1tHK_VB|S};rxOJmYG+@ zH}s(54CKICOC~e;1_hBfTKTW|qo#9L7&| zM;!T&3Dv&)^Mg?qD=Ju~`Iy<=*$LlnU@-(Ge?3^M3<8?Pm*FhQl zcq8Ta=6gZ9>-&!HYdv234u7|dWQPz22I=6FjEBjrK7t(k(2XWiTEN$le5!KsRj-~~ z0IaeMwsShNE(2lMj?+a43Oc34{A)<=_~NLB-v4nH49{ z`@rfJ*h$IheQ-nH6)AZ5@i(O+L3YZm4=gT_vNNm&F7(V-+$xi<;GoqgSC`6>pl50x zgkUW^b1AT-w!16SXRL@N9Q!PiBgIL%lvBeL;0w?PW}rO1YUESEl&4FJMY<*2NNN1$ zl+*j*DX!!*v5N*Vj`k0ci<7WN#*?Cj3(Ep|6hIl~9@iMZ3ZS?VJj+NeLKKCA(JVTL zaa?H4%pKucxH zj_wM&@&&m_gp?VHW=SM|qQ!zN?AXphuD3xJti!&7H{2|QpDBew#|7hgim?^WQw`0XWKs(m*2}i9`Cio~b;T{BTs0bDzTmB0+#3-^usoYDPz65*3 z&S<&}g9cidop{*DIcoCJyKr=Qv=%AdXY9yb`zwVI%rH_bTF_#J5L*k#KrJbRklF)C zt@OeIBhOUA_jFkxwLAE+l2Q7==tA`N%P(}KmNyIV;)vvrKO9{+_AH6j!&qi0rGfcb*f3HXOc^s{ z!I(35?UO~#j`Eh%0=*9|O+J%Nu4ty|KqG5tK;IUbb>&NcLvqXvkHnF^VCYyY5ypZ& zXEcg}#_%Zyo0>{ORTds^uhIVWzSjAf^2?=2mc|Ns)<5Tb(bDFD@AOB$ZG{}O! zvK`8B8l{(g#w<{I9oLSf7zWpr7`B3Yja%WS_+7Zw)(PojMBbpL(FKZ_TjsT3@z3zJ zQ-crOfkm(lUJeo+x;WL82^!O7W*b}h7Vp5`=648qo!JgA0QGprimW@$thca7i-9Jk zD6byh@hDhrSc}x}OJznaRf-z_DshRN8wn#u1OmqlR%j+1Zlo6Ri%O)DrG3S2hrlDb ztnHP;O0juBbVa&r;f-I7+1y$c4VsdjRvQdAFB&#uq+C6CK^kMB zDs+kg#%qRP!~wi;blD4%+zkjOJK7a$v2a0R1YY*SVKWBFjV^EoCP(-hzZMt_ssf{X zL5jDOqQ#8Vvf`IWnV|)0nY*|HWYE2Ut&+={z%ZbhE@@$fIC2GWI5HNjC6v%V+|*_W zCQ>*XLIl%j-UxP|!9X69Ck-(5qiEJQp zq^`us5MP2pL@yb3BqUTb-l$ZR+9Cs~%sg(o#Q;Y6HAe`y;|PGs5s3o1uPr8vGm8U; z)cyeU)$rU`*c6Fu04&oi6km=gS)5zNS`mwpOZSc=*Lq)i<)Mw46eW1{iEI$lWwtDl zz$k=EgdgS_gfVgqMjRqcz+fze2*YG?V|iOD;S`$Ey%S>w42 zbU=kT3~1TQ9VKkBSViL0kOUet);Q*de8+ubK&m%TrkP0I01l5ne#^>fLa;~R#BB_b zsR-J21IaEf%;Ul(g6meK48iedqsK7$7O0Iw8Ke|sLaky2N8$($K<0{;1+5iFw}OuZ zCLUVWml)TsQ~)E!tmTz!G&OZ*Wm@%hk9*rsu#BSDj1*-XL5} zbf`gx&jBtmf00VVaE?#}!z;g}lhy1BGjK>odf3XHb7JCvEt_3?w0$x5p37JJ+ zUL@z*Vi#KgB7$0UHI@tqvb?*rQCa-rD5aOBQ&n$X5su4POZbJ?a$q~WfLFz))swb! ztyV^^j?^yTsWk{`P_kav+z8?<4uGjs%L5CfHW6*;<=Bfr%K>ZmD2E^Av>YJd1@3)| zb#P(ljiXG(>VfgZ5_wWJN^ge14VzIc(ky>7Bpxhy21tw5B9@1>@NTq%Y$V(OvvkKbzuZQ(Ap_ffEjldesdEg)5K3~0wTdv%&2{M%6MoQxtylk#9pm%Ga1!2)) z+B8BOXOg8gz#-%>l9C#k`>r0%kdjeG{=&3z@8Y=dVaQZ``XG*QZ0QGIUg{y7 zEM`Bg2%(fH)`YKAG6#5o$Y1`0)Fo!>X>sZjtc9nKuSUM-4SgzV^w9KLa34xxRtpygmwmq>bzjfqp2xN=4u#yFX!13en6XDz3s z#cFo{!Ps5kP!KykV&@jT)zGh*I&Nk})iq*PFFEy*$x;)>1#97%jT86Ck06f!T?-4> z?L9_ zW+_Ur9hARV0^W!KkvT{&R$^BsF@wpmuy|W*O+ zq-awU*A`e*W(dYi#bH7)QXLh$B2<_y(E@`pX*rM<(fEt?K6K;=gNc;cuP}>5%YoZO zYGEhN&4T04MjcU8+{G_jy46)l78s0@zwHynnh&?xm^c|G4f9A;)F&kz#55?Z0e~5U zX%uZp9DgcNvZUo;bSTb{ar{#A9ElLqsU$tg|)zDVbEQH8z5uK^&!H{ zU(996>qrx{R3OMxA{;j3VoDY=JKls7H=tC@fjz>3Wh_K<3WATYmK4djFlH)_FDZ$P z1&d;a#NClOVxeM_mIG#5EP#>5LP2WFp$^89mSgKcs17!@nSeJ`bdM!wkR}}xoA5-+ zv2yO=CXkU%3j95A$?zt;H5NpsXu@lO>(;<+gdi^IGV&9h9LO422D3{z&pcbqv816E z1OfwU1sducOB(7Z=}1u8RP6gWy3%WIjYul*)Ucj2fl*#CU%5!Nhbt^!4@s}F;3m)T zaXE0kWs0~*{s2Vw{b!&|EwBnqA;O@R3&Ky0(hy;|s89lv6AjHvmN^{?<9(DK9+FwS z0xbu$BapzzX*qz}fongJ9}hM_7_J3pVLRpl!iZii82YRhiLJRoAR)qVVM-BN_(hr_$aDt4a#71T4?wd@j7x+2Rm4o- zw@`kQ(Kp!GRF-rciIxH%^KKlt5+-tEE2rR44r;Cj`#Rn#Rm5j;eHUKX09ojAjV1Au4Zm44LQc#n@kharfN@Tj11GvoMp61V>;6w zscdgn2X${NVALf+)7qLD=36GF0e*kU7z$YEoXgH`JE!dQ+*vg0;wZmS$4A{iJ*&h$ zFylr={e;ano{k6nGj5n3tQ|uqY)mQB zl}-mHPtMF3>^|v*&Fg#T&A0WmpV|Ash{>DoXwvhWQ+wNbF5K>WpfKac3!5E0 zeGU}nN17g!&o7_+L&kphNfS43?A^ojwLb^WeCEI#ldVEWXS_b>?1arJy=^?Z%_Rx$hsgG%h8Du+o#KKLkdGB_g`%~xZZ`rJ}v2wK= zlC~#c+lTucW+s>01iEUPI;Gpi2bR?5-)0|Yer+c#3XfRCy@PXaZTcpB`Vw6{S4a7d z_EhL4Ru+CVoBP7b)kzos&pTsbI-p=xh`1oRd~rhyjCkSo_R@OtDpw!SG-s>(ftEk{ zCJ33_Tl;d3E%e+Sv@2j#uTk4a%^J04(PxX6EnK$fx7K2-r-sG{rU&90@Q4pAt?%X< zs*6u8?-l4cDg+<=8j1$lzTvs3UryfXsdHO~UeAOg9LJ-ue(@P)${eYWtoGgHgXm7F_st~tS` z`X}r3%bDd+bCY$tb9`}0y{)USES+n3Tn^wYPE&Eft3^%Kh3r05E!9pdXsb?3ic!m zz996hppzedQ~U)Xnw|WVa#D%79}a;@L5oYLwHjsj|D~6l1C!|NN9tN^)A@hOdOk=k z_l*44-=_Lg!!ju#yBYc)+>(#OQRTpHH{e@Y{RFebjZw4VIEu6$9#Rr*TtEW!f#Pv$hSufR`~ z4YGe*h42NMrqjp;mt2~#u}k{8Df8#di*3zr-4;GdJ2fl&iMz-G#>9v3vo{f9YB-&; z!2N97968XISNUTz6^W)71)U&2<6eO41 z1&-Im6kc`2pL*%TVMfMlnyk{D=qqWX&(l|$rd)M}QR6?E`yBa%)bimLv9YTB>%pz4cZ}z2{Il4)m0zgiO-D(N_?CI zM4E^?PNyH~HvJ@gtNnf3o8QXs0iSUWuIeG_Hn1rjTw$T7mOBTY)->6sm-T_A2W1&I zkz3oQ`^GEqZ`c9XC$q0a(?gK|qCZ7G6(>hkp^^-h7t7s%-+EOa?q3%`>>dj9c+b;Awhck<86 zU-#pyb-6Uy^bskf3m{0>Vv}CBtx?!8)OLa#f z?&^7ZoN;~1jb8Kot2a;2>L2U$;g;j!qZ_ns>8{M>NWYs7ca*w&(JS^vzt1GTxXkff z=W|2P^*$HAbNSAGJLm08P4?umJaXDBCfS~Q2_Yn1U z^Tfdz$^k+9D_Aqc2x^~rVRLi)D5sf$lbZ&eUDsRipkS=p_tebo6!_H1 zg)=`KQXM_dxhi$iy#ukEvRBktrLX(cvjYZpz`za|$YZvDEew2^Rt|UAMJ6N)eE7Vf zte#m;?`YkT5daL@4-mRobC_KIcqTBU9J#f_e~tkpmp4WoX&rb&_6Yp#jO@i1kez=Z za=P^Ze@vHNxCaATJGqZuc0atELT3^elxw6HfPf;&Cj=gbk^7Gb!NO6_0or)w zcd271F|rtVRYeciMtc4W0a};zvTqI{z-pxDKjJ|GrJ{BI-o7l}izDYh4;jmzJk4RU zljQt2eX{T{R{-CVE6}mkrV;Q9>x}*#GdI`U z1QA=Z2>3O9vb0VJ<#Gx5C1rV!B21rCgh@AmbD(3zJaIv3{n%IqfJPVZqSu|~^{#$% zTGr#S%Iyxh;g2^Qe3^iMf+sn0c*M$VwRNuzHG?`Sy;pZFt#1T@7szo$P%6Mnqa%Qj zUVnoG#s1-^OhD`)x&85lWz+OLj@v={&ldV0ndB-&mkR*)Sh*@SO?Iwn!_=atbuBB% zC0MD6nLCfK+w?R5gkaWzj>!r5EvZ2854{4lb+b9^k-s{t&tC7*4Xz`cql(_Fs5ZEb zGv=z6-2m{n^G5WF@5X$`j2mor7c6dsA#pn3uNMgaSSes~SuYg&Rjhd)I3N%Itlu3+ zg?_jddUEj3_RbtC^s}Fdw;+%N68L9-rGW_lsOS$NFe?yTxCXHv2meqC)&t;Q$*dj+ zp5QsZjps{n0e)h#mD6z)`-$KmUVmDXc8Z06R2+DkNjBQq8OQ$*Nda|{fsX3tCnH~cQk~%$ z`RfR^=ZMI6J=AB0M>_o(dAi__Ai%`d>1AQ<6>;BJWPe&w@NUKBDHY8w6?Qu9_Buv8 zq?&QJ4eTE8GG6QH7W84w*-E>w8@9iwf85z{XMAC9)oQ#N19ud> zSe5v&VcHV?z2OPhJ}7o;P!+#Y*Er5K=h%ck`Y~@C>W{Yl{EE?KxbjeD(4Y#{%Ict^ zDwS=Qco*GpMltxP^Xkp(mu&J`5j^jwieKlfve7-2-f76iT|=h)4x%#@7jkkqpOcO# z<4Z0dg0dq)k+x44S^!c;Dl}lf(Z1M)iX6$`cwI0Ryw{EU0tJP^)u$)gW7XQPJBtcH z5{Rn?#3sMGnZ%JiO^fNlAr=?9a*{_wKZmS*gY3ca*u>QG`-FFZl#r9P1(w!#I!;7$ z6Y<`d)ibN9+wJQ08$!Su)2mNBCMpQk#c!oDllhJUNhMqVO)52pm&9FQg`l_n z`X0&oLsn#zH+7^gejpJU`J%Xxlf1b+GXq6;VZbP0I)nw^&t_$M^H)<$1lrZhS@58c6T>DMrfM8A#!tguuiY`vO#enC+W+j-G_p1 zT?Jo|a(43HaTI+)T3A6RUnt$=`cYg`-wYD7e>R$*8;0@G3*UOXw7!|19303ZaLeEO zd4lYs$pG*O44%qfW>~2lD>mW2^iTeSm)DV#^PL5nk`3?tVVk~ge(v>OwEKoQPYejr zY9|ueDUk{02MDExAP2-7GeSe3pLu~H`xHlor+dOBpO8P4;=;G)q5D4R3va(r_IhL>h0_>tu=(wnlnv?1+Ai9HE`nOBo zPh0_@Q4}9fSk`078#@1;|6ICbSb?(0x6*djg(V4_ejqGhUAgvfiAhe$;?!n}ojvU( z0#0cD6cwDYFLD^ygdh#?+h!j!$SO{*+ja>YPi03!cxdCAw)-xT^`XK{1lD5aUIes> zKjq-fL4f?y4%Tzx!BCVOo8V&1+)tbYxb$XK66`Ai^c)}SZ+eL$KGd8g*LDeXtaX{E zt9p5AR@d0ZZCk$Bb65ZL0U|fkj}o-##(qqvpAcpGN${2$j&VO%&vN4x509wZX8(;@*U3upmB zD$7$JYc%J86YTxhYntK+ZWc)m-Qrz*yojLB7ZpcB&{t_||L(y5f8~Y-+dqT)<}2s- zO1g7LJ;a1J8jY!189V8K=sIgmkya!#{@$HdPX6lZQ#!W)iGj7;DMk^){PRWjuAuR4k&I+ zOE6a+XWVFYx}`kwJo7(=9shS~kX^>dZ2u2c$Sz4I$JYh_+$-ts*t)3CdnLIA)TJf* zmDI-$URPch?B6SC;L~+c4!x2>ee2R{dnToL*Bv_6GwHae4d~lL0Aw3qKI61*Xxr

    VXcM6%C`J?}q- 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

    #Yi7;jnGy#F| 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%0D2!?Z z()$hg&S)v-KA>#>#(GjoJFJ-%8L_zJraeuz%e~}!J`R$4&DMz?b5>QYoaU)qbr@>14Fu>gL z;wScrTeSBjg1|soO*pC#Ka;Qp{2z1k;ZtkiVhJ|(b|rMENS!W;K7v;P6DYju0e??& zk+JQ6xGC9;bC}2@TjvJr+Mx{vGZr6ItPK8^F@Zgk2x(K17_4X^!m9A~fzjLk++4$T zWAxM+QrNYe0y<-`ilhs;^os6?Rb+GlFLA^2txq*=X;b@3sw4Rc(waGHElbdcoM2Vr z@h8?o(u1bMc?_idAT8L(4{wi0j@3(S_$0(izJJ9p;u$|NTS-z2qgPy?frE4c(&AV$ zg2Q$J9nE6~gL#!$Et7cz(m3hV^&0lA#!|{YAJerSo98Y!+;9vjk#$`rNT;C$I`NAw zjv>!Bv*@DN-hRfNV|dh9zIZL}>OKel)`9_uNA9J(`{cbj5Nu9s7eA$vOz2e4~NhYF{0p?^7!a?t4iTaw=aNmou z+$~0y7?{NN^fO3XMXUAicMj#6h^$BNlTH35!HsLyh!DX86h(B0@X>;bKTc!fev6N@Tkd3zFOPAvb_7=CJM#th-x-kOuGYWWjd+No!+#|CtlT8~!6> zF5&45*t-&4^ZQO-_Z95+fL^NOE<>2aXBSX*qwx<1f5Wf7UASM;v{2z&X z80^^JEGHI(BX=VJ6tf5|*39Q-1KpD7sZN%Tsl;PSnY>t&6Ps^>jBSD($(*(Z(%ZeC z_>~REKm70nt@3^-HyU>H?WW``9R5Z#+HJn zyBPY^J1UZIRb2Dk{GErG8q7vs&98286L?J0@6yhxZ~rq+RJ`>BhtZ?j4@hBS+pj?q z#e4icvPXef{P0_7`SoBNbbZM`l(HWxcxpvl-Z{q9iy?I4Chu6JqS8N6i;Dg5`?CZO zcoTjW|Fgb4I}pp|D?VJphgpn8^iSd;HYCsB?%@nl6A@Y%iUe)E=G?2#Q?X(V5iv`LyUs<~4>j%RmcN(2t(fB`$yw4XbHVHB`5?xGWwE`&T?xk2Kj*+iRcv=Z9VaM3mq z0ki9M`)%Q@Q$13?R?KLxh1@6^A*QEUMp!Z#n;%j=%KS;98GjsG^lt6`FVJO2LCc=7 zRC@^fl0=xPq43z3d??{Ay(NX_0w+`1fBAccb2vrm_G4s3A*d2iFaZhO@Z7^W-ND$xIXE1jM}#CLd?hhR@WUMTzXL4KjcvZ5hGvNVYYn6B2{oR>Y0U;;k;=b_ zMOZ1+ZX}jyb-fvo*qRt|5SNVgsG)^oA?Cp33xDD+Yte>D)&t5e}@-# zs43M1>jnBm=GahDa8o@Z%O=#f_gWyH@dOt}hsm3R9W33oLUCH?Q2^=FGsw3$MTyt4 z-|UTEGy%P+0CIQ+B_KyXb<$5F!y>TT6a~O>Zj#lKa`#wi%Ck!U+Uc|-P$hU!5SpA3 zabq;VVbg0oCuGA;79;vv1~4W>5|#cd}3_q_1Xgo|mNT``D%P`8$|_)n#C97}yl91JVQ;VV3M_L@Nn%kTe z?ZF2x@Fs4hJ_0$HsuA2ZNsN{-4s3}wI3E=dY2rJPjp4n2Wek=qiyP@~cng@yw&iif z6H(^XY2^Qd3OQ&Od5>9WbW?eIeVEA4J?l8P4XlpFEvL~$K&_8-Mm6R&21;HAi4vi4 z2BUOQb<_~Jde&sPvYrm5^|j+>6XO|xwe!Jn74Y(kfR}TQH6j}m>;h{167A?n(RGgJ zW{&D&uAN*`Ln(l6wD}l=@eX@YFFA~fmFQ;}gG;3SylxEcTl1D-4E}n&40`U7bX`?R zr?N3PH*R7NzyLG-!Zxwk;rvQrPlv(hB*9yiVi~}By#Qx_#>^4QE?1=VOjFM5Pb^6W zA2#8n7~Z;IH;|)j$Et+>0yqCB4A+wL07{%T*@7qd(%Kg66^R=q1tde&bxx;MXKzsf z*7D8|cqdp|3TkX0NY-f84Jz%-`p`t;80(r@O3hBx`PJ zF+3PUbm|s%g5tc-&F0abJKONuEt4 z(2oiLz#&+|ZY@EZN_8gldgT~)i`kl&Y767b?3wK1k0C<}FI~a~?32A2f{t_6C4W<7 zgavpw?Kf@?T_Zk61mV{(F4cN)eE{_lKa38F}h*2A_YSUY6X>;TR8^42!*u+sN^z4Xy&97?ZSkWR@0Yt$!HqruH`*+P zU8M?EGv~y>@A@+^A_kLSyPljj<>!DIyvz~0OJ@(Xka$y3N;^T>!!HLw2b3~ZJ&(VGA$(n@kdr2Juvp|E^uQeSkAy|4&;_J; z38&BXXVH=Ra$cG__lgw%BHUM1j<9vU{oww4PE}x{JpU-yxL$V7cTLa}D3c1+zsK;T z6jGiYI)Zq09&uI@Ip4P#fzR@|cgpxY==oF_aIOF(io02#F) zzMA%T-iYbf|FlcHtG`Mnqx~}4XCC|Xdm#GV)ODSYTC@^Q{1j;_p`=8rCI9T#pT5IC zabh0=G&rID_F+iP*tNvB#6K1x`VAxwV;Ln_UqTxI8uGyQ;*X5si_Umr%r>DJJ3Pqt zQ&n7QD*ac5dyC3d+xc?*0l+fI*zQjjN;Jg>W_|CHBKE8pdhJbAzu+7ZK6M-oJfwte<5vz|H^gU}_ zi@W!;m_IRFN(0WomvcSk8XfngDG*>A zZlhHj{3_8;tH1UDR8NPV246!Bc4#-Sb?sObUa6fPl;g@ui=&_|m;4)xHIK}kyv0b3 zTfYe)TwgiW?`u%Q^fxUMqR@J6`%!LrEP7KIErG+iSNLH(PZr>irdsb#gPbnBmI=BnImDMCU=4@4L1L(ya553Y*PvQZ zZE)THEUsu3qIoTkYvUz`M6^@{1X0RiYdO$`DYTcK7tF77ABvJA2rd7q_fg!)MC`9{ zj`-W~g4D$wHECMN7M5&8l@P@v#eE!6r16@$Cg=%aT0&XP62W{6HZfvBNCxW_dnI6) z99*he58jl2jV}lXU-}0QQvFO4l!1#sxTilHP+j`46%-I>@rMQjGMq(C=P&R&zG=yqCwL(2NU^(U2d zTyFi$?^|&l;p)WoPrfz0|LD=KrDW(j26a*8SGMV17wP2A5u`WF)Dp@;SKBSXE@o*h z2)Q5Y1yFWr(IklJEg8l+j=#Eg3FDWV z4X6cYya#ktpZ!{gBVYW0FU=-=k!O8`C(1&E0Ed0xd=%bM9iDQKrkfCCnuCeioP;53 zTqZLpis>mX0}S}QJr$KsaLg5E4-1;CJG~7q^Qsjtm({!$<*E8Fo!C_siRUdg97=T# z*fa@H>1X7|*(#N$3{{sL;T4XTAXqPiB(>4Qo8fSQo-gsU9GOK_1F;9S3!H%HqnyYt zo(J#jhvfoP9{)f*ErvT6yw($zG=amW!u^hZ0T39{LG z07*C(axmQ-nrjYHk^1%4vyndq)V?@ti zL;rP%Ut7i=+{EKDiD6ve%Zy!C#JjrBQbf#{$Q=_K&YeOR=^Rw+O{`Ti4^zISo#;y2 z-^%RRn-8?u1Hx`}Gc;N9lFcGQOIg>L%o&%bM|h=jPC(7W&g@fWTI59Ts=I50cfK@WUbAewOF%PzdSuz?x67RF*@v$0^zn>Zt{c5~u^HyE z=U4LOQ=T=O)tSIb{$DcxX(`IFd;iYpME<}G`x`F9ls|?ke{4^b2MQ3aX`eUbs>aoT zt0q@nP@~D+=uy`}8ZlBd-*pL8aOJTrp%!LI{1Wth31-Y=C#l+&Xi#oO!hS+34$?26 zge3@U#F0FC#h@?+`|XjCF%*u$kZUz3^$4#}ri2~8w2UKJ2HQQzroYDz2S`$|M$3>A zKYo$QpvE!=fW7$G7zT9!;(m+l7cj;$j%2?h?zD;m!_GM&0#TP$@-DxuWC~_>Y$pPv zD@Rocj5^M@cXt9uliG8L*VZh#r-w*SJxcsAfc*(hs^U4&Hpim@@#XB9i^y5Cr%5XV zq67ve)P@7hVyy_#zj2N*^-REFsl@6S@*c4M42yLTlk|^#)xB%?MrktaIbfZXLTb*n zkjsN>3Rf3#s*OS4ZHoe&xSU`#4#BWJ{Uwenb5x3l$Uqc;o9tn4j%OM(Fy$Y-7{=25 zgmbhdd-E2f`w)yFo5jcM_dg+!WN#)ZWiJBwyO;mB)5WO5@IU3wzKBt?C0LY#-d7@+ z!~y{XXw|gxzz_=%pU)iP#>bQeaFR4j@ZTz^&kZJvTl>X&q*^gLMl!GGsFnM(&(6!?=Qmsf+GY<{TTxIlmW|nX#*XLYGtyrn| z*|?9`b&34F%}{aRpGZOd&-xEeiM+w^UO8^!9T9!?bFRl+v0M*&!%c2FXw0`gAJpWT z4dTXYxbGDCQgB~zv^31^G>p_}0T~=n8p4Oq+%S-6Z!s1ue3KWlEhT>UJnE z{}%`J6$dn*=b8u@rU-a-pG5haW7eYjpys;VxWYn)@@P$LXnD_ACVgt#Z{Cu(nJ+|i zh{s~F?uF4(qN1{B=4)gMN9A*Z*3kOWjTMnZ;pW7THMs^*ABf8UCu!2yiE*AZEwOZVm?9$%}J#L|}3 zb`GYon+_X3<`6w%KUx7#^)&}+n1u1`_ z4jO@Tdyf zuNU4U@2yvfqn%B|`Jw$94Oo{0NJPiWlui`ce%*Ol(Cha7VY-gp%c;>kp^@{l@Yn3y zO}$0R@mjbq-4{oxARsZft%87;)^L;+_h@|V0vyDAr&jfK&-Y*H<2B`0~Q{J);k1xwC==? zKh16*$$xJ1zU>^>u!!)5OL8;{5jm6$Y+bv2gJa%$J2(FX zJw&Av1qV)baEGK_h*`OWGJKeVW;wsZgjb^wOa=y26wJ1yATzbJ2{&+*#?La@gik^& zDL6%HF}>)b2V6psLYqyr62{sTic)r>O8$Hv~t35}d9rxVq5BDhhcy`Cg% z0EeCdI&NeJ4qN0+WIF%AEQu}|!->daPA{403@*XPg^Z=GCtZPe6J_zI= z?{N=aJXJftFX3Z;Qh4xVIe#qMXS_BM6tE7jHjt+hNxqNgSIgnKlTnYl@ns{P0DKi+ zc9<{04X4fLmuLCH2teq9lQa^4%?E;0i?M3MFF0$SXsp)=V~7U7ave{2lCmS*HKf6W z+cTWPW}?DskwAnWWCp#*o|JRm82e>U8v3PFE;ZwZTGpG27*!>zy~(CQ+sg4G5qLH=%`{YnwD z-#-I1nvW&(HXqbR-<{YHw+m4W;4z7Tzwcm(U-5Kc;!v|_Pv62mEZhj9x~mz5%m~K! zB-V9P9eWSrMWgz_iE>>5bmNh|-y?!vK#L2k=rb+iD1N`RAkeJ9%T}N-_g#Bma3FyV z>p1sH?xdA@HHVL&1jP(vrc!N)6*XlO5W^5Kr7x=}3=sXpEGIJ8K4ksfS?)onVQ&}V zh<$6>`#Zosfn!wl9XS!pLivvtE*i3a6?Yq4CSM}!^9Eos@!_{D$LlP3J(hz5tOXzV zpc@&mVRNh(l${hK+;=EyxvQNPa#UoJ6CoQ`@u1|UjbNa6farTL!YCg98w1JX@iEAz zQ37(B#YF4cpATF2DKRPU5R>x$3diQq@ZZ?}$FSh1ehvNXpqHmSn$3 z(T?Yww!dS%1TknF9V!xNtGIeuz?rOcJ>LEvhifybFIxse*wK(+*z&mM#QJKz;GoL` zhV~m|+cSxE>daVwTK=WqXc!zJ3OZ^SrrP+LLVwUfMnHTOIYOF5c2G~vKWag{>?ua* z59R;Nd8Re&cej(K2aIb0<7&=AI3MD1(5}q`lLevknEq#$e0#~ypq*C1%#0fL>NDjt zer`yJsk-4}qFr}ZTFgTf1dYdJ23_WripL!46t`%ooO(HUCe%<1>`b{Wd|V4R+*ZIk zji_Dd>wFGe$@z50faiXvT>?BW*%BZXSd9RwU3S1s`L@7J4%LB~CR77vDp(54ltYc? z1}j#(3{4^nraLf0;{od`5mKmo19A`H+Q?Nbv1D+<_!)@M(uK9`1N4-ARpog<(;dkk z5+h^GLRM`w+peuG-cd>N($M?nUi{7dMx0z=EHn8}5lnaoR1M?Tm?dpz?3UWLcqC`S zvx=6*9WarSec+}7WucD3ouF+i)FL;Y@Ek4D;gM|l2KL!|kymEiNeeza4$~cUALT+F zL+<{O$CWVB1?WUdT-0Lq4RP@^VEtU?XsBybL_ar3>4@Xo5_g(A2WQ&wLC6xOQBm6O ze@AhgGbT3^JrAZ+3<@`4RMvIDfAB))5WSW!q{NON%R_7cjW%r-fUzD#deB}=V7HPN z84O6$@h9^H>YREKd%vQ&%g|Xg*lYFH#lq$T)`d}ssoD_=-Y+KLXfbB#VyU)6vk_Ho zXU9xVEy>?Yi-vMg`*Tp;IH;i2d6J>>jhxCaSRvsSatao5d2mhPq~^{Nn_45E$7NXF zCMcB*UtY`5ueD=hCg7>D1~QmTL7U}q2R0bw{%%iq(!*PV@ zEvO{8(?0~E>dTxZd1)Z1Q3<17z-U$AuhhiQO9sG z0^T`>j3yK`e}CSAlIhux9Etfn8XU!C#seN(*-MzJ{7eUAztNX>dpC?sOD`{j-_%aN zgr=ISBJ+)t>^aK#RsTg&FJByFeTB^)=Dii&gn~PLPkXu*VV#CfEL_^J8T14MEam|2 z}1Y*J4~))+ZT z7)vNAc`2S?3{)p~v2yda(rYD==PGRirvHxeks`RE2U^i1LKrJqhL3pf0Vckd_i5p3 zt!vK-;LL3WGrHp4X27}|&~XTtWEB^4?d7@yeRnU0p0{kZT1jaw^jb-EIh`Int7$(L zu`|=QW0RfZC3D!)Te*C>HWo{$5p|OF_^l@)RsldhU?^6=(_l@!8J9D_&ZPAMw=;iMTC!2u%SMX6>UOB8j=mv)}PY&ZdTmk~Vg5gd=%k9qkilbLg z9z35dDE$OxV&XOTU_#`Rb!ueCuhn(`J0kcF>+ z8(LTvuQQ#VPUYA9SC+qe|A(U#!LOdXu~B(Ocwzsu^&IbC|EOVZ4T>c#o(gc(nLmq3DjAaU*z7k(+qb7!(i2_Vis0u?uM?dAI7N1%(eYclf1zvMsR*F zL$D#l1P1v~pSTJmUh4jb7lyXyrzGsL}X|TE$m_xTapYY9o1R>Pu zv{@aYe-46s=FrZ({fI}N%#}<-z=HHZ8gZ6mxYO2#@-+>RSfWxCe z%O>2A=GR*#iI-(u%f9F%8NM4}qF)WjT>H#q59+vKpE|fn>mqzn-b~q_oG(FbM$BDK zY(0nNBELS&qo(QNR2{(Ei2hV`!BmurNQ44q=cIONY5@kAidXX;3jg&&9}&xD9G4x} z96hh8nmBvE;YG87b(iz9YvLvy$9aCtwz%|^L!g?yFy3Guc$>*&@Hd9Pdx9E5&vC=o zZOE-2)>bR9ZArd|KSEDWNZ6ReY1F}z6jF51VebVK9vs-nIk6J?7(>0)4C+$`rF;@V zfP7!>r;(eMFDJ^8B6&)vCn-t*#|} ztMtKOHag_Xo?|izEpiExBq^8zb*30DPMik&?wdAYBMf5$kJQ4|h(*8!lh9r#-&V0B zU_Xt};$BHlT4g|u|KYrwP^gnBHv6Uf@W}VGm3hum4 zP(<|9A(BBlrRjimm8rM14G!;=Wc+Pis7=>XO0Ya4hT){Mxa5CzT`bfKv!oucwe%T?hlc1LWLpJ{8N;%WPUZ4oBX_H4U+xS*IkE%|BSjt0!Ww;smavD} zv|x$rAe4z%9Cj271=uM(!fXUaO=yxC-Pq`8bX!8lIG7c(l-(8VB#z#TwVm7MG$VG| z3i7>cmj-lijupik?G7>P3o-XH>MtfSoz9Hf4sLLcZ8eJ3Il$o1{aj97=GH<9N$H`Q zJ#|OlZA|Ab2uBFl)Cn18;vG8-koz0QG!(Y$1E)Rx=SaM0&4#d9$?rDXfaVe;^XQ{s z;SOw(ZFUC+C;u#Iy_yYJ88duLa|!`;)zM?z-3dr(#kkk=z{EKm=p25m1))pvoqg{< z&_l)cSMk@DzATT4c_zOvEOKV31oQ>Ey>O5MM<$-HyS%` z|Gz}Xrt3TPq}X|^A+RQ;NP^X zR_6RDXoh*BN`NuOO-)Hr8;o00f`0Ew_rsP0lPiUdvQJYR$hNMH8RLMgvkdz6%PidA zMl5#0f6*kOShdFNjxUG`v~$Fqj}>s(WX`L|!;=YYBgJyiaW#Q~Svqg9K}(Br0TNt& z9loplglr)Z7>gS|37)~JUUpKX36p=wO-_6%p;S)9=x_Kh#9sP@L=wi+Jq))jzSCS={!e*pEdge`*jmL$L9H9;9buZ zj*>UJ<|y3t77Z|O;c@9#2Y3OpF2O8aqE$X>H}pz*BBslH2J|+ji#>yqT0o{sGGbWY zVEKk{ZR9FOD+*`VpJkdQ0XFs?V=E%S{NN7PZmDfNTF>@2$Biayp@*Myhb@aCm1K<2 zLoA4^?_#gt*b2!)xuGLBco4HYkO7$z&QbAIm%P6b%7AjF`Z^fK{F`zTTRShn&16nE z=R_{RCQYT1ZIco?ZN z*5Wf3D+_9-dSE3OEq;k>%f>JZHR47iVeO=z4ZenYpHEAS+5rQA2AQECI?3fC(kig<;CL~l()G$65hM8eGN(hRa=ZF^d)EVC5QASO@fa2EP?5oYgYjT zz6%i82KGJ$iiUOP6_vt(46A89qsya-pPZ`_F^kRElUD4L zR`otVCULiA>@T2dN(*WmN$7zjE=PelD7itj*#_x7EhkV^HaXTCgqL)LzHN!zwe&Sf z5y`K*qR)wwrK%{BYjg)UK~ESiI~ax_hDzv5x$Hn)(KXABHDZgzccnso^CdOI8rSGI74fe$K`pjK+k!igKE!`+ z=>Z}sa18$sLf`-Nu0WP}yQQ3{Des(J6iamt*A1k0=;YI~Kd}yU@0HCO46fRhUQ4OBC}4*^A#zR?@2Nj_g$EX(FG71IB+VLdJnzQwJOn_TkwL z959$F_=} z62uxU0sf3e&TN-nybzuue-p z)AUh68Ss=8$}ye)3A38S&RfORoNFP4aE=W=MF(-$l1&{m0~I3STRh~J=KNAPr}&x_0N30kSJ9ub!)Z97xLGa z>sgXKnSr!rje^;EJ}ctpG>HXf!22B}Fhl5o+JRJ&3qy3)2Wq&B*K`s`_yVSBMhdut zR`-ZLUVkIfz8diM58m zrcm9}T0Us*Z&G@qvPN^TlWL$J`M}e(Ad+-b;i@hYvqp?afjdiMO~PznXxwB^MT-KM zp_~rUDt&MrXp0^LB>j!rZ07ieBM4MMk_!y%8%a8p%DED*h2yBi2qH-V1@fmqajp%7 zyT`SQrM)h-jRr#n)efd|2#{b;XYx|S5K-6@=hd57kTkexG#Ho4J_{5STaadwv-GI7 z7I`Omc(E8Wz7X^onZ6YXXa=8-bmeyqB=o_p|LIQcuKujWGlWA(5E$A!7b0i5qH14g-lmGdW-8u^-@bc># za%9GSGYjk9mYDO3g-DjgUE0dND(qzy2PD{U$VrpD_=(4=K29J5TpprgR!1D$?c5Y*uRcfXvlBkq?Jim}x9X5;p|19aIZqrH1Miju6c{?t37J`#=3& zXaH9eg(JJS2%F)HR*bDNEBj~& zUj~xpT`>S*Jj!nC&$Y%m0KXNbeR#xW;Wh^LbWY-p;D`qGc8L~?5U`LGb4|VD7E(uO zT`Lwuoju3$3)z>-m&Dl)85Yq5gc%j8 zcCi_(f=P%`Q69p1qLXU0JWvnef0wNzHm?{l{}T6aPyX{<0`2=7C4uyWG}O1eai|Ii z4XbE`>EK8=`*EK1j%pSKNfxM_<^2)>iq4&*S%q$@%@LF61K*zhPy#@;xF9K4IWiFl zDw$2!fSs~w>oCv;7syqW&oEZ3;}&GX7^SS55~JdT3XWN;I-@@lqo6X5xM2n}T((4F z$;QDmuCu`uhR<7^K3OaYQ}(*lYW-WN<};-B7vhuS*L<_ z#7o*94HZ=;tNY(z0)lM7pNi~A-e*&pYK=C4P^w-4PSR%_?T%32BrrA-hMk1fQ>DNs z$#hE@o@z%q{Gvg%JuPd<*-57n z4ANUDNc|`*myWTz#1{7p&FdVM`T@#q1ndq;{ne}j_yK^Im}%P=rE`VD}A7+oKv+ zKSJ?OZ05SAi6H;%99O{kPl)RT_z?I}Z&Tb_m zHnHD&lB4#$U&Z{8lInXW@Z}hYe3|ul3nNql4yOtBUX2vLSHVn2Fex^_sn94tI0*r^ z>}NFsCG}|nF}jKMscY2O>C{g6>gQZZbNLW+_ZX>z$4DJKM(W@(AFLT=?rz$Q!P47V zQa>|CRU#hTW=||;jH%=KC3K>?$dopW5zsK?N(_lBRn{B>7>@WUO;34|!^e%DbxC=F zd1<+WG0aH9h78#0Yp8j-y;g}KwHfklH0k)&qChMxNNu z*Wd=KSmhG2ga!AtBjJVfd`3{GTK0B*FhO%)$}fdL3N+MITodY)P{V$k*zyx=!9icK zelr=E#G$lcr_SX+CK1o3AHgvi>t__hj{W4#w=(8kJE}sB66$FkpT>a>aY$2ZfDTa> zdq+7fyi#Z-GlBkW1zNo$yYB{ZP8UMid$>tI-iWNc$ieB0YEUur>;v)mekRy1yz#$` zEF5h2C;lR9T^^riLg}7S^#X)miQl>uTLDji9(%Cn-?jcFHGU4o_LmPhhQ4p52YE4LdCB^@uN`Pxh z;4i5~+5C1h_bukyN!^q`KU3wf{j1~r9#T6##t*ZFAfsgILqhOwD-@-!oZSU5-{$B= z&aEWn`#Mzhaug!|>S`s|C3~VJbi&$K9q}-quQj5oku>Khmbih=oY!yp`#M9m%qd9k z1DTaePz&81#qc!XaJ>Io)zFs@cJSmmJQ-s(MbuBqms|~+90t z&|LJ$hMYsflTFpso=HMg1>n$q3R~kS*SMI?7^O|w=wg`PAIc=f!k|=2zLC?Yz&6{c%r>U73x=tf*~c(puZV)(gG1;9np^FV3j`NbSA>6 z2eY_!x$$c`dPs_57dunu z07fwfZbPKQb&pDrF`AWyE18v0m!vi7_-XRD0ESQY|jh@Qbjd_5Gz<5vBbcJK=Sv$aaL1{anU zJ9XY3U6|We;w4-`h_W7#$+Z4+C&DG}_yw--lz+D7F#p7xudxdjx(I^wpvnJ)7tZO~ z+UZm@kP$%*3nW~nNb>nd!i@V7b_+TjLI?|f%XNi zQk`!U@4GEUo~^@4!V5+Es(6HW-ft09KkR1l#V-8`%p6RaQkEY-Q|Jc2*)6mNF)9P65 z=M;|tE4(iG!T$sM)r`U?8`d-5#BiP}Dj6I{C5MpWtZGuDf<#b(zgt2R_B~KO(Imm) zR`m1c7g|x0sC;yv5jtXzuHb*SHBWWHIIYiu84$1$o4yWYJc-(3@6Kn<&q6UH6_oM} zu}DeRcm$7CI08t+QILi{h^QuMlo+rGKlJJ)lAmL;g>6tcnStUF89%%#oA4g4aBRYn z?_=c`v1@lQMk3yd`y%jiPsu?=-KrdZ*llC-I8p6*eoOMb^KpW%VQ~^TjxVA1h;dNX z%4LXti5mjH#iBmFrk-@nAa55W5S9s=C+_1gQkAa5PnrBgdBta#hu_ z@>#d%Fr_j($bm~BqQPtu7DWK-WsQ*@1V#}uR&IpUPie_25(+oHOACrVT3Yltr-@+G zijdjLbamXwOuS^Rd4VMPTGug-n$Q~cNE~XaAdn>bUS|&sAw)$>46&$VjL-?}PKb&Z zHaig!$P6>_n$j&Z*<@4bQ0rxL#R=;_p>5Ll5+{68cil z*%0~x_`hqQf1%*gqG8d{9U)F;wM}Ij=y@=VYuFUo-~?2r2x`~|7g<~KH{4jH1qgp7 z^n1giE1MZKm)I-;M+<%$NvpkGAPx25swhUAQH(&>waQhLbgnU0lGgZQ@$1Bo-KG{p zDiLbHF#%a)JSz|nRpK%{UUSyeCKCf_`L3udmZ^v=47nuqzZ^pAC_Aa*eYv3ohyz?iRgq;pq9Wz|*3YAhI(Cj}ov zKy>di_$eT|q}Q1$h{xbxuM|Xb0l8@dGjtmRHHVY9PvEbac#PNwsW1=0eXpJaD!HrLUA2yr9ESGR~=i1D*lk0P?q-VTU#aT$XWQu|~z?8u2o8RE?^fc^L ztK30x+mq#zcf|2-L!y~oqj2@=pkZ<-x<(4Q57!V>r5v50NdihO;5rXzw9;7vjl||- z5dLMgsF%E(xzA=rwOF;^Ly=~Mlx}_DU7v+9)U#ODLBo6(6oB@`Ke){=YE~CH?^1Q0%BZX>lG|kx5hdq>bIKntY+Uwv={=9yGyc3&{_xeybJ-nZZD_;>TCNRpQC!KcxAo_v6_q#sA*kh@&ekuq9Oxt)HR+@$;`Sb3JVTqvoW`a_ zF%6y&m;#E*J(z z(1soBrl$MIYnk8NcN z^@!5n`tvLiqAa(?=d!EH2Ufm68s&BfRQ&U-{I2r%-kGJNXKd8Bf)DDDojx~XD|V_d zPUCY}ZhoSzK4A8iC8_oQW`xQ65SLDbi;aVanxQ0mnNh?`Pe&5$vzy)y>-W6T*eSb@ z5c+Wwnc$6vn8tBWLu-si6qNE=P{}+Pg+z-jhcr(`F5bW#yT^adapjTL7|C~|9_xfzhuCa=o zT(^h%$u&->9K73AtiDdfJDvXe%)G2+Ix{Pu4YuB7vF=vC+u2tihY)ecJwNN4b*c%G zGNxGU0>Z8xKC#}QcYLj$s}U9~r4_ETXCFhw`>g&X_&2e&R>f~J#I0=$xxq*r8gdjT za}-VJk>v4yp-1S7#tLdi&GQzL!|ZbMm|#PBJX_2d5uArOc;~oO>7rT)9<#v;5&x_) z%$~#5@Ib*Jra8sd#5ptC8)GjGm|9ZyGNV255V_98Lj=zIfN4jsi^%fb-k#=0)88EE z9qI#MG2N?!OJqcYK&QySe+(7G;wz@NnCYqDWS-2yjKEgO>a8*SwDDnliC5ecCGZ+s zlNyD=g=tt5@j@&c`^7h@3~8=yn>jHe1MJo+{EP`+lF@KBC#({bPz*YDYd^lI1C-m8 zwRxR&dHM%SplK$;kH^1ifvsX>B>9Twu6SUhVF+DMtQN&az2rAVXc&DbA z0OYO(STaGLB#ri@`QSAUo3wT>TnhzvVaR^Ze`=xX6TajwmSba<=Fxd+;8TadLUZFw za~cboCq^Q~JI|R_$C|sgl=}G~`D1vN`(okDxJ{F&tCBH4GUHUyq=Iv;L>RO zGGVg+n^bqey7PF^LcoT4gAI}2(xq=NlwHc|5}I7C)$4%tAE~JhOXT^spVg(5k>(__ z=xd@YCgR)uMsd!}@wLDpyR*`t0n2yduebPiD=8*Ic|hDwk~m;sfYf2lf;2`=gV|CP zL|Lvd-*ym<~+g zKbtYPr=+eG=l~^;ZbfYNgwHKt8#QEo8=zhrK=n(iHROt?!C)}mHO)2x&vRBkz!~cr zMw0yy;;ujk$=wYkB)11xZxqurgARDNYqAVx(4j@1fDVK3Zl_TxD2qgtig9OV!?ig~ zqlv)0hwB8omK1z2v$grEZ2`b(XI7 zlVg`T>N-1gIiw&nBwKul#B=6-^EoTonbC?X#6uba<4Z_}h->{aSLeMDe}W}sWQjWX zH_{wtBY7n5d195un=79Sf{6b#$q098&cQTVU%e}-DIfA>+ktLJtBO_f9mc`D&cPhQ zDq)ydxS`v0`Cd>MEqBFeeU)HpeKiS|RsnVBIL9zt$Fh>!YieNp3#O|)Fy_Y22HGMJQonbhpQ(S<;52KbPv4m5ZC7d*7^hQ&2XZ87~W6S`085; zuS8&YW0R+GP||pJv{;GAji7z*oX*aUl6oYa%btXcf>J%9l!_t{SFV-qs$oJA2$ZZs zaf!PUd*a8uydVHD&;(YmfSGv4fT>2%MD*QfdhE%09vK3qdXoj=%=*vscV^rngD+t-Bi}~@Ei%~5@-OE|%ke(F zg{PV%gc&qy;e0oKwm;($2|-BUx) z(nrG0u8Z{u)<08^4YLYQCc@DoJUPU@F|YiBP4{0=p-r)p^~p4PAY!%fWGyx$4nU|uU6tg<6_X2TeD*s?A-Dn9c0ZWpB=3Y1nF`)^1 z%l5j#XZhjBF#=<+K?@=|xet+Bz>A@o}8vq_+mHdqoBs zmEv;y#?>Z#rpBhH^GHXt9T@#lPtv)sp`X*xB*2t+lqh~jAi*B+hA39FF$561VJSy- zQ<>~cnDIs013!SJtYJ+O;8BaYsYtxJCc!}K2y0(LNY{_gaYJQa!tZ(EaNe3{u~$aJ z1F!Q=EdqI8sVQV>3UfC+mLCy%@|YDh1%Q+ZQmQ$i7ZgOYoStc-ZMdd^%BzqUX_B^=`+ZrjupAitO_szP$(AP4j{ir)7fRtCL0{9jW$=@4 z>jb)&9Gh56HSnI^5(NoYwinLMyfaWTfx>YFA0B%_I@)?-7cL10elzaN>6iTn0J0PR zXEy$f_EKBHhGBHcwibR{&`Z2SegExF6ctZNb)1_T|EDReV|C!2ymIIodRPa>~W z!E-ToTJm&>SQ-jZ_cK)!4MPD&H5;b-R5^N*0D(2eDb%&j>doN+5 zsd$SbaX#s}at&4-9kH$uubDT&C#7BdYGb_X1T5?HU8&?=s8+~S`s`DWN}pK?UXpfE zPtq=G;6970>AJDhucIS1LdU|88@zS8Q-J3^Ij>g2!XlStj0Edy#m`09Hzxuu-Hp{0 z?6Nr{brxmrA}5{j7mpt~vx%1WASu0JCR?5}FqdC+W$|WWGEAXtbE~m5AJki!>B%f1 zC7rnGW(fk*G67;D+V25K@Q#2oJ$bnnL?97pSN9F$k)2sow_6y|gSDe#yTrr=ZEe%J)I+DN?n(BiF><>Syj|O~;#oNcM1DQ3& z5#oPY$p@CM=)Rm+;_g)gg4fB57^+pJsLHMgwrv`qmrH>fD;51hx|-~HVh^=sBsS|( zUU>$;OD{(~^|&|tL@R3$Qu2x+VEdS&TlY(IFTojhu;Urd~U!1z1atP)V%jv}cHCOcc>^+)G)c==n zkH6)a5esv9%rVrkom^-AAT8(Qv7mMXTD zX{S|76R++DmY-^AOFwvAW7n6_Q|Hubcp!OTZ7f1)Cl&w9v|IWak~9IcR25G-WCJmY zeOR9iLnL)<=NeYJ88bV=O0Q;t&wDZD`z+4a%t~sf(ErNq2J&t$U;c|03#%`&Sl9W5 zAHPWD2H_sW62%_{qoMzm@`;*Tnq*E?VFdRXvkD{NM`iqI9&5D(TAqZKTNXkBvqiYC zG>aPy%<$nJ#^K46*P|ZwV;pt((w0}EtjDJcb~FrDTZ_M7B&O0S^ciqjlFqZM7WpGH zSm`FIh;tRI)J?BUk5Dy*5!^-%vPgJLJ;SCt$g+?hw<`Brae`UK4Zfu{?ol$LJ_|^~ z{Z_THj7lz96TuUh=k7Z z*V`M!dlE7UdUR*;$|QGJHnXKCdX&ayb5rqQ>#1X5`5@3E*nF4S0iqoSjfCH-qA66o zez2Ty1&*)@HvFoleYOV{N)J}gGXH_x+h?0Lvjx@3V_D4t;_5zSPS`M>PkD!K4h9Z( zs$kA9XRrqtz*-`S%%14q^MWMtSA5nzS%<1%!!QTjE`}qz1=)nP$R@;|Rdw!S2xxO@ zs)Z|y&uk59t&>`0-n??X z8@?9!p>^3J>9U8fWxilb${0kx*V0fxb@mu|^yg@H=CVanF1wpaM4W4kuO%KP{yhkT z88@WeC}TV;hNdh3=#G-xj;Try(KMQ4YZipntC((xE z>%=ESPc0^&(EF2yxjoTy+H+C>kt&L;U+BoJT1ptA5hLvFe2HogM zFp-GBZCu%0FS)L8wd3k3uHE-JM{QASJuyW$afZT|fipnX)Nd9ugitu16IV?x@VdOZ zTzH`yKFf#68F3&URJ=CmhgvZGu|TXCj4H{aBQV1!I?N#S^A~qvAkH(P-$IrHJtYP8 z;~MKby@0s&XU8FE6kj&yOLM@I7oMdk*B6pjXaI*qO$f?hN!Vk7>fs)%F?72;V6aqkMHMNAX{8$Do#(|FriDb%ddPlI*M5v|+KJePVTo5bHz zRlW1AVlG+P5@eFjgkTv!^d&Y{zQV0|=B(@krUF%H^xCf|1^W{OEggU&xnfljH=e45qNJQUqdf5L*C7R%!` zg0~{2;h16BYrwC$vBF@bjG9rSLQo^$L=81sq@hL!scSvM$@$c>y|wK7U#2_S4LU&!`XEfn?H4XXSg%z{mQpsbi*U}FK;N>M|;OTt!T`bU}?MW^=3Tv<^K3r5tplqQF zIcR%%#24b=?aW59lP+nk$ykC@n-NjT-qnJ9B=w=2Irab>G^lU4%yRN6W8*hF<;8a@ z9)KyIxN>`kfZHEYc_F$Q5J1W6fv%AeS)2Ql5f8>Y)1}9SE|3l@gYWx6Dm<_bfvnSR#5%y-gG%6D7nUE z{?n>9dT)2Q@%wKP*b2xH5rBGaon~w{1)n}-iqt=M)9Rm}&+b4*#28iv7VPriB46gP z!qYfIo$#BWJ4~=A&oBn${KEHq*@!QfAY8{mFAi>sQU83aP+Kzv!>?901+zU$(c7qK z`+E|Vsw_;wvE{1%x#&puxnUBI)nZ8&gbPH?VbAhv&#&P9QvdvPrTXVgT(60m*-=U* zfuI`o&x;R7OW9^|T96EvH-U=*m@D8EFN;ex#gcG(BQ5KnPZ#}aBv(H!GYr-3^kdHT zytz_*VG0$^Z^C-L0sqoqBGI@rqLBv*hw9y%S7|sDRg7Fz6{DNvcz3PcUsW)ofOECo zRFFFW7sec%+8vG9sDN|Mrax`)Cc=@MF@9gftJxl;x3#!`E8BznS`WY;JS*aWx>T2e zu<{w(2($&0Jy@6hr&T}K%E*}s7&fe2yuacV}uRCzI-MD`N^~@J=WL?ulz1M7c zX>Fao6=7-$Luk(3Dhz?TRPAsjox$|#1()0jUDKp&^EYo1s>|cF5E6>ovZ|6bIxdFP z$g0i3%#Qc|6kcv{pEiID;Ou%T()sLAxJiY~$8M%(N*8hs$|>Q;et^hqz&rqwyu$%J{4b&mtN&6hyWEA0w6R@@P3bvc-BM2H2u`P@ z=~MGDd%rVfjEKmlozhZ55svMU48s?&U}X|^p^TB)B(!uAMrA#p2^Ace^e_ah*-4mo z^>t|ebOwCOh3!|1o7i4vlMv;1589r&9!2KFN0WI`uSdsRIMT zVNBNCHpzc(a(kVSvjOC+3<6WT{)82?Axiu0b+)7zx>6gZ!+>?(o6(p4s({gp&hXu8 zV1PaC@Wa@k&ep>Z1Ma9A)65nyrfQSWZPOv5hcuHgbM<^q#0jQl@-ThNiX3O+qLYg5 zi^@5HB`9FA+~3Na_$i%$t8fsie#k4EmUh%#rrhMIRj$vzgPNssk7kR71anfb6KN4! zNm~hrDZGt1P6aYCFvF8(n?jF8SPN?83XAIjN41V5K~Nm(pV@IEhuq|?(0hZtVgft9 zW;QBujQ^Mg#oZK1Upb1{OB#<4<_Nm4fC~R)R}ElSb<%QN0v9dhSDK($6G2QHrO)4N zSZ36^`(rZS{uO9=)DD1YcZZ?JbE_|YgQMv?U|l{(GYT8#O+bb)`oN5@2?6^cIGdCB z0+j#lQcM~8Uv=33kW?;+7ci5R)6!RrFd*E6OPG;`LFi^S2p8?E=d0ATsxiZEAb__7 zQc(e1%Da2u44e8OJN+KBA0S}BEVjZ!sQ)jj7X8#;vr7>Y9wiMxk1z=H4po5}p8K4% z2x&E7Z4e6auI}673q!VKGP&^D-K@AD%XisNX2bhV@Sgydz8cDrfjgB*my;|V12hva z>KglcyRTT1BIW5envdqchQT)@$K@I+NLs!smX?;Usuf>2!$wC%B>^I2L(R{b4Q1{c zthnK9_zTSyi;8J$Xi>39ir(1#(5lh)z`~`k8ohNf{=uT!{lQ|U{)C*&fT&I2wu&K7L%q*K>;EvZF*eH|;5r{H8>N#)CyEF!=nDROHfu&`2G zIGH{`0J*Q^P>YI&zE-IwYOG>1;JK@73>)e5-90jvb~x6UKyjirI9O6JV5_QFwDgsz zwHt$_O77wd-IEg-0DS}1GTk(*HDLJ7{G_mu(}vbMOgjLgHLW>Ij$0Gusw zV9)6yT+lQx>b+yt*<*YX2~(Gc{nL&AXsBVgjlb~PXr4~7^L6`Kz5n_%n^~}Y(f*zE zwh;v1QnRQi{&5P4zN+YrK)SDSbTkRC!G>q6OmUD%zNGb4tILh_YL2XH zGF+K(!@{{LTUUaB_^^nT-@!Y>sOH#iF#2^~B@vIm1@>*jCUA@7vBMc@{pDZ2oCua; zq5>HCeeq*%T2=!*G&nVA1EkS^cWnrN?at-F7d^OYan<3f z&S%5^%Y0CkhTSI5(z_0kV-<;)L9u4*{!jq)3*arWEYX!c-q&i_hn3VPPCsJIFVcwN3s!#> z;}QS(LM{)rCK!OxOQEW2;G2vSn#AX^E0NOT0poFSlgyhKIX560%{ol@@{l$CV@GL_f_E_+ zCvrKH@`5oD1ZaKjq*INGBM^0sW*ivEWLzdox}Oi7l9tWiF!_i0!xV&ajn8_}Dg*a; zD6{5>5O%HL_)+HI29qQ?fhP2sGO|fo@8M&HiNeSBXslXrL?)e6;`-q&eDQuw+z#2C=wg@y$dupp2~|yf5s)er!zQjBSr{PSa6s}BNLOR&l_m4SP=o*}Inzr^ zeH%mw>*lzY*{#?P6$VKk_UlO@rXY_ZX81f4k%6nEV!`%|r$4jw5~&^L=V;LJ(y5v5 zAi5c1LfGKCbFk)yvrlxfpyrWg(+s-ByPKa=J~6d=>7tEyr+>HR`t6=G>n{7-M^<0j zUcBA8(><%+E_MA({#)kv(bBK}R@d)K+m-yE-(bs^-O6Jxd&N#ED7_nz7;|Xa+U~2{ z7vK86Q;xt`;v`Av(lLJi;Uh>~*hSN5AFQ42!@~(%Zj_q3FUVE>?)FeZrg}@_dpq_t zP%*XT&yS9T+_u#NQ+izhvV7l-+#E&C%7Unh4CyG9y7(OORH{Kvnv=~6BJx7K%)A+)N09N%FBw`#IaiVDlv=J#3(v3Eo5Bf3@f~Et~tDHGE%pVK6>(KZtl@=F1QLZp_^&ljh(3>U)-`3+v0rA`(q%u(wTh_2W`o@uO z3X2*)S;dywWH|Tz-S%i%7hIkOydeM=UYE4fp)a6)t80QM35EqgssJu)*W@H=;lUQm znI^VEN=K2CHM5=Pm*x_|JPzU)qn=6_-AL;g=|JRjiAnFkqWpMdfEUa05xJ3Vt-cjAbQbnZq|^n~y|(ILl=_k-UT_|COlqIG+YcrZ-Ecqs#brE(7*pz~#U3 zMkC*};lDEIbNs*9R8f)CP9^LY%wSl2r<@MFXv=MZ{F8LVh=gOYyxE)kqqMxC;wwHe zLs?5{RMI@0QPn%Py4|WG9#LGugWP=y-^uH{SnK1^h;gOzB9Pt1di=s$=lgztX0Bx* zg6O>BqY}4(VyZ?0U`2Z$OGOtz4V`cs{5ZA_m4|Vu4Yd~9O_8Bs`#m4B3%8-aEf6S& zns(q2>D$1?Z{A03-|PWimv9}$l5BhQ;@`NtL}RS!&Mfqtg@Bv;Sj#FHL!n-x&2kb5 zuJZVPujAisq~LXUFN*KLql!bcf}tjk<&TThD$|WxvBV_qtm9g&YS^v`B*WUsWZkN` z69c%}!pP?A(Vb>mlVZVx;)kO_ee@Jns^ z*(+SiXDAb&lp55`CUj4iT*s1li!rD!1wQr=h!EgG;a5!7IE2~bgHX@GIBf&2a7zU~ z`lV?Mac-H*L?!AF?1q-OD1 zZ$^<7D*rz|DZoGsZ%CDtjq4!NR7H_Yb$VGiZ?tFrr`x`e>I=2=Gy{>E(}++$0VPC6 zwU;C7L8=p#fe^BOZJ>LtYqNH?JNm|8Aj1BR)2ufT^K6e^_>eoZeHG#KPsx^lpd+A( zHz+Br8g_eV(V4n;5yZ`9|FDCf!G_5shvLAi9_aYFtV0PN{3KaBmB-!5CZ0cZ@z4Q1 zzMV(iVzO(sQtI4J&YjQxJj6wt$gEjhx4E`(MQ~kj#@WJqFB0L7agiFg&`nzz^+PT% zu1#Jd1D5wwu3h}*J)XBmO)82xnIpZ6bk?zEZ`$*(9N3EGETp_wWyEj&i=k~t05O!D z59MJ6G++aBCU#8v$Fwk2wZCk!e5P}?$emlC<}|VbS5E)AA)I)l__E%*A}MA@ox${n z0AmBWLoZaV9MEKH-@9TDu!JIya}%$$y$qV z`}y$oebizHHK4}|JZ*=@{=t@BeN4n>&%IU>VC9S)X0};!L5B&|JR92jZmQ z9Mo*Vbglp{sXBc$0yZHt3`9}^soXl9Z}rFY3X5?{ zA4b)Wb4&$$m4tGe_>mJi1W>taKBAd5acbOR9M{dPqLaW;5=H+Q;r2;xP6O3Moo(5N zLDb}B0S(CIx|Js~T%+a*w!9LcdX)_W!icc+J-n-_u9X$c(U|&N__<}&8<*8%BTtng z(l?@>6i07lI8RwmyZG&K?Aadtz0ivNdaJ7oMF>1?Nzb$; z-AP?3W;*-gH3lOXr(ZkzMnK5t&Utmn<(NpYIP#qI4DZT=NN6k1S;F5DTxTdXY4x%G zR4w$D1NXkPBK}DPzx=&Nq=)=*>3D7HJqbo} zEZSknqgh+_3^^AKoXSrv=Y+v=EAfu5_0}coc+-tLNKB5F3YtHYPfbV8ZNZF%Y4uV3 zzisbI%~ z2{S4u7&vlKyLR>-p^OSPfuzPAZHJ2Y@K03yBAhLC^tJGdqyVTiiC-DR6~kD;$c~<( zVc7yrd^U5_3wcKz)sws{-u)IXsS%RA|04A7wRLPGb@CKXFm7qQRs)0`Q9Y5$d0y2> zy&3=3WQ$(zO9q5lQ+%q!T7gM&IdP7m91qo32)q~h@?tf+lSgm_D%<}1X@_5b$Ry%K zM&fZp>M1JhV|#Q{d)BQI;C}W-7=sp68U9~xd%WF1{&r%}8N*S=cbe$B-6KfBxg^sn z&u@KD1jx5v61xZsL&nd{yGnXaNYlSb>4#=L6xUFlh^|?WKBNA3jBjicImKX=H0y7~ zB@YvO!rV;#j)_{%6wGoizZI~2(V~vOEkX-6xNxSqf}t)Q^?cudYzs@@ZBUn_@a+K9 zB~Ak`1b*BKliF_L6fmha{?%?ZcI|Ptxf}*W4iispnD;^*$4IL41vfAT6r8aP2sn;1 zjtK{-DV&W%be`SX8oO(-^^N&}sj>Lc`TlA_b0+gp3skK|uQYnCRSqa7!v_htj<+M^zTnMp~PcVX3g;w|BJxZNJXo5pBRIH^0b;9uoRqAE&MxE2i_ z-QrW!R2fQJi)Thq(Q{G~rX57JL;0!qFx2=)&dhoB1 zvmIUYg8q2SLy4JKi)_7|fvOOQ;`#CKO-T}`AT3q+gpG@`aP3nHd%rNoc4pjym&L4w zi~JN}kD(!K1O8tKRl~Y6u9oNto1SSMSMKgdR~3s6@FK$CMMy90%@L&2`(stt-~iua z=T0P`ky?!RNZb`o2WJ@S4bC8K{w@3yb>5nG#Ktp8SmF9#WBn)+08i{D7_zI*Sv$En z-r^vOdp1L;WF6)))9rQsl3+1X;caaf)0xlbl=fgVNfabZKk~hbu2RF!VlIw#y5i2G zyM)p}GVAtkNe-|})-qGKO3)K3uevz?Zb|P75usoc`<(Bm86!f)=jTYRqniR$g)q0e zhORqdBEK1I)!AhtTqbc25~4zQRw`=X6du0NiBw|ssQ?0a9QioPt2yW0gVnAOyT$Rn z4|fHQRy0khQ-$aVMZ^^GiR*J&_}#-WsfU=p9|ScL5{*H8k|-X^&CsLz8ekppblKFVsT z!+v0isW1Dw8F?~9cvO3{*v(l zX5*$*SK*)R3$vXWB0akExico@I zM`n=T7^hM1+qoy>@TJekFP1tem725j4-exEKtnv=m4HYW&x@w%>Z^r*Vsh5{)aS{6S{^UZW-p)IS*7*yzE!iE_tCX`Ha zBb?rMfrc@-1`0Input9y*b9wW9`?3Jw*+&rsG*i74#8QoUb?ehJb(ZTXk;}$or%Ft zc)j5l4geb&f{JClU=kCS^<$C4X;9~(J(uW~#j)>wVi`kF!Ge;Qu)Hg<(MlGq+I#$F zL%t;t9CJxm#}&c9@8;H{xq~}z4AmV=AqHEr{98Q7Goo*J2Fa{`%GZNQr|Xd?cSzs8 zzv13$@9`$kOjuP-nh9-taZe3-S{;eA?A;yLXq*slMS5cejYNV|P=G~9&AkY&A^Uml)D~9MyI{kKwzEFl*4Zp1G)DAH zO_Nc~lhl{y@zmwm&aZVy!wTN?7=?bN__??-W2qQJ#eZB1drEMk{c*iH$N1UCGe98Ry7US0ntg~pIDI(>IDU2Hm+Ps49iM@~V0R7N62 zLh_ar)DY=-3$3cDzef_AtusnIhkh%nu|j4QEjBfQ4L>?2=Lq-vfRJ-LmMWHKM&+n- zS+Vk+M=$|m{T65n!9mr=tAy5#aqFG>^;}KFpK0n_BoFhcwOlj9s6I zmRZYc=!`2@oM2Tt!mIk*vO4uhyk8#+E^o`b;BoW;GPG znCAY8nZ{7i7)sO^mrZKb2`QpHDKTz>2QJ}F9al$>l7T$1KANZDc9_&xP?D{VPYHWo z&2I7zvrsV9YZ^~-j;Xp)hi{rj635x9!&$~ker~c&mHa}>x-*}jF&&ZIUe!J4af?vj zw5N~xbY*)#DDe+T4x5^c!MH_FP}363FOs9{&Fy{dC_RigMj)=y2vp8Jci}g~`Ay;d zDER?W>2Ro7hCGvn-Kr*dXGvRdYX1sG+!u^M#bi7H>-%>Dq^}u#O?>JsUldLw6i#=> z_5nZZEwSqcs0kLufq)FP4!BfHu?JY-Xo485XAJ7LtOgfA!^zVN*t<`-nn@+2A1tO) z9(8#9$XpCi?ypwN#rMpl4gc!Xzp6V1e~%a;eO#r-G_)#?Z0ZKN*d&q{8h#<8dBb&; ztFiATH(0j{j2SJ8#oE7s1G0rW7OhAb=&n*g*ObIaK7Cp8FPH#hBrhm%*23j2`Q`s` z>u6>Km_dkEg}%T>V;QzssefGO&0l$QGH%)3_z5ddBPYTqDW}3nrBMndb8SrjSE7&00mF2u+3?VhV|ll zMObro2Hb5&X}SZ(a1XcWG#OG7|2BIcPjv$|qK+s7*z_WLR~<= zBx+qpsi-L>v?ygpQVM@|zW>8T-j$xDfm{)+u-y#JhyNdO2e&;)=NY}?jU&9V8#i|$ zF}vqM+23us1R&<&3ZdK;k~$2DLD5;y;a4#ns;qPduF*_}B2_cDxykc7d&6yA{Zjaeiwc7r4g^0*^K z!LoP`>Dt`4<#u}Hu&?Cegc5-Aq1#fPIur-5t4VFw`stCRuMKU~!8W&AYe^V&nEPEk zte`sJypnHn0Ot+tX(GWj{HCeZmt-MJKB*@9)~h+*Psjs`8SkvM&9Ot6aDEHMa!un3 z@sr4gXH!MPZ_xkrQKLKgOlQ%qTJ(-oV$4#$YRM z&@|~HLsYOKxWWdO;U<3XeKfL`?A4ftie#+iEc&Dnho}FygJ4F3*`iWyB1k?#iwDy& zm)i>@`lAhlQcX^@GuYnF_^}+&+-rUIz}IC-=@uz&+F3wRj2u`qsjRo-qL%-Nx-Cb@qfNYS@eKNs_nd+x(-)IGT~1reb1VHmudJLy7y93KMWmX zS;Jn9=HCs-vK~*SCotJl`;lCT#tijQnAc3umS| z&-p-=_^h`bkR)7%gd^g@3AZm03mX9e{iWJ`-3{-axW4D|8xpyG<&6Tw8I|w8x1-$P0 z1iC~}xA>7cGg!hi8D|(5XnrpFzFdJC&;P{7O>!B4W z;0b^X$9(8N3g7KuI|lHIxiGa38It|gbKIW+GHhUzXcCM@O^_H*EvIRW6I2M!&*XdGsg`*m!9dr9?Yn#1DMg-6JUl{pt|CcCN7U3rg$XFSx6gM86KAI5YI|BmBDfPR{?z8EMrBXcnG|85$|tbQHEEv7O%hz^N4G#$uw zV@t(y;b-O2%suX=WPXjhrp?9b+&)?8DS>?Y#1i1wz8@%4Bh&SB`7V6sAhv{}F*3Q$ z`IT0r*2L3u7%yowJkfTRuDcG>hg8v2xn%*fpQ(zaHAavih$$!?)w-rDj_=RSAS&)> zdEMdLvsq$&SV1*eEYp#u15cBE4RrT9GdkC|rTdu+FBo=L-ZI#Ys|@8EmZcd8g-7KS zs5+bFHip69ueT+XpbDaN{WdWI_(V@69L zEFv778B#eMOx`^WD5nzb(8BJd587qoZWgtHA9!GD`RF?;~}cH){T0mxs>3q8B`8>ci;BL(7}z;Q>E^!_?Cu2eG%|w6u)(x-x!3G z)QriKeW40ew3OggGu~lMMyQz#$SOS-5B;Ra zw;f>~-Egi39upTfRvZ!$R&KQ@HwX_z zQ~<=!+9NTOktQr3GDx zw0cC=4%D?g#V!T{+<_5IFPTXQVY6M<&17kk3-wygyYoa|!aux;XZ>+!qw zSqu6!p{8XT{CLZ!)Jb|@g+V>q=3Fgb4svHB#v(|{qTT}fg(M&+Z!Hx3Xk0gJM|9~t;geDB0cTQ#e2Llk@
    O&?YeP)W9(Yy#~a{o|_%^vPXZ8@YkFB3R$LuOmAH# z3I&&GgWUHw|73JwT&$e#)XZ;vMh9t^#0I^KSfP)^r6Sf?kia+41;1ti^#sUX$)aI`SGmZf=$xOfvDBjJ(k&N7%Zxk=m#;0B8ETXO6f$ zxtmJuL=2UpkDSIo)X_)mNfMf~52$7g-}e#Plc+EsZ9tkyM*)&F)65IYg!-<ebyB8h=h`|YIduJ_9m@{?0WGyw|JaB8ZXf8ru3GU zB%vFu6hL|JW|DeAr!?XBlb-Q7?}`kCoE{b-DYq`ZEorlzO3%nZ=W0>af&4fwuk3wb zznm3BEZezG;_m*$wS~(DrzpP+!?~y#2tYwiKn9SODE3bjxLg!&WhuF&QbBYVE@GHZ zxTr}U*~gjW3(t0lRGQ+CIBNV64fI7>M1h)=!mlqC3icaZKoj0?%vL6Q0gCE1K}>Mz z5GE{&xgmnhw{xyfaqkJNUH&x-BGz3I<_p@=pb zinPzdI*H4JVm<(*Hk-RZ{2Mch5T^jqC_^EAppBWPG#4-4FsPcobu<*vjQPuNUuCfO z_OLLo!%CUX2)|@TI1lynHCU7nPzr`DubVD4$}S$oN^e38n)fGuuv>d1Iz!s=FsQGw zSO>XFFK)YeJTI8*8brSpiNzw$Elq4(E(}DWN*}rhTyl=V3a%0^AFeg-;DRdJr4e(f zEAh4?+mj4Yp`^9nq%(L~o_+bZ0oOeK{|J{4$~L%667Pq25?T<4R04g~QNPmI8o(<` zhXD4#9xr5<9qv|-poPr7f&D{;raHx4(7^w2w4TNA8oGu_7#r0~y^7uKazT9ygj=|s zF$nbO&PB7LyIy^DhW;(GQ$@kd$_d}J&(`oSsY0zy4XSWPrwz_|s$-G{`*PqNc~cbo z4nAmw4Xm9)Zo!bDun9dac0zR?*u{FT3>voCvH>YPJ;O4fBj&2_(4jRDPg@4|lBq#w zS3U9q$&+c(6&S3J#9c^gjy!w7ikO(fHVncWQr*lLVRJN4D;}>ZU-()A9yb>w%_tO_ z(K@Z#tx02z#IO@|2tY9DzW{6NkAo1w1k8cR5a~h*TvOM@-D=u7g_M@V=1+fwG3^>Z zQkC*(^bze$oV^*668?rCY>ZVQ0`u-l0;UEr6@hj_+gQZ=Zp)rJ@ro#sI{rIm4q-!) zHt_}$9#tJ$3f|Ym)8ZRpq*QBb6rb`yk!>=k2&EKBr)Fa{NcbX_gMopNA;~83K<)ht z-c||)dGF&PwlhPGp`g}|oul|R`QVN|_7v4)9>+(Q(s{LX9@=7C2BKE+!;<)i(e;5n z`E)6!r4-;UrR6N9L2w;xb*=-s@9ju&H2+UC=?nEn`RPh5kxL-g5rnlHar^N9TPE|1 zw1Msu#XJ;FglY7evuX+n8w#;qk?HmLOh>MHd}ke(7nc*?&F%$eRIZ3d!#j=9*bEf( zRH0FFTx(ogg82|yVtxDi7XI#3V$vu4@f!|OJ1;0_qy9YOHP|j}gZqB?+1)xXCP(>= zP;;j{=WcNCu0F-@yz5IX7FYX z*6jc$0T8N}qiIBebWgO5V96V$`Fk$ZaMj?GwUs`1I;>A}NC87wrV)tuG5Tyj15ha9 zO%|+lQ@TU&XM#fQxr1d0-sYu3(}8^9E?;=SmBF=wtAxvkYmGFZ*5QaXf7?<=%GK(V zl?m@_34Oat#&~C7{Tkp!j))qb%4MXRjCA)S-BUNEkm5S*hGbtU6G>~Sd25=n7$K#~ znzb+TM!PD%RF3ij2~Qs<>EG)3OPaH$wGu|HC=|+yu`3kHLJMXDn$ZdkiW8no@>c{{ zmDzw0>8%wSq!w^eq{rPgE)}ap!WS7yC8>2)VKVzDzpj75LJGf<$UNU-x$HpO7uI8A z9H?#QegoU-z>AmgN;)7rnnoN79^&y=5#jyyv+kiilG-yRi0{|KlS)R4oR9gc+1VpNj3LD4X?Z-8YYXZ+pi@wMyV%Id?(=ZI35Vim> z=(QBeLe4298x{HBvg}l@bzELt&lqnuH-6|sa`k_$%bRiZ@bI?({MWwje(Qh3kamNw zqVHxlM!M?IDgOp?ZcHltavTuvKp@^g9H5l`@W`}Y3tHD}Ykr@fjl^=L50>Pwq$eEx zSMQ_EijL4_GZ!nBP9E*|efWZz@TT&KQ3oK_;S9+_SiGov1Bh=!^S^h>$i|dj#E%35uD~4abW}XBT~>Tr z1D<}#SkLx6MtGt@z`wgqmY8iNpQ_1N-UH#C&A-HKkqjk$*JfQ$7TJ78!;#tqKigYM zjayW=n`Ho=u&mN9Ng=?8#6`nxKVYN9rmGp-W~SjJm8ALKfNRv1*z_5i8U%mbI3DR9 zpP)nJxSx?>^@A)xBk}}|Y;m;~yBCCvAv7J-tXldQIds@uc4s?~UUO$#-uYfg+ENrV z9AR3xikT1Hq?vi@2&Xd_Ml)Yzk{djquutkBrtqk3sEN_CyHbl5-I?^{#BT&z;*Tj9 z%_3{9#7Q3!#$EeOeo_A9N?Jrn)7CedM>Erjc1>PYd95 zZa%pXgqL76u^!w&IVK!}XRP!~KLfaX=@(~}7aac1yx?-i6~cmIPbbrG|d}D(I)oN znfUE&03!!TYLz?XTxZZOsGfjhJZ7ejM5YJtH471)j*ioF5b`n!P_{Dr9yML--vSxm zdy;&w0`FCtN!ytoC@77c9=dUv#Ciwn0W-|QMXm_>j$g&^iiz)v$npJPH+wGa=q{bF z${=66&C9S|Oe}wPG&^w#vCUQl`;g0vYttd#fPfHEA`MxtvNQLyBc`!4&vC;WS}bT% z3&NwibFJeFJ7kZZ#a!vCKy4t6YP}ZF7T(_p48UX=Ktmn-T2J`B(;+@fR|`_)jR&tf zoUwO)X1P>%gv%PzUU!z45%CQ#SHZlL_fBPWWHwYGnmb#w55@`-M8ZLmS0;$Bdk14I zI4<%#$@12sT#cxtQYa`kejjvtQ`X@{otiyQ>zTjE5#}YFp1@C%hTjLz;*$ob2$Hu( z0|93ANbInfcNY8V#qonZS@6jgq|qj$?-%T3VSdAAe!^3I%CrXaRC*=z;_uvgm;|pH z(I_0E(SW7SB;-TR;O&g)Q6Eqj7w9Af!7+6IjFIE_thpRWqaFS|0hA$(-)IgzFWK4l zT=rajxsnd^ycz*PJ8t6$Jcd!!;uMJVW^*nBq|u@vW-K2mu4a&Ck>LDpT4K}$@=Yz! zi|+)U(ls8k3;V4Zk5vk2G+o!qtgu*?GPnG0S^N_lek+d;ZRbNO65Pe0HW8A3&oVcU z1ThgD%kT7}I9PL_I-oPiN3=KrHRlBgVEzM>7&oMwn{lLwwUdn#QM}2nqL7JX%xn zUG2!K&}@XUvOvh!pDCKrh?jCQMbuJfQbIIDqQ(%J?q-uh{s|dTWZDX=I;!>vY0=l! zNYvT^85KyL*DR3dZwc<5xB}!1sFW6@Te{;O!kwXT&=KC~@409Q)zNafoVq)Yxm?HP z#q~^=ZxLR=*|XeZ8w~8)Jf$U*OzlV#eicQp(J6DKkG0w*{HE zTTse(?O00YEoWf|EJ;5%R8YTGz?~Cq_XZVC6y9MJ2rpfH1J?e)0L<QTst6_Y zWfx_B7@yUjW4q zm1k<=@8M0C%u$%^a6Fu!nS;_5Se9!n;$PX0=U8M>AiS-4+g28b|}ph>NS6dc{5&!)!Z;uetq-WV`orexCu z9u~XdRU!!(8bc1??;8wQL5L6dCJ^Fh?FnFB@!}DlW;g%()UX?qUKEM^2`b(JA-YU% zDDu%mh#cHI%>!@S)aVC_`Y@2y(}L@B>#huN7TL5?cQ8J40sdmdfQ14(6^SM@{QpWt zx3NJ&pw=&Yd~4{p0-dexm`9!tBdWhZp*GsO|jd(K6eKw8=`T;=1^b zjh*kL9ZmeJjp7el1^5=zecK%hQU+<#@Ic_B*+>e~xggu=6;$K1*eFH}Va06R(}hY~}j%pW6<&NKwyMTW)a65W*MoGGT(6uw2qR z%PsW;Knbk9XX&)WgChFWJ{@*=M8##Hp(roS-I*3U|ap(5n zYQZ%}x+U#b-I8iU5}df8>r!Voe54xqyEa6nRj8uCpx!1svu}|*4lpO84sU>UJ;B*B zP2e@*rVZ2FG#UoXViQbdG&^}@GKCp_2tuNX4yfYOQAkN8=0OC{@qrXRpsx*?EO}po zY*k+Hp;imifk*m@+1T-{hF#17^wf83-x|Dll^5smWqb~|vc&@T)}~t$2@_*!2o!rh zbg3re(U@x*n}mbcN~Bv-89yJ;0Bu(nnLJ`D?~?mI&%XhD3rr^91nscLK}a8yQWJ=e z{TPJ`ilX+Zl)y;!WMANe=PMge4?6im$sW(W7okaSwg#+t2ZorZ6`>{YwU+Ex!Nsod z@d$$eA-%>5qzinaD`VyfSn}q3wf>PZ!xOD zQ8fLp2K2PV)N2A9FYXfj?1QM{IZ$}d!$b-|*ki#1XSX54_GKTE^5Uz)&L{NK(Hom~v>NbS5eC zrds#gVJvk;2Xg1lecZVZd$eLi@#hr2MceF>mu#b_40t}P4NhMYmZIPHEuoRQ@`0w@ z7V5k=Ii*oe{KIp{;3%`Bg8m^Zs3{-784UZ7Z@uSQI|^4p6*7GnlnJaM{qWQfTM*K8byE_B|b+(Vwn;*VI772+3o#HUjJ)W4J4+5`0TQJ zvo-%9{~K}~d;7ECyImk<`{6rurSe;%`7?xQ2Jux42pdZ%V+;swI+)t_>1ZR(w!`M) zc^z~ddqHB}0yP9!k&k&7VkpN0w`dB9teMu6ISeQ%39S5+IkpcCc!Il!dWKXrvXA zzTq=Cq%@YvQqg=y#m-}F^-(}KSql+nqOtRsbSBAqYl;|__hKx%fUwMyt!zsBCG4;J zYXf*=VwW`*iROf2KO<>uo&LRG0bNitW_WL!i((x%5$^|0|J?@~W^{?IXs{D_S0=2( zP*1&`_yu8x`v~ntwjO&i7SXiO^?g-pMlkUpT%$e={D@EjhoL3(cyIofylc!gnR3-? z{x*9>dEb^FI%U-&UwYhb@oclUaa#APvsaL0d$wh5@CHk|Y;1Fafn5_+s*&sP^ceB= zD^h^ada{J>P}C-g!3k4nDQ(RvpG4I@lwYk3Z7mDg&{hV)Y2l!vrc5j)>#IY1i!<5F zTgh!0NC*q{Bm_YKEi@{FAsqB^^bbGt5xcJ<34y3|JPXijr-*=`Hp0F4)5tPulu>ut zmYC=#OTH*Mj&+;GQ(R_jxEgL(#LQ`M@5~Fmm{W~}@O!R5iuPJ|FCNwJ?e&Z`<*}bx z_3O9G`k#B72Y%g)b470Ww)`+~tzXOLfl0fqD6;DpH?;q*cKp&Sklg{kl-MP*3>0u5 zC^-uLXv9yY@)P~|ZL9c(lIVAP;Pe5jCZ)gb$%k8)bl# zScV)LF`+Xad(NMj7Jz%l#Lg^xoQ$n3H^C*eEPzP?B2q<6e`GUD$C-+sadi8-7?FD%M7MGu z-fRyZXbc85jWZi)w_CmyZKf)R_6k8dy2HxEyAI_hNQ2-Vo=D-v+d+ztD~Sj zH|8(;uyyI#8Jq-_|4-YA)y&$+#f^;_#qK=BWo%|esahD~+(5YYl(g@#mdwZ@#^B2> z&5F=2@kTDcRR*!4sIR^*0CgKEq1h~RBbvR04_6w5V4|Hb_?{O_tp&NKJBxe zz^a9LvWHn@U{D;qW;bRlHa8soGKevz9LC)>NDn}8GA};n=>+Cmdr(hO;oFrU#2w7T zK9^9>HGKLWlSH5W&-J}34JqD=8N#^u!CzmIprsvBI&5f9Vk$lQ9bV_w#ykZil`ot( zCD;@^<`5Yl+r_~#LQ^r9o=Gb*T2a%>3Ve5oWL}u^wl1NYt}sZ|NRCs2E4LzJwJxmf zdOqRhub6djp4^^(3_WGpVKNv)d8s=OEt7~sNCa_J_-1=D=26B7$k~gpO$z*s8 zz4%aP-oRze#g9!m83JCvmxpZ48*#j0mLjBAWX@2Qj9$~!*EmO=S)>zNNXnoRnIzQH zf?pcYQI@f_YyBzUC`I_T2F|b8(T+@EUDnbgHuzXFX%qNqnv*R1V-R)}urcUgpYTi- zEk1@!!A`5h8*VQRxBmgYJIm7d9#-@;pky0kqG?xv1n*6Dup zl$#m)$cgY+=7&FG=LF&Vs&nyLf*DO?2Wi549AN_i`Zpe2L*D zGdT)%+RWj@WmC~AdVh@ps7`WA+nn|LJ}YL3oLG>640_RiED$9l6~Jh>&~~oedcT7(bnV9+oOE-y+|xw=a#o()YlI&s(O4~w$5a( zj^GQ1DDZo{C*_Kwd85E!qlmCe38qQ~<~#)qmLVHG6~<>E4|0Ud30cz>=i!OHeOSQ* zdG{{Y11@voNSiH5c;g`%SeuCWuon^Jy_ZfQcW@0Lr-G>UlCD=#)mh(4E=( zfCoz=ReF+udbT8eSK{|xXGNai0~7ebfB3*4#-vmWx;5aCRtVz&%hQ7!C8K&(T9=M3 zmFNd~=-!2WQ4gxOk+GcM_HI5L&bQYxL7gAtcBv93D7=e^OU$~-v=_IF8sQsAO-CM4 zr~8sFJQRG7Dp6Xnzl%K5q;Q{Pd=03RaL7P)O5x$iQCzA7?YXp`kcjRlE?V?>8ptD* zzZ{O>gs?~;HFXFjkFU=2V+j@tLw~G*Ft@3HvEd2u8yox>(F|yi1#|}4jp)ewQb$yR zr9tdVJ;n1bKsmjZHp(OJmiQzjEC@NEVGNY>#0>-@qNX53SiBws(Z&7w!`Qj%&z_^D zl+*_ea�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
    uuPa#jv*!k6D|8?-TjP{ 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

    i+wgA1v&<_(%6V`je)Y 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

    (IWK~-U4c^Om{ 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Ý()arzX(sz?eR3I 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

    nv)GaS}ykl6{a&Tz~V*mVTW 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 + + 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. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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 + +#define __USE_GNU +#include +#undef __USE_GNU + +#include "config.h" + +#if !defined(RTLD_NEXT) +#define RTLD_NEXT RTLD_DEFAULT +#endif + +static int inited = 0; +static int (*real_open)(const char *path, int mode, ...) = NULL; + +static void +init(void) +{ + char *foo; + real_open = dlsym(RTLD_NEXT, "open"); + if (!real_open) + abort(); + inited = 1; +} + +int +open(const char *path, int flags, ...) +{ + va_list ap; + mode_t mode; + + if (!inited) { + init(); + } + + va_start(ap, flags); + mode = va_arg(ap, mode_t); + va_end(ap); + + if (strcmp(path, "/dev/urandom") == 0) { + return real_open("/dev/zero", flags, mode); + } else { + return real_open(path, flags, mode); + } +} diff --git a/regress/open_file_count.test b/regress/open_file_count.test index ef7f01c..56f0447 100644 --- a/regress/open_file_count.test +++ b/regress/open_file_count.test @@ -7,6 +7,6 @@ file incons-file-count-overflow.zzip incons-file-count-overflow.zip incons-file- args incons-file-count-high.zzip incons-file-count-low.zzip incons-file-count-overflow.zzip return 1 stdout opening 'incons-file-count-high.zzip' returned error 21 -stdout opening 'incons-file-count-low.zzip' succeeded, 2 entries +stdout opening 'incons-file-count-low.zzip' returned error 21 stdout opening 'incons-file-count-overflow.zzip' returned error 14 -stderr 2 errors +stderr 3 errors diff --git a/regress/open_many_fail.test b/regress/open_many_fail.test new file mode 100644 index 0000000..d0c154d --- /dev/null +++ b/regress/open_many_fail.test @@ -0,0 +1,11 @@ +# zip_open: files with >65k that have issues +program tryopen +args manyfiles-zip64-modulo.zzip manyfiles-fewer.zzip manyfiles-more.zzip +return 1 +file manyfiles-zip64-modulo.zzip manyfiles-zip64-modulo.zip manyfiles-zip64-modulo.zip +file manyfiles-fewer.zzip manyfiles-fewer.zip manyfiles-fewer.zip +file manyfiles-more.zzip manyfiles-more.zip manyfiles-more.zip +stdout opening 'manyfiles-zip64-modulo.zzip' returned error 21 +stdout opening 'manyfiles-fewer.zzip' returned error 21 +stdout opening 'manyfiles-more.zzip' returned error 21 +stderr 3 errors \ No newline at end of file diff --git a/regress/open_many_ok.test b/regress/open_many_ok.test index 8a9c7ce..248868d 100644 --- a/regress/open_many_ok.test +++ b/regress/open_many_ok.test @@ -1,6 +1,12 @@ -# zip_open: file opens fine, has many > 65k entries +# zip_open: files open fine, have > 65k entries program tryopen -args manyfiles.zip +args manyfiles.zip manyfiles-zip64.zip manyfiles-133000.zip manyfiles-65536.zip return 0 file manyfiles.zip manyfiles.zip manyfiles.zip +file manyfiles-zip64.zip manyfiles-zip64.zip manyfiles-zip64.zip +file manyfiles-133000.zip manyfiles-133000.zip manyfiles-133000.zip +file manyfiles-65536.zip manyfiles-65536.zip manyfiles-65536.zip stdout opening 'manyfiles.zip' succeeded, 70000 entries +stdout opening 'manyfiles-zip64.zip' succeeded, 70000 entries +stdout opening 'manyfiles-133000.zip' succeeded, 133000 entries +stdout opening 'manyfiles-65536.zip' succeeded, 65536 entries diff --git a/regress/progress.test b/regress/progress.test new file mode 100644 index 0000000..8604db2 --- /dev/null +++ b/regress/progress.test @@ -0,0 +1,10 @@ +# test default compression stores if smaller; print progress +return 0 +args -n test.zip print_progress add compressable aaaaaaaaaaaaaa add uncompressable uncompressable add_nul large-compressable 8200 add_file large-uncompressable large-uncompressable 0 -1 +file-new test.zip cm-default.zip +file large-uncompressable large-uncompressable large-uncompressable +stdout 0.0% done +stdout 25.0% done +stdout 50.0% done +stdout 75.0% done +stdout 100.0% done diff --git a/regress/rename_deleted.test b/regress/rename_deleted.test index e4670c6..9dcc7c3 100644 --- a/regress/rename_deleted.test +++ b/regress/rename_deleted.test @@ -2,4 +2,4 @@ return 1 args testfile.zip delete 1 delete 3 rename 1 othername file testfile.zip testcomment.zip testcomment13.zip -stderr can't rename file at index '1' to `othername': Entry has been deleted +stderr can't rename file at index '1' to 'othername': Entry has been deleted diff --git a/regress/rename_fail.test b/regress/rename_fail.test index c10fcbe..185f4e2 100644 --- a/regress/rename_fail.test +++ b/regress/rename_fail.test @@ -2,4 +2,4 @@ return 1 args rename.zip rename 0 file4 file rename.zip testcomment.zip testcomment.zip -stderr can't rename file at index '0' to `file4': File already exists +stderr can't rename file at index '0' to 'file4': File already exists diff --git a/regress/set_compression_unknown.test b/regress/set_compression_unknown.test index 2e50912..9ebf688 100644 --- a/regress/set_compression_unknown.test +++ b/regress/set_compression_unknown.test @@ -2,4 +2,4 @@ return 1 args test.zip set_file_compression 0 unknown 0 file test.zip teststored.zip teststored.zip -stderr can't set file compression method at index '0' to `unknown', flags `0': Compression method not supported +stderr can't set file compression method at index '0' to 'unknown', flags '0': Compression method not supported diff --git a/regress/set_mtime.test b/regress/set_mtime.test new file mode 100644 index 0000000..c80fe4b --- /dev/null +++ b/regress/set_mtime.test @@ -0,0 +1,4 @@ +# change mtime in a zip archive +return 0 +args testfile set_mtime 0 1407272201 +file testfile testfile.zip testfile2014.zip diff --git a/src/Makefile.in b/src/Makefile.in deleted file mode 100644 index e640b34..0000000 --- a/src/Makefile.in +++ /dev/null @@ -1,672 +0,0 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2014 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@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -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@ -bin_PROGRAMS = zipcmp$(EXEEXT) zipmerge$(EXEEXT) ziptool$(EXEEXT) -noinst_PROGRAMS = hole$(EXEEXT) -subdir = src -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) -am_hole_OBJECTS = hole.$(OBJEXT) source_hole.$(OBJEXT) -hole_OBJECTS = $(am_hole_OBJECTS) -hole_LDADD = $(LDADD) -hole_DEPENDENCIES = ${top_builddir}/lib/libzip.la -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = -zipcmp_SOURCES = zipcmp.c -zipcmp_OBJECTS = zipcmp.$(OBJEXT) -zipcmp_LDADD = $(LDADD) -zipcmp_DEPENDENCIES = ${top_builddir}/lib/libzip.la -zipmerge_SOURCES = zipmerge.c -zipmerge_OBJECTS = zipmerge.$(OBJEXT) -zipmerge_LDADD = $(LDADD) -zipmerge_DEPENDENCIES = ${top_builddir}/lib/libzip.la -am_ziptool_OBJECTS = source_hole.$(OBJEXT) ziptool.$(OBJEXT) -ziptool_OBJECTS = $(am_ziptool_OBJECTS) -ziptool_LDADD = $(LDADD) -ziptool_DEPENDENCIES = ${top_builddir}/lib/libzip.la -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -AM_V_CC = $(am__v_CC_@AM_V@) -am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) -am__v_CC_0 = @echo " CC " $@; -am__v_CC_1 = -CCLD = $(CC) -LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -AM_V_CCLD = $(am__v_CCLD_@AM_V@) -am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) -am__v_CCLD_0 = @echo " CCLD " $@; -am__v_CCLD_1 = -SOURCES = $(hole_SOURCES) zipcmp.c zipmerge.c $(ziptool_SOURCES) -DIST_SOURCES = $(hole_SOURCES) zipcmp.c zipmerge.c $(ziptool_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -# Read a list of newline-separated strings from the standard input, -# and print each of them once, without duplicates. Input order is -# *not* preserved. -am__uniquify_input = $(AWK) '\ - BEGIN { nonempty = 0; } \ - { items[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in items) print i; }; } \ -' -# Make sure the list of sources is unique. This is necessary because, -# e.g., the same source file might be shared among _SOURCES variables -# for different programs/libraries. -am__define_uniq_tagged_files = \ - list='$(am__tagged_files)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -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@ -HAVE_VISIBILITY = @HAVE_VISIBILITY@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANFMT = @MANFMT@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -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@ -PKG_CONFIG_RPATH = @PKG_CONFIG_RPATH@ -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_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -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@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -hole_SOURCES = hole.c source_hole.c -ziptool_SOURCES = source_hole.c ziptool.c -AM_CPPFLAGS = -I${top_srcdir}/lib -I../lib -LDADD = ${top_builddir}/lib/libzip.la -EXTRA_DIST = CMakeLists.txt getopt.c getopt.h -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 src/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/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) - @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ - fi; \ - 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 - -clean-noinstPROGRAMS: - @list='$(noinst_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 - -hole$(EXEEXT): $(hole_OBJECTS) $(hole_DEPENDENCIES) $(EXTRA_hole_DEPENDENCIES) - @rm -f hole$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(hole_OBJECTS) $(hole_LDADD) $(LIBS) - -zipcmp$(EXEEXT): $(zipcmp_OBJECTS) $(zipcmp_DEPENDENCIES) $(EXTRA_zipcmp_DEPENDENCIES) - @rm -f zipcmp$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(zipcmp_OBJECTS) $(zipcmp_LDADD) $(LIBS) - -zipmerge$(EXEEXT): $(zipmerge_OBJECTS) $(zipmerge_DEPENDENCIES) $(EXTRA_zipmerge_DEPENDENCIES) - @rm -f zipmerge$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(zipmerge_OBJECTS) $(zipmerge_LDADD) $(LIBS) - -ziptool$(EXEEXT): $(ziptool_OBJECTS) $(ziptool_DEPENDENCIES) $(EXTRA_ziptool_DEPENDENCIES) - @rm -f ziptool$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(ziptool_OBJECTS) $(ziptool_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hole.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/source_hole.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zipcmp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zipmerge.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ziptool.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< - -.c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -ID: $(am__tagged_files) - $(am__define_uniq_tagged_files); mkid -fID $$unique -tags: tags-am -TAGS: tags - -tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - set x; \ - here=`pwd`; \ - $(am__define_uniq_tagged_files); \ - 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-am - -CTAGS: ctags -ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) - $(am__define_uniq_tagged_files); \ - 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" -cscopelist: cscopelist-am - -cscopelist-am: $(am__tagged_files) - list='$(am__tagged_files)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -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) -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: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -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 \ - clean-noinstPROGRAMS 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 TAGS all all-am check check-am clean \ - clean-binPROGRAMS clean-generic clean-libtool \ - clean-noinstPROGRAMS cscopelist-am ctags ctags-am 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 tags-am uninstall uninstall-am uninstall-binPROGRAMS - -.PRECIOUS: Makefile - - -# 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/src/hole.c b/src/hole.c index 70e4e01..b616165 100644 --- a/src/hole.c +++ b/src/hole.c @@ -1,6 +1,6 @@ /* hole.c -- convert huge files with mostly NULs to/from source_hole - Copyright (C) 2014 Dieter Baron and Thomas Klausner + Copyright (C) 2014-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at diff --git a/src/zipcmp.c b/src/zipcmp.c index cf9b572..aac1eea 100644 --- a/src/zipcmp.c +++ b/src/zipcmp.c @@ -1,6 +1,6 @@ /* zipcmp.c -- compare zip files - Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner + Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner This file is part of libzip, a library to manipulate ZIP archives. The authors can be contacted at @@ -107,7 +107,7 @@ char help[] = "\n\ Report bugs to .\n"; char version_string[] = PROGRAM " (" PACKAGE " " VERSION ")\n\ -Copyright (C) 2003-2015 Dieter Baron and Thomas Klausner\n\ +Copyright (C) 2003-2016 Dieter Baron and Thomas Klausner\n\ " PACKAGE " comes with ABSOLUTELY NO WARRANTY, to the extent permitted by law.\n"; #define OPTIONS "hVipqtv" @@ -225,7 +225,8 @@ compare_zip(char * const zn[]) if (list_zip(zn[i], a+i) < 0) exit(2); } - qsort(a[i].entry, a[i].nentry, sizeof(a[i].entry[0]), entry_cmp); + if (a[i].nentry > 0) + qsort(a[i].entry, a[i].nentry, sizeof(a[i].entry[0]), entry_cmp); } header_done = 0; diff --git a/src/ziptool.c b/src/ziptool.c index 062267e..2994cb2 100644 --- a/src/ziptool.c +++ b/src/ziptool.c @@ -71,8 +71,9 @@ typedef struct dispatch_table_s { static zip_flags_t get_flags(const char *arg); static zip_int32_t get_compression_method(const char *arg); +static zip_uint16_t get_encryption_method(const char *arg); static void hexdump(const zip_uint8_t *data, zip_uint16_t len); -static zip_t *read_to_memory(const char *archive, int flags, int *err, zip_source_t **srcp); +static zip_t *read_to_memory(const char *archive, int flags, zip_error_t *error, zip_source_t **srcp); static zip_source_t *source_nul(zip_t *za, zip_uint64_t length); zip_t *za, *z_in[16]; @@ -208,8 +209,8 @@ cat(int argc, char *argv[]) { } } if (n == -1) { - zip_fclose(zf); fprintf(stderr, "can't read file at index '%" PRIu64 "': %s\n", idx, zip_file_strerror(zf)); + zip_fclose(zf); return -1; } if ((err = zip_fclose(zf)) != 0) { @@ -249,7 +250,7 @@ count_extra_by_id(int argc, char *argv[]) { eid = (zip_uint16_t)strtoull(argv[1], NULL, 10); ceflags = get_flags(argv[2]); if ((count=zip_file_extra_fields_count_by_id(za, idx, eid, ceflags)) < 0) { - fprintf(stderr, "can't get extra field count for file at index '%" PRIu64 "' and for id `%d': %s\n", idx, eid, zip_strerror(za)); + fprintf(stderr, "can't get extra field count for file at index '%" PRIu64 "' and for id '%d': %s\n", idx, eid, zip_strerror(za)); return -1; } else { printf("Extra field count: %d\n", count); @@ -277,7 +278,7 @@ delete_extra(int argc, char *argv[]) { eid = (zip_uint16_t)strtoull(argv[1], NULL, 10); geflags = get_flags(argv[2]); if ((zip_file_extra_field_delete(za, idx, eid, geflags)) < 0) { - fprintf(stderr, "can't delete extra field data for file at index '%" PRIu64 "', extra field id `%d': %s\n", idx, eid, zip_strerror(za)); + fprintf(stderr, "can't delete extra field data for file at index '%" PRIu64 "', extra field id '%d': %s\n", idx, eid, zip_strerror(za)); return -1; } return 0; @@ -293,7 +294,7 @@ delete_extra_by_id(int argc, char *argv[]) { eidx = (zip_uint16_t)strtoull(argv[2], NULL, 10); geflags = get_flags(argv[3]); if ((zip_file_extra_field_delete_by_id(za, idx, eid, eidx, geflags)) < 0) { - fprintf(stderr, "can't delete extra field data for file at index '%" PRIu64 "', extra field id `%d', extra field idx `%d': %s\n", idx, eid, eidx, zip_strerror(za)); + fprintf(stderr, "can't delete extra field data for file at index '%" PRIu64 "', extra field id '%d', extra field idx '%d': %s\n", idx, eid, eidx, zip_strerror(za)); return -1; } return 0; @@ -400,12 +401,23 @@ name_locate(int argc, char *argv[]) { return 0; } +static void +progress_callback(double percentage) { + printf("%.1lf%% done\n", percentage*100); +} + +static int +print_progress(int argc, char *argv[]) { + zip_register_progress_callback(za, progress_callback); + return 0; +} + static int zrename(int argc, char *argv[]) { zip_uint64_t idx; idx = strtoull(argv[0], NULL, 10); if (zip_rename(za, idx, argv[1]) < 0) { - fprintf(stderr, "can't rename file at index '%" PRIu64 "' to `%s': %s\n", idx, argv[1], zip_strerror(za)); + fprintf(stderr, "can't rename file at index '%" PRIu64 "' to '%s': %s\n", idx, argv[1], zip_strerror(za)); return -1; } return 0; @@ -440,7 +452,7 @@ set_extra(int argc, char *argv[]) { geflags = get_flags(argv[3]); efdata = (zip_uint8_t *)argv[4]; if ((zip_file_extra_field_set(za, idx, eid, eidx, efdata, (zip_uint16_t)strlen((const char *)efdata), geflags)) < 0) { - fprintf(stderr, "can't set extra field data for file at index '%" PRIu64 "', extra field id `%d', index `%d': %s\n", idx, eid, eidx, zip_strerror(za)); + fprintf(stderr, "can't set extra field data for file at index '%" PRIu64 "', extra field id '%d', index '%d': %s\n", idx, eid, eidx, zip_strerror(za)); return -1; } return 0; @@ -449,7 +461,7 @@ set_extra(int argc, char *argv[]) { static int set_archive_comment(int argc, char *argv[]) { if (zip_set_archive_comment(za, argv[0], (zip_uint16_t)strlen(argv[0])) < 0) { - fprintf(stderr, "can't set archive comment to `%s': %s\n", argv[0], zip_strerror(za)); + fprintf(stderr, "can't set archive comment to '%s': %s\n", argv[0], zip_strerror(za)); return -1; } return 0; @@ -460,7 +472,7 @@ set_file_comment(int argc, char *argv[]) { zip_uint64_t idx; idx = strtoull(argv[0], NULL, 10); if (zip_file_set_comment(za, idx, argv[1], (zip_uint16_t)strlen(argv[1]), 0) < 0) { - fprintf(stderr, "can't set file comment at index '%" PRIu64 "' to `%s': %s\n", idx, argv[1], zip_strerror(za)); + fprintf(stderr, "can't set file comment at index '%" PRIu64 "' to '%s': %s\n", idx, argv[1], zip_strerror(za)); return -1; } return 0; @@ -475,7 +487,25 @@ set_file_compression(int argc, char *argv[]) { method = get_compression_method(argv[1]); flags = (zip_uint32_t)strtoull(argv[2], NULL, 10); if (zip_set_file_compression(za, idx, method, flags) < 0) { - fprintf(stderr, "can't set file compression method at index '%" PRIu64 "' to `%s', flags `%d': %s\n", idx, argv[1], flags, zip_strerror(za)); + fprintf(stderr, "can't set file compression method at index '%" PRIu64 "' to '%s', flags '%d': %s\n", idx, argv[1], flags, zip_strerror(za)); + return -1; + } + return 0; +} + +static int +set_file_encryption(int argc, char *argv[]) { + zip_int32_t method; + zip_uint64_t idx; + char *password; + idx = strtoull(argv[0], NULL, 10); + method = get_encryption_method(argv[1]); + password = argv[2]; + if (strlen(password) == 0) { + password = NULL; + } + if (zip_file_set_encryption(za, idx, method, password) < 0) { + fprintf(stderr, "can't set file encryption method at index '%" PRIu64 "' to '%s': %s\n", idx, argv[1], zip_strerror(za)); return -1; } return 0; @@ -489,7 +519,7 @@ set_file_mtime(int argc, char *argv[]) { idx = strtoull(argv[0], NULL, 10); mtime = (time_t)strtoull(argv[1], NULL, 10); if (zip_file_set_mtime(za, idx, mtime, 0) < 0) { - fprintf(stderr, "can't set file mtime at index '%" PRIu64 "' to `%ld': %s\n", idx, mtime, zip_strerror(za)); + fprintf(stderr, "can't set file mtime at index '%" PRIu64 "' to '%ld': %s\n", idx, mtime, zip_strerror(za)); return -1; } return 0; @@ -502,14 +532,14 @@ set_file_mtime_all(int argc, char *argv[]) { zip_int64_t num_entries; zip_uint64_t idx; mtime = (time_t)strtoull(argv[0], NULL, 10); - + if ((num_entries = zip_get_num_entries(za, 0)) < 0) { fprintf(stderr, "can't get number of entries: %s\n", zip_strerror(za)); return -1; } for (idx = 0; idx < (zip_uint64_t)num_entries; idx++) { if (zip_file_set_mtime(za, idx, mtime, 0) < 0) { - fprintf(stderr, "can't set file mtime at index '%" PRIu64 "' to `%ld': %s\n", idx, mtime, zip_strerror(za)); + fprintf(stderr, "can't set file mtime at index '%" PRIu64 "' to '%ld': %s\n", idx, mtime, zip_strerror(za)); return -1; } } @@ -520,7 +550,7 @@ static int set_password(int argc, char *argv[]) { /* set default password */ if (zip_set_default_password(za, argv[0]) < 0) { - fprintf(stderr, "can't set default password to `%s'", argv[0]); + fprintf(stderr, "can't set default password to '%s'\n", argv[0]); return -1; } return 0; @@ -617,13 +647,29 @@ get_compression_method(const char *arg) return ZIP_CM_DEFAULT; else if (strcmp(arg, "store") == 0) return ZIP_CM_STORE; - else if (strcmp(arg, "deflate") ==0) + else if (strcmp(arg, "deflate") == 0) return ZIP_CM_DEFLATE; - else if (strcmp(arg, "unknown") ==0) - return 99; + else if (strcmp(arg, "unknown") == 0) + return 100; return 0; /* TODO: error handling */ } +static zip_uint16_t +get_encryption_method(const char *arg) +{ + if (strcmp(arg, "none") == 0) + return ZIP_EM_NONE; + else if (strcmp(arg, "AES-128") == 0) + return ZIP_EM_AES_128; + else if (strcmp(arg, "AES-192") == 0) + return ZIP_EM_AES_192; + else if (strcmp(arg, "AES-256") == 0) + return ZIP_EM_AES_256; + else if (strcmp(arg, "unknown") == 0) + return 100; + return (zip_uint16_t)-1; /* TODO: error handling */ +} + static void hexdump(const zip_uint8_t *data, zip_uint16_t len) { @@ -642,19 +688,43 @@ hexdump(const zip_uint8_t *data, zip_uint16_t len) static zip_t * -read_hole(const char *archive, int flags, int *err) +read_from_file(const char *archive, int flags, zip_error_t *error, zip_uint64_t offset, zip_uint64_t length) +{ + zip_t *zaa; + zip_source_t *source; + int err; + + if (offset == 0 && length == 0) { + if ((zaa = zip_open(archive, flags, &err)) == NULL) { + zip_error_set(error, err, errno); + return NULL; + } + } + else { + if (length > ZIP_INT64_MAX) { + zip_error_set(error, ZIP_ER_INVAL, 0); + return NULL; + } + if ((source = zip_source_file_create(archive, offset, (zip_int64_t)length, error)) == NULL + || (zaa = zip_open_from_source(source, flags, error)) == NULL) { + zip_source_free(source); + return NULL; + } + } + + return zaa; +} + + +static zip_t * +read_hole(const char *archive, int flags, zip_error_t *error) { - zip_error_t error; zip_source_t *src = NULL; zip_t *zs = NULL; - zip_error_init(&error); - - if ((src = source_hole_create(archive, flags, &error)) == NULL - || (zs = zip_open_from_source(src, flags, &error)) == NULL) { + if ((src = source_hole_create(archive, flags, error)) == NULL + || (zs = zip_open_from_source(src, flags, error)) == NULL) { zip_source_free(src); - *err = zip_error_code_zip(&error); - errno = zip_error_code_system(&error); } return zs; @@ -662,19 +732,18 @@ read_hole(const char *archive, int flags, int *err) static zip_t * -read_to_memory(const char *archive, int flags, int *err, zip_source_t **srcp) +read_to_memory(const char *archive, int flags, zip_error_t *error, zip_source_t **srcp) { struct stat st; zip_source_t *src; zip_t *zb; - zip_error_t error; if (stat(archive, &st) < 0) { if (errno == ENOENT) { - src = zip_source_buffer_create(NULL, 0, 0, &error); + src = zip_source_buffer_create(NULL, 0, 0, error); } else { - *err = ZIP_ER_OPEN; + zip_error_set(error, ZIP_ER_OPEN, errno); return NULL; } } @@ -682,35 +751,31 @@ read_to_memory(const char *archive, int flags, int *err, zip_source_t **srcp) char *buf; FILE *fp; if ((buf=malloc((size_t)st.st_size)) == NULL) { - *err = ZIP_ER_MEMORY; + zip_error_set(error, ZIP_ER_MEMORY, 0); return NULL; } if ((fp=fopen(archive, "r")) == NULL) { free(buf); - *err = ZIP_ER_READ; + zip_error_set(error, ZIP_ER_READ, errno); return NULL; } if (fread(buf, (size_t)st.st_size, 1, fp) < 1) { free(buf); fclose(fp); - *err = ZIP_ER_READ; + zip_error_set(error, ZIP_ER_READ, errno); return NULL; } fclose(fp); - src = zip_source_buffer_create(buf, (zip_uint64_t)st.st_size, 1, &error); + src = zip_source_buffer_create(buf, (zip_uint64_t)st.st_size, 1, error); if (src == NULL) { free(buf); } } if (src == NULL) { - *err = zip_error_code_zip(&error); - errno = zip_error_code_system(&error); return NULL; } - zb = zip_open_from_source(src, flags, &error); + zb = zip_open_from_source(src, flags, error); if (zb == NULL) { - *err = zip_error_code_zip(&error); - errno = zip_error_code_system(&error); zip_source_free(src); return NULL; } @@ -877,12 +942,14 @@ dispatch_table_t dispatch_table[] = { { "get_file_comment", 1, "index", "get file comment", get_file_comment }, { "get_num_entries", 1, "flags", "get number of entries in archive", get_num_entries }, { "name_locate", 2, "name flags", "find entry in archive", name_locate }, + { "print_progress", 0, "", "print progress during zip_close()", print_progress }, { "rename", 2, "index name", "rename entry", zrename }, { "replace_file_contents", 2, "index data", "replace entry with data", replace_file_contents }, { "set_archive_comment", 1, "comment", "set archive comment", set_archive_comment }, { "set_extra", 5, "index extra_id extra_index flags value", "set extra field", set_extra }, { "set_file_comment", 2, "index comment", "set file comment", set_file_comment }, { "set_file_compression", 3, "index method compression_flags", "set file compression method", set_file_compression }, + { "set_file_encryption", 3, "index method password", "set file encryption method", set_file_encryption }, { "set_file_mtime", 2, "index timestamp", "set file modification time", set_file_mtime }, { "set_file_mtime_all", 1, "timestamp", "set file modification time for all files", set_file_mtime_all }, { "set_password", 1, "password", "set default password for encryption", set_password }, @@ -924,28 +991,31 @@ usage(const char *progname, const char *reason) out = stdout; else out = stderr; - fprintf(out, "usage: %s [-cegHhmnrst] archive command1 [args] [command2 [args] ...]\n", progname); + fprintf(out, "usage: %s [-cegHhmnrst] [-l len] [-o offset] archive command1 [args] [command2 [args] ...]\n", progname); if (reason != NULL) { fprintf(out, "%s\n", reason); exit(1); } fprintf(out, "\nSupported options are:\n" - "\t-c\tcheck consistency\n" - "\t-e\terror if archive already exists (only useful with -n)\n" - "\t-g\tguess file name encoding (for stat)\n" - "\t-H\twrite files with holes compactly\n" - "\t-h\tdisplay this usage\n" - "\t-m\tread archive into memory, and modify there; write out at end\n" - "\t-n\tcreate archive if it doesn't exist\n" - "\t-r\tprint raw file name encoding without translation (for stat)\n" - "\t-s\tfollow file name convention strictly (for stat)\n" - "\t-t\tdisregard current archive contents, if any\n"); + "\t-c\t\tcheck consistency\n" + "\t-e\t\terror if archive already exists (only useful with -n)\n" + "\t-g\t\tguess file name encoding (for stat)\n" + "\t-H\t\twrite files with holes compactly\n" + "\t-h\t\tdisplay this usage\n" + "\t-l len\t\tonly use len bytes of file\n" + "\t-m\t\tread archive into memory, and modify there; write out at end\n" + "\t-n\t\tcreate archive if it doesn't exist\n" + "\t-o offset\tstart reading file at offset\n" + "\t-r\t\tprint raw file name encoding without translation (for stat)\n" + "\t-s\t\tfollow file name convention strictly (for stat)\n" + "\t-t\t\tdisregard current archive contents, if any\n"); fprintf(out, "\nSupported commands and arguments are:\n"); for (i=0; i= argc-1) + usage(prg, "too few arguments"); + arg = optind; archive = argv[arg++]; @@ -1024,27 +1107,26 @@ main(int argc, char *argv[]) if (flags == 0) flags = ZIP_CREATE; + zip_error_init(&error); switch (source_type) { - case SOURCE_TYPE_NONE: - za = zip_open(archive, flags, &err); - break; + case SOURCE_TYPE_NONE: + za = read_from_file(archive, flags, &error, offset, len); + break; case SOURCE_TYPE_IN_MEMORY: - za = read_to_memory(archive, flags, &err, &memory_src); + za = read_to_memory(archive, flags, &error, &memory_src); break; - case SOURCE_TYPE_HOLE: { - za = read_hole(archive, flags, &err); + case SOURCE_TYPE_HOLE: + za = read_hole(archive, flags, &error); break; - } } if (za == NULL) { - zip_error_t error; - zip_error_init_with_code(&error, err); fprintf(stderr, "can't open zip archive '%s': %s\n", archive, zip_error_strerror(&error)); zip_error_fini(&error); return 1; } + zip_error_fini(&error); err = 0; while (arg < argc) { diff --git a/test-driver b/test-driver deleted file mode 100755 index 8e575b0..0000000 --- a/test-driver +++ /dev/null @@ -1,148 +0,0 @@ -#! /bin/sh -# test-driver - basic testsuite driver script. - -scriptversion=2013-07-13.22; # UTC - -# Copyright (C) 2011-2014 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. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -# Make unconditional expansion of undefined variables an error. This -# helps a lot in preventing typo-related bugs. -set -u - -usage_error () -{ - echo "$0: $*" >&2 - print_usage >&2 - exit 2 -} - -print_usage () -{ - cat <$log_file 2>&1 -estatus=$? - -if test $enable_hard_errors = no && test $estatus -eq 99; then - tweaked_estatus=1 -else - tweaked_estatus=$estatus -fi - -case $tweaked_estatus:$expect_failure in - 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; - 0:*) col=$grn res=PASS recheck=no gcopy=no;; - 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; - 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; - *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; - *:*) col=$red res=FAIL recheck=yes gcopy=yes;; -esac - -# Report the test outcome and exit status in the logs, so that one can -# know whether the test passed or failed simply by looking at the '.log' -# file, without the need of also peaking into the corresponding '.trs' -# file (automake bug#11814). -echo "$res $test_name (exit status: $estatus)" >>$log_file - -# Report outcome to console. -echo "${col}${res}${std}: $test_name" - -# Register the test result, and other relevant metadata. -echo ":test-result: $res" > $trs_file -echo ":global-test-result: $res" >> $trs_file -echo ":recheck: $recheck" >> $trs_file -echo ":copy-in-global-log: $gcopy" >> $trs_file - -# 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/vstudio/readme.txt b/vstudio/readme.txt new file mode 100644 index 0000000..72b7546 --- /dev/null +++ b/vstudio/readme.txt @@ -0,0 +1,77 @@ +Building libzip with Microsoft Visual C++ +========================================= +The script vsbuild.cmd can be used to build (and optionally test) libzip using +Microsoft Visual C++. + +Prerequisites +------------- +Windows Server 2003 or Windows Vista or later (tested with Windows 7 x64) +Microsoft Visual Studio (tested with VS2013 Premium) +CMake (tested with version 3.3.1) +Source code for zlib (tested with version 1.2.8) + +To run tests, you will also need: +Perl interpreter (tested with ActiveState ActivePerl 5.20.2 64-bit) +CPAN module IPC::Cmd (comes with ActivePerl) + +You'll also need to make sure all of the above (specifically: msbuild.exe, +cmake.exe and perl.exe) are in your PATH at the time of running the script. + +Unpacking zlib +-------------- +Because libzip depends on zlib, the vsbuild.cmd script takes care of building +zlib for you as well. Download the source code from http://zlib.org/ and extract +all the files and subdirectories from the "zlib-x.y.z" directory into +vstudio/zlib. + +Building libzip with Visual Studio 2013 for the impatient +--------------------------------------------------------- +1. Make sure all the prerequisites (see above) are installed and in your PATH. +2. Don't forget to unpack zlib (see "Unpacking zlib" above). +3. Open a Visual Studio Command Prompt in the "vstudio" directory (the directory + containing this file). +4. Enter the following command for a 32-bit x86 build: + vsbuild build "Visual Studio 12" v120 + or for a 64-bit x64 build: + vsbuild build "Visual Studio 12 Win64" v120 + +If you'd like to run the tests as well, use one of the following commands: +vsbuild build+test "Visual Studio 12" v120 +vsbuild build+test "Visual Studio 12 Win64" v120 + +Building libzip +--------------- +The script vsbuild.cmd has three modes of operation, with the following syntax: +vsbuild clean +vsbuild build +vsbuild build+test + +"vsbuild clean" deletes all output and intermediate files and directories +generated by the build process. + +"vsbuild build" just builds zlib and libzip and leaves the DLL files in the +following locations: +vstudio/zlib/installed/bin/zlib.dll +vstudio/zlib/installed/bin/zlibd.dll +build/lib/Debug/zip.dll +build/lib/Release/zip.dll + +"vsbuild build+test" builds zlib and libzip as above, then runs the libzip +regression test suite. + +The "build" and "build+test" commands require the following parameters: + +: The CMake generator to use for project files. This identifies the +version of Visual Studio you're using, and also allows you to specify whether +the 32-bit or 64-bit of the libraries should be built. +I've tested "Visual Studio 12" (VS2013 x86) and "Visual Studio 12 Win64" +(VS2013 x64) but other versions should work as well. Run "cmake --help" for a +list of generators. + +: Specifies the platform toolset to use. Normally, this will match the +version of Visual Studio (e.g. "v120" for Visual Studio 2013 aka Visual Studio +12). See the Visual Studio documentation for more information about platform +toolsets. + +Andrew Molyneux +andrew@molyneuxfamily.co.uk \ No newline at end of file diff --git a/vstudio/vsbuild.cmd b/vstudio/vsbuild.cmd new file mode 100644 index 0000000..8baf094 --- /dev/null +++ b/vstudio/vsbuild.cmd @@ -0,0 +1,193 @@ +@echo off +setlocal enableextensions enabledelayedexpansion + +rem --------------------------------------------------------------------------- +rem Check that required commands are in the PATH. +rem --------------------------------------------------------------------------- +set CHECK_CMD=cmake.exe +set CHECK_DESC=CMake +call :check_installed +set CHECK_CMD=msbuild.exe +set CHECK_DESC=MSBuild +call :check_installed + +rem --------------------------------------------------------------------------- +rem Parse command-line arguments. +rem %1: Command ("build" or "clean") +rem %2: Generator (e.g. "Visual Studio 12" for VS2013) +rem %3: Platform toolset (e.g. "v120_xp" for VS2013 toolset for Windows XP) +rem --------------------------------------------------------------------------- +if "%1"=="clean" ( + echo Cleaning + if exist zlib\installed rmdir /s /q zlib\installed + if errorlevel 1 goto exit_failure + if exist zlib\build rmdir /s /q zlib\build + if errorlevel 1 goto exit_failure + if exist ..\build rmdir /s /q ..\build + if errorlevel 1 goto exit_failure + if exist ..\regress\bigzero.zip del ..\regress\bigzero.zip + if errorlevel 1 goto exit_failure + if exist ..\regress\manyfiles.zip del ..\regress\manyfiles.zip + if errorlevel 1 goto exit_failure + echo Done + exit /b 0 +) else if "%1"=="build" ( + set CMAKE_GENERATOR=%2 + set CMAKE_TOOLSET=%3 + set LIBZIP_RUN_TESTS=false +) else if "%1"=="build+test" ( + set CMAKE_GENERATOR=%2 + set CMAKE_TOOLSET=%3 + set LIBZIP_RUN_TESTS=true +) else ( + echo Invalid command "%1" + exit /b 1 +) + +rem --------------------------------------------------------------------------- +rem If we're running tests, we'll also need a Perl interpreter. +rem --------------------------------------------------------------------------- +if "%LIBZIP_RUN_TESTS%"=="true" ( + set CHECK_CMD=perl.exe + set CHECK_DESC=a Perl interpreter (to run tests) + call :check_installed +) + +rem --------------------------------------------------------------------------- +rem Configure and build zlib. +rem --------------------------------------------------------------------------- +pushd zlib +for /f %%p in (".\installed") do set ZLIB_INSTALL_PATH=%%~fp +echo zlib will be "installed" to %ZLIB_INSTALL_PATH% +if not exist build ( + mkdir build + if errorlevel 1 popd & goto exit_failure +) +cd build +if errorlevel 1 popd & goto exit_failure +echo Configuring zlib +cmake .. -G %CMAKE_GENERATOR% -T %CMAKE_TOOLSET% -DCMAKE_INSTALL_PREFIX="%ZLIB_INSTALL_PATH%" +if errorlevel 1 popd & goto exit_failure +echo Building zlib +msbuild /P:Configuration=Debug INSTALL.vcxproj +if errorlevel 1 popd & goto exit_failure +msbuild /P:Configuration=Release INSTALL.vcxproj +if errorlevel 1 popd & goto exit_failure +popd + +rem --------------------------------------------------------------------------- +rem regress/CMakeLists.txt thinks the Perl script to run a test is called +rem runtest, but on Windows we have to explicitly start the Perl interpreter +rem because cmd.exe doesn't do "shebang". +rem Fix this up before configuring libzip. +rem --------------------------------------------------------------------------- +if "%LIBZIP_RUN_TESTS%"=="true" ( + echo Fixing up runtest script for Windows + pushd ..\regress + rem Get the full path to the Perl interpreter, with backslashes replaced by + rem forward slashes. + for /f "usebackq tokens=*" %%a in (`where perl.exe`) do set PERL_PATH=%%a + set PERL_PATH=!PERL_PATH:\=/! + echo Path to Perl interpreter is !PERL_PATH! + + rem Fix up the CMakeLists.txt file. + perl -p -e "s|\$\{CMAKE_CURRENT_SOURCE_DIR\}/runtest|!PERL_PATH! \$\{CMAKE_CURRENT_BINARY_DIR\}/runtest|;" CMakeLists.txt > CMakeLists.fixed.txt + if errorlevel 1 popd & goto exit_failure + rename CMakeLists.txt CMakeLists.orig.txt + if errorlevel 1 popd & goto exit_failure + rename CMakeLists.fixed.txt CMakeLists.txt + if errorlevel 1 popd & goto exit_failure + popd +) + +rem --------------------------------------------------------------------------- +rem Prepare the build directory and run CMake to configure the project. +rem --------------------------------------------------------------------------- +pushd .. +if not exist build ( + echo Creating build directory + mkdir build + if errorlevel 1 popd & goto exit_failure +) +cd build +if errorlevel 1 popd & goto exit_failure +cmake .. -G %CMAKE_GENERATOR% -T %CMAKE_TOOLSET% -DCMAKE_PREFIX_PATH="%ZLIB_INSTALL_PATH%" +if errorlevel 1 popd & goto exit_failure +call :revert_cmakelists + +rem --------------------------------------------------------------------------- +rem Build libzip. +rem --------------------------------------------------------------------------- +msbuild /P:Configuration=Debug ALL_BUILD.vcxproj +if errorlevel 1 popd & goto exit_failure +msbuild /P:Configuration=Release ALL_BUILD.vcxproj +if errorlevel 1 popd & goto exit_failure +popd + +rem --------------------------------------------------------------------------- +rem Copy DLLs so zipcmp/zipmerge can run. +rem --------------------------------------------------------------------------- +echo Copying DLLs +copy zlib\installed\bin\zlibd.dll ..\build\src\Debug +if errorlevel 1 goto exit_failure +copy zlib\installed\bin\zlib.dll ..\build\src\Release +if errorlevel 1 goto exit_failure +copy ..\build\lib\Release\zip.dll ..\build\src\Release +if errorlevel 1 goto exit_failure +copy ..\build\lib\Debug\zip.dll ..\build\src\Debug +if errorlevel 1 goto exit_failure + +rem --------------------------------------------------------------------------- +rem Run the tests, if required. +rem --------------------------------------------------------------------------- +if "%LIBZIP_RUN_TESTS%"=="true" ( + echo Copying libraries for tests + pushd ..\build\regress + copy ..\..\vstudio\zlib\installed\bin\zlib.dll . + if errorlevel 1 popd & goto exit_failure + copy ..\lib\Release\zip.dll . + if errorlevel 1 popd & goto exit_failure + copy Release\*.exe . + if errorlevel 1 popd & goto exit_failure + echo Extracting test files + if not exist ..\..\regress\bigzero.zip ziptool ..\..\regress\bigzero-zip.zip cat 0 > ..\..\regress\bigzero.zip + if errorlevel 1 popd & goto exit_failure + if not exist ..\..\regress\manyfiles.zip ziptool ..\..\regress\manyfiles-zip.zip cat 0 > ..\..\regress\manyfiles.zip + if errorlevel 1 popd & goto exit_failure + echo Generating runtest script + for /f %%p in ("..\..\regress") do set ABS_SRCDIR=%%~fp + set ABS_SRCDIR=!ABS_SRCDIR:\=\\! + perl -p -e "s/@[s]rcdir@/..\\..\\regress/g;s/@[a]bs_srcdir@/!ABS_SRCDIR!/g;s|../../src/zipcmp|..\\..\\src\\Release\\zipcmp|g;" ..\..\regress\runtest.in > runtest + if errorlevel 1 popd & goto exit_failure + echo Running tests + ctest + if errorlevel 1 popd & goto exit_failure + popd +) + +goto :EOF + +:check_installed +where %CHECK_CMD% > nul 2>&1 +if "%errorlevel%"=="9009" ( + echo This build script requires where.exe. If running on Windows XP or + echo earlier, this can be found in the Windows Resource Kit. + exit /b 1 +) +if errorlevel 1 ( + echo Please make sure that %CHECK_DESC% is installed and in your PATH. + exit /b 1 +) +goto :EOF + +:revert_cmakelists +if exist ..\regress\CMakeLists.orig.txt ( + del ..\regress\CMakeLists.txt + rename ..\regress\CMakeLists.orig.txt CMakeLists.txt +) +goto :EOF + +:exit_failure +call :revert_cmakelists +echo Build failed. +exit /b 1 diff --git a/vstudio/zlib/unpack_zlib_here.txt b/vstudio/zlib/unpack_zlib_here.txt new file mode 100644 index 0000000..f4e51a6 --- /dev/null +++ b/vstudio/zlib/unpack_zlib_here.txt @@ -0,0 +1 @@ +Unpack zlib source archive into this directory. \ No newline at end of file diff --git a/xcode/config.h b/xcode/config.h index 7f77787..cf2c0db 100644 --- a/xcode/config.h +++ b/xcode/config.h @@ -157,7 +157,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.0.1a" +#define PACKAGE_VERSION "1.2.0" /* The size of `int', as computed by sizeof. */ #define SIZEOF_INT 4 @@ -192,7 +192,7 @@ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ -#define VERSION "1.0.1a" +#define VERSION "1.2.0" /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE diff --git a/xcode/libzip.xcodeproj/project.pbxproj b/xcode/libzip.xcodeproj/project.pbxproj index c8c7baf..597e8fe 100644 --- a/xcode/libzip.xcodeproj/project.pbxproj +++ b/xcode/libzip.xcodeproj/project.pbxproj @@ -171,6 +171,12 @@ 4B01D73215B2F5EE002D5007 /* zipconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BDC729E15B1B4E900236D3C /* zipconf.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4B01D73415B2F5F4002D5007 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BDC72A015B1B56400236D3C /* config.h */; }; 4B01D73C15B2F6AF002D5007 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B01D70815B2F4CF002D5007 /* libz.dylib */; }; + 4B3A5F501DF96EA8005A53A1 /* gladman-fcrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3A5F4B1DF96D83005A53A1 /* gladman-fcrypt.c */; }; + 4B3A5F511DF96EA9005A53A1 /* gladman-fcrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3A5F4B1DF96D83005A53A1 /* gladman-fcrypt.c */; }; + 4B3A5F521DF96EB4005A53A1 /* zip_fseek.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3A5F4D1DF96D83005A53A1 /* zip_fseek.c */; }; + 4B3A5F531DF96EB4005A53A1 /* zip_ftell.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3A5F4E1DF96D83005A53A1 /* zip_ftell.c */; }; + 4B3A5F541DF96EB5005A53A1 /* zip_fseek.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3A5F4D1DF96D83005A53A1 /* zip_fseek.c */; }; + 4B3A5F551DF96EB5005A53A1 /* zip_ftell.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3A5F4E1DF96D83005A53A1 /* zip_ftell.c */; }; 4B82CED419915F360097BC18 /* zip_file_set_mtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B82CED319915F360097BC18 /* zip_file_set_mtime.c */; }; 4B82CED519915F360097BC18 /* zip_file_set_mtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B82CED319915F360097BC18 /* zip_file_set_mtime.c */; }; 4B97204F188EBE85002FAFAD /* zip_file_get_external_attributes.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B97204D188EBE85002FAFAD /* zip_file_get_external_attributes.c */; }; @@ -307,6 +313,14 @@ 4BDC729615B1B25E00236D3C /* zip_utf-8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BDC724315B1B25E00236D3C /* zip_utf-8.c */; }; 4BDC729B15B1B2C400236D3C /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BDC729815B1B2A600236D3C /* zip.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4BDC729F15B1B4E900236D3C /* zipconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BDC729E15B1B4E900236D3C /* zipconf.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 736ED9BB1E3D6B6B00C36873 /* zip_source_winzip_aes_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 736ED9B91E3D688C00C36873 /* zip_source_winzip_aes_decode.c */; }; + 736ED9BC1E3D6B6F00C36873 /* zip_source_winzip_aes_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 736ED9BA1E3D688C00C36873 /* zip_source_winzip_aes_encode.c */; }; + 736ED9BD1E3D6B7200C36873 /* zip_random_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 736ED9B81E3D688C00C36873 /* zip_random_unix.c */; }; + 736ED9BE1E3D6B7C00C36873 /* zip_file_set_encryption.c in Sources */ = {isa = PBXBuildFile; fileRef = 736ED9B71E3D688C00C36873 /* zip_file_set_encryption.c */; }; + 736ED9BF1E3D6B7C00C36873 /* zip_file_set_encryption.c in Sources */ = {isa = PBXBuildFile; fileRef = 736ED9B71E3D688C00C36873 /* zip_file_set_encryption.c */; }; + 736ED9C01E3D6B8000C36873 /* zip_random_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 736ED9B81E3D688C00C36873 /* zip_random_unix.c */; }; + 736ED9C11E3D6B8300C36873 /* zip_source_winzip_aes_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 736ED9B91E3D688C00C36873 /* zip_source_winzip_aes_decode.c */; }; + 736ED9C21E3D6B8600C36873 /* zip_source_winzip_aes_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 736ED9BA1E3D688C00C36873 /* zip_source_winzip_aes_encode.c */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -631,6 +645,11 @@ 4B28AA2515BAD4E200D0C17D /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; 4B28AA2615BAD4E200D0C17D /* THANKS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = THANKS; sourceTree = ""; }; 4B28AA2715BAD4E200D0C17D /* TODO */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TODO; sourceTree = ""; }; + 4B3A5F4A1DF96D83005A53A1 /* gladman-fcrypt */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "gladman-fcrypt"; sourceTree = ""; }; + 4B3A5F4B1DF96D83005A53A1 /* gladman-fcrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "gladman-fcrypt.c"; sourceTree = ""; }; + 4B3A5F4C1DF96D83005A53A1 /* gladman-fcrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gladman-fcrypt.h"; sourceTree = ""; }; + 4B3A5F4D1DF96D83005A53A1 /* zip_fseek.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fseek.c; sourceTree = ""; }; + 4B3A5F4E1DF96D83005A53A1 /* zip_ftell.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_ftell.c; sourceTree = ""; }; 4B82CED319915F360097BC18 /* zip_file_set_mtime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_mtime.c; sourceTree = ""; }; 4B97204D188EBE85002FAFAD /* zip_file_get_external_attributes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_get_external_attributes.c; sourceTree = ""; }; 4B97204E188EBE85002FAFAD /* zip_file_set_external_attributes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_external_attributes.c; sourceTree = ""; }; @@ -875,6 +894,10 @@ 4BDC72A015B1B56400236D3C /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = SOURCE_ROOT; }; 4BE402AC19D94AE400298248 /* zip_source_is_deleted.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_is_deleted.c; sourceTree = ""; }; 4BEF35C31AF4D92D00974F28 /* zip_source_win32handle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_win32handle.c; sourceTree = ""; }; + 736ED9B71E3D688C00C36873 /* zip_file_set_encryption.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_encryption.c; sourceTree = ""; }; + 736ED9B81E3D688C00C36873 /* zip_random_unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_random_unix.c; sourceTree = ""; }; + 736ED9B91E3D688C00C36873 /* zip_source_winzip_aes_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_winzip_aes_decode.c; sourceTree = ""; }; + 736ED9BA1E3D688C00C36873 /* zip_source_winzip_aes_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_winzip_aes_encode.c; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1282,6 +1305,10 @@ 4BDC729E15B1B4E900236D3C /* zipconf.h */, 4BDC729815B1B2A600236D3C /* zip.h */, 4BDC729915B1B2A600236D3C /* zipint.h */, + 4BCD54C81AB05AA90003D379 /* zipwin32.h */, + 4B3A5F4A1DF96D83005A53A1 /* gladman-fcrypt */, + 4B3A5F4B1DF96D83005A53A1 /* gladman-fcrypt.c */, + 4B3A5F4C1DF96D83005A53A1 /* gladman-fcrypt.h */, 4BDC71F115B1B25E00236D3C /* zip_add_dir.c */, 4BDC71F215B1B25E00236D3C /* zip_add_entry.c */, 4BDC71F315B1B25E00236D3C /* zip_add.c */, @@ -1312,6 +1339,7 @@ 4BDC720A15B1B25E00236D3C /* zip_file_rename.c */, 4BDC720B15B1B25E00236D3C /* zip_file_replace.c */, 4BDC720C15B1B25E00236D3C /* zip_file_set_comment.c */, + 736ED9B71E3D688C00C36873 /* zip_file_set_encryption.c */, 4B97204E188EBE85002FAFAD /* zip_file_set_external_attributes.c */, 4B82CED319915F360097BC18 /* zip_file_set_mtime.c */, 4BDC720D15B1B25E00236D3C /* zip_file_strerror.c */, @@ -1321,6 +1349,8 @@ 4BDC721115B1B25E00236D3C /* zip_fopen_index.c */, 4BDC721215B1B25E00236D3C /* zip_fopen.c */, 4BDC721315B1B25E00236D3C /* zip_fread.c */, + 4B3A5F4D1DF96D83005A53A1 /* zip_fseek.c */, + 4B3A5F4E1DF96D83005A53A1 /* zip_ftell.c */, 4BDC721415B1B25E00236D3C /* zip_get_archive_comment.c */, 4BDC721515B1B25E00236D3C /* zip_get_archive_flag.c */, 4BDC721615B1B25E00236D3C /* zip_get_compression_implementation.c */, @@ -1329,12 +1359,13 @@ 4BDC721915B1B25E00236D3C /* zip_get_name.c */, 4BDC721A15B1B25E00236D3C /* zip_get_num_entries.c */, 4BDC721B15B1B25E00236D3C /* zip_get_num_files.c */, - 4BCF3019199A2F820064207B /* zip_io_util.c */, 3D9284801C309510001EABA7 /* zip_hash.c */, + 4BCF3019199A2F820064207B /* zip_io_util.c */, 4BDC721C15B1B25E00236D3C /* zip_memdup.c */, 4BDC721D15B1B25E00236D3C /* zip_name_locate.c */, 4BDC721E15B1B25E00236D3C /* zip_new.c */, 4BDC721F15B1B25E00236D3C /* zip_open.c */, + 736ED9B81E3D688C00C36873 /* zip_random_unix.c */, 4BDC722015B1B25E00236D3C /* zip_rename.c */, 4BDC722115B1B25E00236D3C /* zip_replace.c */, 4BDC722215B1B25E00236D3C /* zip_set_archive_comment.c */, @@ -1369,6 +1400,8 @@ 4BCF301F199A2F820064207B /* zip_source_tell.c */, 4BCF3035199ABDDA0064207B /* zip_source_tell_write.c */, 4BDC723715B1B25E00236D3C /* zip_source_window.c */, + 736ED9B91E3D688C00C36873 /* zip_source_winzip_aes_decode.c */, + 736ED9BA1E3D688C00C36873 /* zip_source_winzip_aes_encode.c */, 4BCF3020199A2F820064207B /* zip_source_write.c */, 4BDC723815B1B25E00236D3C /* zip_source_zip_new.c */, 4BDC723915B1B25E00236D3C /* zip_source_zip.c */, @@ -1382,7 +1415,6 @@ 4BEF35C31AF4D92D00974F28 /* zip_source_win32handle.c */, 4BCD54C61AB05AA90003D379 /* zip_source_win32utf8.c */, 4BCD54C71AB05AA90003D379 /* zip_source_win32w.c */, - 4BCD54C81AB05AA90003D379 /* zipwin32.h */, 4BDC724015B1B25E00236D3C /* zip_unchange_archive.c */, 4BDC724115B1B25E00236D3C /* zip_unchange_data.c */, 4BDC724215B1B25E00236D3C /* zip_unchange.c */, @@ -1632,7 +1664,7 @@ 4BDC71BF15B181DA00236D3C /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0720; + LastUpgradeCheck = 0810; ORGANIZATIONNAME = NiH; TargetAttributes = { 3D7E35361B3305FB00022624 = { @@ -1760,19 +1792,24 @@ 4B01D6AD15B2F46B002D5007 /* zip_discard.c in Sources */, 4B01D6AE15B2F46B002D5007 /* zip_entry.c in Sources */, 4B01D6AF15B2F46B002D5007 /* zip_err_str.c in Sources */, + 4B3A5F521DF96EB4005A53A1 /* zip_fseek.c in Sources */, 4B01D6B015B2F46B002D5007 /* zip_error_clear.c in Sources */, 4B01D6B115B2F46B002D5007 /* zip_error_get_sys_type.c in Sources */, 4B01D6B215B2F46B002D5007 /* zip_error_get.c in Sources */, 4B01D6B315B2F46B002D5007 /* zip_error_strerror.c in Sources */, 4B01D6B415B2F46B002D5007 /* zip_error_to_str.c in Sources */, 4B01D6B515B2F46B002D5007 /* zip_error.c in Sources */, + 736ED9BB1E3D6B6B00C36873 /* zip_source_winzip_aes_decode.c in Sources */, 4B01D6B615B2F46B002D5007 /* zip_extra_field_api.c in Sources */, + 4B3A5F531DF96EB4005A53A1 /* zip_ftell.c in Sources */, + 736ED9BD1E3D6B7200C36873 /* zip_random_unix.c in Sources */, 4B01D6B715B2F46B002D5007 /* zip_extra_field.c in Sources */, 4B01D6B815B2F46B002D5007 /* zip_fclose.c in Sources */, 4B01D6B915B2F46B002D5007 /* zip_fdopen.c in Sources */, 4B01D6BA15B2F46B002D5007 /* zip_file_add.c in Sources */, 4B01D6BB15B2F46B002D5007 /* zip_file_error_clear.c in Sources */, 4BCF3026199A2F820064207B /* zip_source_commit_write.c in Sources */, + 4B3A5F501DF96EA8005A53A1 /* gladman-fcrypt.c in Sources */, 4B01D6BC15B2F46B002D5007 /* zip_file_error_get.c in Sources */, 4B01D6BD15B2F46B002D5007 /* zip_file_get_comment.c in Sources */, 4B01D6BE15B2F46B002D5007 /* zip_file_get_offset.c in Sources */, @@ -1789,8 +1826,10 @@ 4B01D6C715B2F46B002D5007 /* zip_fopen.c in Sources */, 3D9284821C309510001EABA7 /* zip_hash.c in Sources */, 4B01D6C815B2F46B002D5007 /* zip_fread.c in Sources */, + 736ED9BF1E3D6B7C00C36873 /* zip_file_set_encryption.c in Sources */, 4B01D6C915B2F46B002D5007 /* zip_get_archive_comment.c in Sources */, 4B01D6CA15B2F46B002D5007 /* zip_get_archive_flag.c in Sources */, + 736ED9BC1E3D6B6F00C36873 /* zip_source_winzip_aes_encode.c in Sources */, 4B01D6CB15B2F46B002D5007 /* zip_get_compression_implementation.c in Sources */, 4BD5053419A01BB0007DD28A /* zip_source_call.c in Sources */, 4BCF3030199A2F820064207B /* zip_source_write.c in Sources */, @@ -1926,13 +1965,16 @@ 4BCF3023199A2F820064207B /* zip_source_begin_write.c in Sources */, 4BDC724515B1B25E00236D3C /* zip_add_entry.c in Sources */, 4BDC724615B1B25E00236D3C /* zip_add.c in Sources */, + 736ED9C11E3D6B8300C36873 /* zip_source_winzip_aes_decode.c in Sources */, 4BDC724715B1B25E00236D3C /* zip_close.c in Sources */, 4BDC724815B1B25E00236D3C /* zip_delete.c in Sources */, + 736ED9C21E3D6B8600C36873 /* zip_source_winzip_aes_encode.c in Sources */, 4BDC724915B1B25E00236D3C /* zip_dir_add.c in Sources */, 4BDC724A15B1B25E00236D3C /* zip_dirent.c in Sources */, 4BDC724B15B1B25E00236D3C /* zip_discard.c in Sources */, 4BDC724C15B1B25E00236D3C /* zip_entry.c in Sources */, 4BDC724D15B1B25E00236D3C /* zip_err_str.c in Sources */, + 4B3A5F541DF96EB5005A53A1 /* zip_fseek.c in Sources */, 4BDC724E15B1B25E00236D3C /* zip_error_clear.c in Sources */, 4BDC724F15B1B25E00236D3C /* zip_error_get_sys_type.c in Sources */, 4BDC725015B1B25E00236D3C /* zip_error_get.c in Sources */, @@ -1940,12 +1982,14 @@ 4BDC725215B1B25E00236D3C /* zip_error_to_str.c in Sources */, 4BDC725315B1B25E00236D3C /* zip_error.c in Sources */, 4BDC725415B1B25E00236D3C /* zip_extra_field_api.c in Sources */, + 4B3A5F551DF96EB5005A53A1 /* zip_ftell.c in Sources */, 4BDC725515B1B25E00236D3C /* zip_extra_field.c in Sources */, 4BDC725615B1B25E00236D3C /* zip_fclose.c in Sources */, 4BDC725715B1B25E00236D3C /* zip_fdopen.c in Sources */, 4BDC725815B1B25E00236D3C /* zip_file_add.c in Sources */, 4BDC725915B1B25E00236D3C /* zip_file_error_clear.c in Sources */, 4BCF3025199A2F820064207B /* zip_source_commit_write.c in Sources */, + 4B3A5F511DF96EA9005A53A1 /* gladman-fcrypt.c in Sources */, 4BDC725A15B1B25E00236D3C /* zip_file_error_get.c in Sources */, 4BDC725B15B1B25E00236D3C /* zip_file_get_comment.c in Sources */, 4BDC725C15B1B25E00236D3C /* zip_file_get_offset.c in Sources */, @@ -1965,6 +2009,7 @@ 4BDC726715B1B25E00236D3C /* zip_get_archive_comment.c in Sources */, 4BDC726815B1B25E00236D3C /* zip_get_archive_flag.c in Sources */, 4BDC726915B1B25E00236D3C /* zip_get_compression_implementation.c in Sources */, + 736ED9C01E3D6B8000C36873 /* zip_random_unix.c in Sources */, 4BD5053319A0116D007DD28A /* zip_source_call.c in Sources */, 4BCF302F199A2F820064207B /* zip_source_write.c in Sources */, 4BDC726A15B1B25E00236D3C /* zip_get_encryption_implementation.c in Sources */, @@ -1981,6 +2026,7 @@ 4B97204F188EBE85002FAFAD /* zip_file_get_external_attributes.c in Sources */, 4BDC727415B1B25E00236D3C /* zip_replace.c in Sources */, 4BDC727515B1B25E00236D3C /* zip_set_archive_comment.c in Sources */, + 736ED9BE1E3D6B7C00C36873 /* zip_file_set_encryption.c in Sources */, 4BDC727615B1B25E00236D3C /* zip_set_archive_flag.c in Sources */, 4BDC727715B1B25E00236D3C /* zip_set_default_password.c in Sources */, 4BDC727815B1B25E00236D3C /* zip_set_file_comment.c in Sources */, @@ -2171,6 +2217,7 @@ GCC_WARN_PEDANTIC = YES; GCC_WARN_SHADOW = YES; GCC_WARN_SIGN_COMPARE = YES; + HEADER_SEARCH_PATHS = "../lib/gladman-fcrypt"; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@rpath"; PRODUCT_BUNDLE_IDENTIFIER = "at.nih.${PRODUCT_NAME:rfc1034identifier}"; @@ -2201,6 +2248,7 @@ GCC_WARN_PEDANTIC = YES; GCC_WARN_SHADOW = YES; GCC_WARN_SIGN_COMPARE = YES; + HEADER_SEARCH_PATHS = "../lib/gladman-fcrypt"; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@rpath"; PRODUCT_BUNDLE_IDENTIFIER = "at.nih.${PRODUCT_NAME:rfc1034identifier}"; @@ -2494,8 +2542,10 @@ CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; @@ -2518,7 +2568,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.6; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -2535,8 +2585,10 @@ CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; @@ -2555,7 +2607,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MACOSX_DEPLOYMENT_TARGET = 10.6; SDKROOT = macosx; VALIDATE_PRODUCT = YES; @@ -2573,6 +2625,7 @@ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_PEDANTIC = YES; GCC_WARN_SIGN_COMPARE = YES; + HEADER_SEARCH_PATHS = "../lib/gladman-fcrypt"; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; LINK_WITH_STANDARD_LIBRARIES = NO; @@ -2596,6 +2649,7 @@ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_PEDANTIC = YES; GCC_WARN_SIGN_COMPARE = YES; + HEADER_SEARCH_PATHS = "../lib/gladman-fcrypt"; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; LINK_WITH_STANDARD_LIBRARIES = NO; diff --git a/xcode/mkconfig-h.sh b/xcode/mkconfig-h.sh new file mode 100755 index 0000000..43199f7 --- /dev/null +++ b/xcode/mkconfig-h.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +DIR=tmp.$$ + +mkdir -p $DIR/32 $DIR/64 + +(cd $DIR/32; ../../../configure CFLAGS=-m32) +(cd $DIR/64; ../../../configure CFLAGS=-m64) + +diff -D __LP64__ $DIR/32/config.h $DIR/64/config.h > config.h + +rm -r $DIR -- 2.7.4

    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