diff --git a/Makefile.am b/Makefile.am index ad93937..528f6d7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -262,6 +262,7 @@ EXTRA_DIST = \ doc/susp_aaip_isofs_names.txt \ doc/zisofs_format.txt \ doc/checksums.txt \ + libisofs/libisofs.ver \ libisofs/aaip-os-dummy.c \ libisofs/aaip-os-linux.c \ libisofs/aaip-os-freebsd.c diff --git a/configure.ac b/configure.ac index bfe6280..ae457ee 100644 --- a/configure.ac +++ b/configure.ac @@ -205,6 +205,24 @@ else fi AC_SUBST(ZLIB_DEF) +# Library versioning normally serves a complex purpose. +# Since libisofs obeys strict ABI backward compatibility, it needs only the +# simple feature to declare function names "global:" or "local:". Only the +# global ones are visible to applications at library load time. +dnl +dnl >>> TODO: +dnl >>> make an actual try whether -Wl,--version-script=libisofs/libisofs.ver +dnl >>> is accepted by the compiler +dnl +AC_ARG_ENABLE(versioned-libs, +[ --enable-versioned-libs Enable strict symbol encapsulation , default=yes], + , enable_versioned_libs=yes) +if test x$enable_versioned_libs = xyes; then + LDFLAGS="$LDFLAGS -Wl,--version-script=libisofs/libisofs.ver" + echo "enabled strict symbol encapsulation" +else + echo "disabled strict symbol encapsulation" +fi AC_CONFIG_FILES([ Makefile diff --git a/libisofs/libisofs.h b/libisofs/libisofs.h index d2b63c0..6cf5fcc 100644 --- a/libisofs/libisofs.h +++ b/libisofs/libisofs.h @@ -8,6 +8,10 @@ * See COPYING file for details. */ +/* Important: If you add a public API function then add its name to file + libisofs/libisofs.ver +*/ + /* * * Applications must use 64 bit off_t, e.g. on 32-bit GNU/Linux by defining diff --git a/libisofs/libisofs.ver b/libisofs/libisofs.ver new file mode 100644 index 0000000..3bc6aa0 --- /dev/null +++ b/libisofs/libisofs.ver @@ -0,0 +1,290 @@ +LIBISOFS6 { +global: +aaip_xinfo_func; +el_torito_get_bootable; +el_torito_get_boot_media_type; +el_torito_get_boot_platform_id; +el_torito_get_id_string; +el_torito_get_isolinux_options; +el_torito_get_load_seg; +el_torito_get_load_size; +el_torito_get_selection_crit; +el_torito_patch_isolinux_image; +el_torito_seems_boot_info_table; +el_torito_set_boot_platform_id; +el_torito_set_id_string; +el_torito_set_isolinux_options; +el_torito_set_load_seg; +el_torito_set_load_size; +el_torito_set_no_bootable; +el_torito_set_selection_crit; +iso_data_source_new_from_file; +iso_data_source_ref; +iso_data_source_unref; +iso_dir_add_node; +iso_dir_find_children; +iso_dir_get_children; +iso_dir_get_children_count; +iso_dir_get_node; +iso_dir_iter_free; +iso_dir_iter_has_next; +iso_dir_iter_next; +iso_dir_iter_remove; +iso_dir_iter_take; +iso_error_get_code; +iso_error_get_priority; +iso_error_get_severity; +iso_error_to_msg; +iso_file_add_external_filter; +iso_file_add_gzip_filter; +iso_file_add_zisofs_filter; +iso_file_get_md5; +iso_file_get_old_image_lba; +iso_file_get_old_image_sections; +iso_file_get_size; +iso_file_get_sort_weight; +iso_file_get_stream; +iso_file_make_md5; +iso_file_remove_filter; +iso_file_source_access; +iso_file_source_close; +iso_file_source_get_aa_string; +iso_file_source_get_filesystem; +iso_file_source_get_name; +iso_file_source_get_path; +iso_file_source_lseek; +iso_file_source_lstat; +iso_file_source_open; +iso_file_source_read; +iso_file_source_readdir; +iso_file_source_readlink; +iso_file_source_ref; +iso_file_source_stat; +iso_file_source_unref; +iso_filesystem_ref; +iso_filesystem_unref; +iso_finish; +iso_get_local_charset; +iso_get_messenger; +iso_gzip_get_refcounts; +iso_image_add_boot_image; +iso_image_attach_data; +iso_image_create_burn_source; +iso_image_filesystem_new; +iso_image_fs_get_abstract_file_id; +iso_image_fs_get_application_id; +iso_image_fs_get_biblio_file_id; +iso_image_fs_get_copyright_file_id; +iso_image_fs_get_data_preparer_id; +iso_image_fs_get_publisher_id; +iso_image_fs_get_system_id; +iso_image_fs_get_volset_id; +iso_image_fs_get_volume_id; +iso_image_get_abstract_file_id; +iso_image_get_all_boot_imgs; +iso_image_get_application_id; +iso_image_get_attached_data; +iso_image_get_biblio_file_id; +iso_image_get_boot_image; +iso_image_get_copyright_file_id; +iso_image_get_data_preparer_id; +iso_image_get_msg_id; +iso_image_get_publisher_id; +iso_image_get_root; +iso_image_get_session_md5; +iso_image_get_system_area; +iso_image_get_system_id; +iso_image_get_volset_id; +iso_image_get_volume_id; +iso_image_import; +iso_image_new; +iso_image_ref; +iso_image_remove_boot_image; +iso_image_set_abstract_file_id; +iso_image_set_application_id; +iso_image_set_biblio_file_id; +iso_image_set_boot_catalog_hidden; +iso_image_set_boot_catalog_weight; +iso_image_set_boot_image; +iso_image_set_copyright_file_id; +iso_image_set_data_preparer_id; +iso_image_set_ignore_aclea; +iso_image_set_publisher_id; +iso_image_set_system_id; +iso_image_set_volset_id; +iso_image_set_volume_id; +iso_image_unref; +iso_image_update_sizes; +iso_init; +iso_init_with_flag; +iso_lib_is_compatible; +iso_lib_version; +iso_local_get_acl_text; +iso_local_get_attrs; +iso_local_get_perms_wo_acl; +iso_local_set_acl_text; +iso_local_set_attrs; +iso_md5_clone; +iso_md5_compute; +iso_md5_end; +iso_md5_match; +iso_md5_start; +iso_msgs_submit; +iso_new_find_conditions_and; +iso_new_find_conditions_atime; +iso_new_find_conditions_ctime; +iso_new_find_conditions_gid; +iso_new_find_conditions_mode; +iso_new_find_conditions_mtime; +iso_new_find_conditions_name; +iso_new_find_conditions_not; +iso_new_find_conditions_or; +iso_new_find_conditions_uid; +iso_node_add_xinfo; +iso_node_cmp_ino; +iso_node_get_acl_text; +iso_node_get_atime; +iso_node_get_attrs; +iso_node_get_ctime; +iso_node_get_gid; +iso_node_get_hidden; +iso_node_get_mode; +iso_node_get_mtime; +iso_node_get_name; +iso_node_get_old_image_lba; +iso_node_get_parent; +iso_node_get_permissions; +iso_node_get_perms_wo_acl; +iso_node_get_type; +iso_node_get_uid; +iso_node_get_xinfo; +iso_node_lookup_attr; +iso_node_ref; +iso_node_remove; +iso_node_remove_xinfo; +iso_node_set_acl_text; +iso_node_set_atime; +iso_node_set_attrs; +iso_node_set_ctime; +iso_node_set_gid; +iso_node_set_hidden; +iso_node_set_mtime; +iso_node_set_name; +iso_node_set_permissions; +iso_node_set_sort_weight; +iso_node_set_uid; +iso_node_take; +iso_node_unref; +iso_node_zf_by_magic; +iso_obtain_msgs; +iso_read_image_features_destroy; +iso_read_image_features_get_size; +iso_read_image_features_has_eltorito; +iso_read_image_features_has_iso1999; +iso_read_image_features_has_joliet; +iso_read_image_features_has_rockridge; +iso_read_opts_auto_input_charset; +iso_read_opts_free; +iso_read_opts_load_system_area; +iso_read_opts_new; +iso_read_opts_set_default_gid; +iso_read_opts_set_default_permissions; +iso_read_opts_set_default_uid; +iso_read_opts_set_input_charset; +iso_read_opts_set_new_inos; +iso_read_opts_set_no_aaip; +iso_read_opts_set_no_iso1999; +iso_read_opts_set_no_joliet; +iso_read_opts_set_no_md5; +iso_read_opts_set_no_rockridge; +iso_read_opts_set_preferjoliet; +iso_read_opts_set_start_block; +iso_ring_buffer_get_status; +iso_set_abort_severity; +iso_set_local_charset; +iso_set_msgs_severities; +iso_sev_to_text; +iso_special_get_dev; +iso_stream_close; +iso_stream_cmp_ino; +iso_stream_get_external_filter; +iso_stream_get_id; +iso_stream_get_input_stream; +iso_stream_get_size; +iso_stream_get_source_path; +iso_stream_is_repeatable; +iso_stream_open; +iso_stream_read; +iso_stream_ref; +iso_stream_unref; +iso_stream_update_size; +iso_symlink_get_dest; +iso_symlink_set_dest; +iso_text_to_sev; +iso_tree_add_dir_rec; +iso_tree_add_exclude; +iso_tree_add_new_cut_out_node; +iso_tree_add_new_dir; +iso_tree_add_new_file; +iso_tree_add_new_node; +iso_tree_add_new_special; +iso_tree_add_new_symlink; +iso_tree_add_node; +iso_tree_get_follow_symlinks; +iso_tree_get_ignore_hidden; +iso_tree_get_ignore_special; +iso_tree_get_node_path; +iso_tree_get_replace_mode; +iso_tree_path_to_node; +iso_tree_remove_exclude; +iso_tree_set_follow_symlinks; +iso_tree_set_ignore_hidden; +iso_tree_set_ignore_special; +iso_tree_set_replace_mode; +iso_tree_set_report_callback; +iso_util_decode_md5_tag; +iso_write_opts_free; +iso_write_opts_get_data_start; +iso_write_opts_new; +iso_write_opts_set_aaip; +iso_write_opts_set_aaip_susp_1_10; +iso_write_opts_set_allow_deep_paths; +iso_write_opts_set_allow_full_ascii; +iso_write_opts_set_allow_longer_paths; +iso_write_opts_set_allow_lowercase; +iso_write_opts_set_always_gmt; +iso_write_opts_set_appendable; +iso_write_opts_set_default_dir_mode; +iso_write_opts_set_default_file_mode; +iso_write_opts_set_default_gid; +iso_write_opts_set_default_timestamp; +iso_write_opts_set_default_uid; +iso_write_opts_set_dir_rec_mtime; +iso_write_opts_set_fifo_size; +iso_write_opts_set_hardlinks; +iso_write_opts_set_iso1999; +iso_write_opts_set_iso_level; +iso_write_opts_set_joliet; +iso_write_opts_set_joliet_longer_paths; +iso_write_opts_set_max_37_char_filenames; +iso_write_opts_set_ms_block; +iso_write_opts_set_no_force_dots; +iso_write_opts_set_omit_version_numbers; +iso_write_opts_set_output_charset; +iso_write_opts_set_overwrite_buf; +iso_write_opts_set_pvd_times; +iso_write_opts_set_record_md5; +iso_write_opts_set_relaxed_vol_atts; +iso_write_opts_set_replace_mode; +iso_write_opts_set_replace_timestamps; +iso_write_opts_set_rockridge; +iso_write_opts_set_rrip_1_10_px_ino; +iso_write_opts_set_rrip_version_1_10; +iso_write_opts_set_scdbackup_tag; +iso_write_opts_set_sort_files; +iso_write_opts_set_system_area; +iso_zisofs_get_params; +iso_zisofs_get_refcounts; +iso_zisofs_set_params; +local: *; +};