[libvirt] [libvirt-glib 0/4] Add symbol files checks to make check

Hey, This series is based of the libosinfo work danpb did recently to reuse libvirt scripts to validate the symbol files. These make sure the exported symbols match what is listed in the sym file, and that these files are alphabetically ordered. This caught 2 minor errors in the sym files we currently ship.

This is in preparation to enforcing this sorting during make check. The script only checks for alphabetical sorting, which leads to unexpected sorting between classes sharing a common prefix (eg the correct order is: gvir_config_domain_get_foo; gvir_config_domain_interface_set_foo; gvir_config_domain_set_foo; instead of gvir_config_domain_get_foo; gvir_config_domain_set_foo; gvir_config_domain_interface_set_foo; if we want to keep methods from the same class grouped in the symbol file. --- libvirt-gconfig/libvirt-gconfig.sym | 417 +++++++++++++++++++----------------- libvirt-glib/libvirt-glib.sym | 14 +- libvirt-gobject/libvirt-gobject.sym | 210 +++++++++--------- 3 files changed, 330 insertions(+), 311 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index b9164d4..14d98e3 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -1,38 +1,10 @@ LIBVIRT_GCONFIG_0.0.8 { global: - gvir_config_init_check; - gvir_config_init; - gvir_config_capabilities_get_type; gvir_config_capabilities_new; gvir_config_capabilities_new_from_xml; gvir_config_domain_add_device; - gvir_config_domain_get_type; - gvir_config_domain_lifecycle_action_get_type; - gvir_config_domain_lifecycle_event_get_type; - gvir_config_domain_new; - gvir_config_domain_new_from_xml; - gvir_config_domain_set_clock; - gvir_config_domain_set_custom_xml; - gvir_config_domain_get_custom_xml; - gvir_config_domain_get_description; - gvir_config_domain_set_description; - gvir_config_domain_get_devices; - gvir_config_domain_set_devices; - gvir_config_domain_get_features; - gvir_config_domain_set_features; - gvir_config_domain_set_lifecycle; - gvir_config_domain_get_memory; - gvir_config_domain_set_memory; - gvir_config_domain_get_name; - gvir_config_domain_set_name; - gvir_config_domain_set_os; - gvir_config_domain_set_seclabel; - gvir_config_domain_get_vcpus; - gvir_config_domain_set_vcpus; - gvir_config_domain_set_virt_type; - gvir_config_domain_virt_type_get_type; gvir_config_domain_address_get_type; @@ -54,8 +26,8 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_channel_get_type; gvir_config_domain_channel_new; gvir_config_domain_channel_new_from_xml; - gvir_config_domain_channel_set_target_type; gvir_config_domain_channel_set_target_name; + gvir_config_domain_channel_set_target_type; gvir_config_domain_channel_target_type_get_type; gvir_config_domain_chardev_get_type; @@ -72,11 +44,11 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_chardev_source_spicevmc_new; gvir_config_domain_chardev_source_spicevmc_new_from_xml; + gvir_config_domain_clock_add_timer; gvir_config_domain_clock_get_type; - gvir_config_domain_clock_offset_get_type; gvir_config_domain_clock_new; gvir_config_domain_clock_new_from_xml; - gvir_config_domain_clock_add_timer; + gvir_config_domain_clock_offset_get_type; gvir_config_domain_clock_set_offset; gvir_config_domain_clock_set_timezone; gvir_config_domain_clock_set_variable_offset; @@ -87,9 +59,9 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_console_set_target_type; gvir_config_domain_console_target_type_get_type; + gvir_config_domain_controller_get_index; gvir_config_domain_controller_get_type; gvir_config_domain_controller_set_address; - gvir_config_domain_controller_get_index; gvir_config_domain_controller_set_index; gvir_config_domain_controller_usb_get_type; @@ -101,41 +73,40 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_device_get_type; - gvir_config_domain_disk_get_type; gvir_config_domain_disk_bus_get_type; gvir_config_domain_disk_cache_type_get_type; + gvir_config_domain_disk_get_disk_type; + gvir_config_domain_disk_get_driver_cache; + gvir_config_domain_disk_get_driver_name; + gvir_config_domain_disk_get_driver_type; + gvir_config_domain_disk_get_guest_device_type; + gvir_config_domain_disk_get_snapshot_type; + gvir_config_domain_disk_get_source; + gvir_config_domain_disk_get_startup_policy; + gvir_config_domain_disk_get_target_bus; + gvir_config_domain_disk_get_target_dev; + gvir_config_domain_disk_get_type; gvir_config_domain_disk_guest_device_type_get_type; - gvir_config_domain_disk_snapshot_type_get_type; - gvir_config_domain_disk_startup_policy_get_type; - gvir_config_domain_disk_type_get_type; gvir_config_domain_disk_new; gvir_config_domain_disk_new_from_xml; - gvir_config_domain_disk_get_driver_cache; gvir_config_domain_disk_set_driver_cache; - gvir_config_domain_disk_get_driver_name; gvir_config_domain_disk_set_driver_name; - gvir_config_domain_disk_get_driver_type; gvir_config_domain_disk_set_driver_type; - gvir_config_domain_disk_get_guest_device_type; gvir_config_domain_disk_set_guest_device_type; - gvir_config_domain_disk_get_snapshot_type; + gvir_config_domain_disk_set_readonly; gvir_config_domain_disk_set_snapshot_type; - gvir_config_domain_disk_get_source; gvir_config_domain_disk_set_source; - gvir_config_domain_disk_get_startup_policy; gvir_config_domain_disk_set_startup_policy; - gvir_config_domain_disk_get_target_bus; gvir_config_domain_disk_set_target_bus; - gvir_config_domain_disk_get_target_dev; gvir_config_domain_disk_set_target_dev; - gvir_config_domain_disk_get_disk_type; - gvir_config_domain_disk_set_readonly; gvir_config_domain_disk_set_type; + gvir_config_domain_disk_snapshot_type_get_type; + gvir_config_domain_disk_startup_policy_get_type; + gvir_config_domain_disk_type_get_type; - gvir_config_domain_filesys_get_type; - gvir_config_domain_filesys_type_get_type; gvir_config_domain_filesys_access_type_get_type; gvir_config_domain_filesys_driver_type_get_type; + gvir_config_domain_filesys_get_type; gvir_config_domain_filesys_new; gvir_config_domain_filesys_new_from_xml; gvir_config_domain_filesys_set_access_type; @@ -144,6 +115,16 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_filesys_set_source; gvir_config_domain_filesys_set_target; gvir_config_domain_filesys_set_type; + gvir_config_domain_filesys_type_get_type; + + gvir_config_domain_get_custom_xml; + gvir_config_domain_get_description; + gvir_config_domain_get_devices; + gvir_config_domain_get_features; + gvir_config_domain_get_memory; + gvir_config_domain_get_name; + gvir_config_domain_get_type; + gvir_config_domain_get_vcpus; gvir_config_domain_graphics_get_type; @@ -157,9 +138,9 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_graphics_spice_new; gvir_config_domain_graphics_spice_new_from_xml; gvir_config_domain_graphics_spice_set_autoport; + gvir_config_domain_graphics_spice_set_password; gvir_config_domain_graphics_spice_set_port; gvir_config_domain_graphics_spice_set_tls_port; - gvir_config_domain_graphics_spice_set_password; gvir_config_domain_graphics_vnc_get_type; gvir_config_domain_graphics_vnc_new; @@ -169,87 +150,107 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_graphics_vnc_set_port; gvir_config_domain_input_bus_get_type; - gvir_config_domain_input_get_type; gvir_config_domain_input_device_type_get_type; + gvir_config_domain_input_get_type; gvir_config_domain_input_new; gvir_config_domain_input_new_from_xml; - gvir_config_domain_input_set_device_type; gvir_config_domain_input_set_bus; - - gvir_config_domain_interface_get_type; - gvir_config_domain_interface_link_state_get_type; - gvir_config_domain_interface_set_ifname; - gvir_config_domain_interface_get_ifname; - gvir_config_domain_interface_set_link_state; - gvir_config_domain_interface_get_link_state; - gvir_config_domain_interface_set_mac; - gvir_config_domain_interface_get_mac; - gvir_config_domain_interface_set_model; - gvir_config_domain_interface_get_model; + gvir_config_domain_input_set_device_type; gvir_config_domain_interface_bridge_get_type; gvir_config_domain_interface_bridge_new; gvir_config_domain_interface_bridge_new_from_xml; gvir_config_domain_interface_bridge_set_source; + gvir_config_domain_interface_get_ifname; + gvir_config_domain_interface_get_link_state; + gvir_config_domain_interface_get_mac; + gvir_config_domain_interface_get_model; + gvir_config_domain_interface_get_type; + gvir_config_domain_interface_link_state_get_type; + gvir_config_domain_interface_network_get_type; gvir_config_domain_interface_network_new; gvir_config_domain_interface_network_new_from_xml; gvir_config_domain_interface_network_set_source; + gvir_config_domain_interface_set_ifname; + gvir_config_domain_interface_set_link_state; + gvir_config_domain_interface_set_mac; + gvir_config_domain_interface_set_model; + gvir_config_domain_interface_user_get_type; gvir_config_domain_interface_user_new; gvir_config_domain_interface_user_new_from_xml; + gvir_config_domain_lifecycle_action_get_type; + gvir_config_domain_lifecycle_event_get_type; + gvir_config_domain_memballoon_get_type; gvir_config_domain_memballoon_model_get_type; gvir_config_domain_memballoon_new; gvir_config_domain_memballoon_new_from_xml; gvir_config_domain_memballoon_set_model; - gvir_config_domain_os_get_type; + gvir_config_domain_new; + gvir_config_domain_new_from_xml; + + gvir_config_domain_os_bios_enable_serial; gvir_config_domain_os_boot_device_get_type; - gvir_config_domain_os_sm_bios_mode_get_type; + gvir_config_domain_os_enable_boot_menu; + gvir_config_domain_os_get_type; gvir_config_domain_os_new; gvir_config_domain_os_new_from_xml; - gvir_config_domain_os_set_os_type; + gvir_config_domain_os_set_arch; gvir_config_domain_os_set_boot_devices; gvir_config_domain_os_set_cmdline; gvir_config_domain_os_set_init; gvir_config_domain_os_set_kernel; gvir_config_domain_os_set_loader; + gvir_config_domain_os_set_machine; + gvir_config_domain_os_set_os_type; gvir_config_domain_os_set_ramdisk; gvir_config_domain_os_set_smbios_mode; - gvir_config_domain_os_enable_boot_menu; - gvir_config_domain_os_bios_enable_serial; - gvir_config_domain_os_set_machine; - gvir_config_domain_os_set_arch; + gvir_config_domain_os_sm_bios_mode_get_type; gvir_config_domain_os_type_get_type; gvir_config_domain_parallel_get_type; gvir_config_domain_parallel_new; gvir_config_domain_parallel_new_from_xml; - gvir_config_domain_redirdev_get_type; gvir_config_domain_redirdev_bus_get_type; + gvir_config_domain_redirdev_get_type; gvir_config_domain_redirdev_new; gvir_config_domain_redirdev_new_from_xml; gvir_config_domain_redirdev_set_address; gvir_config_domain_redirdev_set_bus; gvir_config_domain_seclabel_get_type; - gvir_config_domain_seclabel_type_get_type; gvir_config_domain_seclabel_new; gvir_config_domain_seclabel_new_from_xml; - gvir_config_domain_seclabel_set_type; - gvir_config_domain_seclabel_set_model; gvir_config_domain_seclabel_set_baselabel; gvir_config_domain_seclabel_set_label; + gvir_config_domain_seclabel_set_model; + gvir_config_domain_seclabel_set_type; + gvir_config_domain_seclabel_type_get_type; gvir_config_domain_serial_get_type; gvir_config_domain_serial_new; gvir_config_domain_serial_new_from_xml; + gvir_config_domain_set_clock; + gvir_config_domain_set_custom_xml; + gvir_config_domain_set_description; + gvir_config_domain_set_devices; + gvir_config_domain_set_features; + gvir_config_domain_set_lifecycle; + gvir_config_domain_set_memory; + gvir_config_domain_set_name; + gvir_config_domain_set_os; + gvir_config_domain_set_seclabel; + gvir_config_domain_set_vcpus; + gvir_config_domain_set_virt_type; + gvir_config_domain_snapshot_get_type; gvir_config_domain_snapshot_new; gvir_config_domain_snapshot_new_from_xml; @@ -260,10 +261,8 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_sound_new_from_xml; gvir_config_domain_sound_set_model; - gvir_config_domain_timer_get_type; - gvir_config_domain_timer_tick_policy_get_type; gvir_config_domain_timer_get_tick_policy; - gvir_config_domain_timer_set_tick_policy; + gvir_config_domain_timer_get_type; gvir_config_domain_timer_pit_get_type; gvir_config_domain_timer_pit_new; @@ -273,34 +272,43 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_domain_timer_rtc_new; gvir_config_domain_timer_rtc_new_from_xml; + gvir_config_domain_timer_set_tick_policy; + gvir_config_domain_timer_tick_policy_get_type; + gvir_config_domain_video_get_type; gvir_config_domain_video_model_get_type; gvir_config_domain_video_new; gvir_config_domain_video_new_from_xml; + gvir_config_domain_video_set_heads; gvir_config_domain_video_set_model; gvir_config_domain_video_set_vram; - gvir_config_domain_video_set_heads; + + gvir_config_domain_virt_type_get_type; + + gvir_config_init; + gvir_config_init_check; gvir_config_interface_get_type; gvir_config_interface_new; gvir_config_interface_new_from_xml; + gvir_config_network_filter_get_type; + gvir_config_network_filter_new; + gvir_config_network_filter_new_from_xml; + gvir_config_network_get_type; gvir_config_network_new; gvir_config_network_new_from_xml; - gvir_config_network_filter_get_type; - gvir_config_network_filter_new; - gvir_config_network_filter_new_from_xml; gvir_config_node_device_get_type; gvir_config_node_device_new; gvir_config_node_device_new_from_xml; - gvir_config_object_get_type; gvir_config_object_error_quark; - gvir_config_object_new; gvir_config_object_get_schema; + gvir_config_object_get_type; + gvir_config_object_new; gvir_config_object_to_xml; gvir_config_object_validate; @@ -317,7 +325,6 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_storage_permissions_set_owner; gvir_config_storage_pool_get_type; - gvir_config_storage_pool_type_get_type; gvir_config_storage_pool_new; gvir_config_storage_pool_new_from_xml; gvir_config_storage_pool_set_allocation; @@ -347,6 +354,14 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_storage_pool_target_set_path; gvir_config_storage_pool_target_set_permissions; + gvir_config_storage_pool_type_get_type; + + gvir_config_storage_vol_backing_store_get_type; + gvir_config_storage_vol_backing_store_new; + gvir_config_storage_vol_backing_store_new_from_xml; + gvir_config_storage_vol_backing_store_set_format; + gvir_config_storage_vol_backing_store_set_path; + gvir_config_storage_vol_get_type; gvir_config_storage_vol_new; gvir_config_storage_vol_new_from_xml; @@ -356,12 +371,6 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_storage_vol_set_name; gvir_config_storage_vol_set_target; - gvir_config_storage_vol_backing_store_get_type; - gvir_config_storage_vol_backing_store_new; - gvir_config_storage_vol_backing_store_new_from_xml; - gvir_config_storage_vol_backing_store_set_format; - gvir_config_storage_vol_backing_store_set_path; - gvir_config_storage_vol_target_get_type; gvir_config_storage_vol_target_new; gvir_config_storage_vol_target_new_from_xml; @@ -370,106 +379,110 @@ LIBVIRT_GCONFIG_0.0.8 { gvir_config_xml_doc_get_type; gvir_config_xml_doc_new; + local: - *; + *; }; LIBVIRT_GCONFIG_0.0.9 { global: - gvir_config_domain_get_os; - gvir_config_domain_get_title; - gvir_config_domain_set_title; - gvir_config_domain_get_virt_type; - - gvir_config_domain_filesys_set_ram_usage; - - gvir_config_domain_os_get_arch; - gvir_config_domain_os_get_boot_devices; - gvir_config_domain_os_get_os_type; - - gvir_config_capabilities_get_host; - gvir_config_capabilities_get_guests; + gvir_config_capabilities_cpu_feature_get_name; + gvir_config_capabilities_cpu_feature_get_type; - gvir_config_capabilities_cpu_get_type; gvir_config_capabilities_cpu_get_arch; gvir_config_capabilities_cpu_get_features; gvir_config_capabilities_cpu_get_topology; + gvir_config_capabilities_cpu_get_type; - gvir_config_capabilities_cpu_feature_get_type; - gvir_config_capabilities_cpu_feature_get_name; - - gvir_config_capabilities_cpu_topology_get_type; gvir_config_capabilities_cpu_topology_get_cores; gvir_config_capabilities_cpu_topology_get_sockets; gvir_config_capabilities_cpu_topology_get_threads; + gvir_config_capabilities_cpu_topology_get_type; - gvir_config_capabilities_guest_get_type; - gvir_config_capabilities_guest_get_arch; - gvir_config_capabilities_guest_get_features; - gvir_config_capabilities_guest_get_os_type; + gvir_config_capabilities_get_guests; + gvir_config_capabilities_get_host; - gvir_config_capabilities_guest_arch_get_type; gvir_config_capabilities_guest_arch_get_domains; gvir_config_capabilities_guest_arch_get_emulator; gvir_config_capabilities_guest_arch_get_name; + gvir_config_capabilities_guest_arch_get_type; - gvir_config_capabilities_guest_domain_get_type; gvir_config_capabilities_guest_domain_get_emulator; + gvir_config_capabilities_guest_domain_get_type; gvir_config_capabilities_guest_domain_get_virt_type; - gvir_config_capabilities_guest_feature_get_type; gvir_config_capabilities_guest_feature_get_name; + gvir_config_capabilities_guest_feature_get_type; + gvir_config_capabilities_guest_get_arch; + gvir_config_capabilities_guest_get_features; + gvir_config_capabilities_guest_get_os_type; + gvir_config_capabilities_guest_get_type; + + gvir_config_capabilities_host_get_cpu; gvir_config_capabilities_host_get_type; gvir_config_capabilities_host_get_uuid; - gvir_config_capabilities_host_get_cpu; + + gvir_config_domain_filesys_set_ram_usage; + + gvir_config_domain_get_os; + gvir_config_domain_get_title; + gvir_config_domain_get_virt_type; + + gvir_config_domain_os_get_arch; + gvir_config_domain_os_get_boot_devices; + gvir_config_domain_os_get_os_type; + + gvir_config_domain_set_title; } LIBVIRT_GCONFIG_0.0.8; LIBVIRT_GCONFIG_0.1.0 { global: gvir_config_capabilities_cpu_add_feature; - gvir_config_capabilities_cpu_set_topology; gvir_config_capabilities_cpu_feature_set_name; + gvir_config_capabilities_cpu_set_topology; + gvir_config_capabilities_cpu_topology_new; gvir_config_capabilities_cpu_topology_new_from_xml; gvir_config_capabilities_cpu_topology_set_cores; gvir_config_capabilities_cpu_topology_set_sockets; gvir_config_capabilities_cpu_topology_set_threads; - gvir_config_domain_get_cpu; - gvir_config_domain_set_cpu; + gvir_config_domain_cpu_feature_get_policy; + gvir_config_domain_cpu_feature_get_type; + gvir_config_domain_cpu_feature_new; + gvir_config_domain_cpu_feature_new_from_xml; + gvir_config_domain_cpu_feature_policy_get_type; + gvir_config_domain_cpu_feature_set_policy; - gvir_config_domain_cpu_get_type; - gvir_config_domain_cpu_match_policy_get_type; - gvir_config_domain_cpu_mode_get_type; gvir_config_domain_cpu_get_features; gvir_config_domain_cpu_get_match_policy; - gvir_config_domain_cpu_set_match_policy; gvir_config_domain_cpu_get_mode; - gvir_config_domain_cpu_set_mode; + gvir_config_domain_cpu_get_type; + gvir_config_domain_cpu_match_policy_get_type; + gvir_config_domain_cpu_mode_get_type; gvir_config_domain_cpu_new; gvir_config_domain_cpu_new_from_xml; + gvir_config_domain_cpu_set_match_policy; + gvir_config_domain_cpu_set_mode; - gvir_config_domain_cpu_feature_get_type; - gvir_config_domain_cpu_feature_new; - gvir_config_domain_cpu_feature_new_from_xml; - gvir_config_domain_cpu_feature_policy_get_type; - gvir_config_domain_cpu_feature_get_policy; - gvir_config_domain_cpu_feature_set_policy; + gvir_config_domain_get_cpu; + gvir_config_domain_set_cpu; } LIBVIRT_GCONFIG_0.0.9; LIBVIRT_GCONFIG_0.1.3 { global: gvir_config_domain_get_current_memory; - gvir_config_domain_set_current_memory; gvir_config_domain_graphics_spice_get_port; gvir_config_domain_graphics_vnc_get_port; gvir_config_domain_graphics_vnc_get_socket; gvir_config_domain_graphics_vnc_set_socket; + + gvir_config_domain_set_current_memory; } LIBVIRT_GCONFIG_0.1.0; LIBVIRT_GCONFIG_0.1.4 { @@ -477,8 +490,8 @@ LIBVIRT_GCONFIG_0.1.4 { gvir_config_domain_power_management_get_type; gvir_config_domain_power_management_new; gvir_config_domain_power_management_new_from_xml; - gvir_config_domain_power_management_set_mem_suspend_enabled; gvir_config_domain_power_management_set_disk_suspend_enabled; + gvir_config_domain_power_management_set_mem_suspend_enabled; gvir_config_domain_set_power_management; } LIBVIRT_GCONFIG_0.1.3; @@ -486,30 +499,32 @@ LIBVIRT_GCONFIG_0.1.4 { LIBVIRT_GCONFIG_0.1.5 { global: gvir_config_domain_smartcard_get_type; - gvir_config_domain_smartcard_set_address; - - gvir_config_domain_smartcard_host_get_type; - gvir_config_domain_smartcard_host_new; - gvir_config_domain_smartcard_host_new_from_xml; gvir_config_domain_smartcard_host_certificates_get_type; gvir_config_domain_smartcard_host_certificates_new; gvir_config_domain_smartcard_host_certificates_new_from_xml; - gvir_config_domain_smartcard_host_certificates_set_database; gvir_config_domain_smartcard_host_certificates_set_certificates; + gvir_config_domain_smartcard_host_certificates_set_database; + + gvir_config_domain_smartcard_host_get_type; + gvir_config_domain_smartcard_host_new; + gvir_config_domain_smartcard_host_new_from_xml; gvir_config_domain_smartcard_passthrough_get_type; gvir_config_domain_smartcard_passthrough_new; gvir_config_domain_smartcard_passthrough_new_from_xml; gvir_config_domain_smartcard_passthrough_set_source; + + gvir_config_domain_smartcard_set_address; } LIBVIRT_GCONFIG_0.1.4; LIBVIRT_GCONFIG_0.1.6 { global: gvir_config_domain_graphics_spice_get_image_compression; - gvir_config_domain_graphics_spice_set_image_compression; gvir_config_domain_graphics_spice_image_compression_get_type; + + gvir_config_domain_graphics_spice_set_image_compression; } LIBVIRT_GCONFIG_0.1.5; LIBVIRT_GCONFIG_0.1.7 { @@ -517,6 +532,11 @@ LIBVIRT_GCONFIG_0.1.7 { gvir_config_domain_channel_get_target_name; gvir_config_domain_channel_get_target_type; + gvir_config_domain_chardev_get_source; + gvir_config_domain_chardev_source_pty_get_path; + + gvir_config_domain_device_get_alias; + gvir_config_domain_disk_format_get_type; gvir_config_domain_disk_get_driver_format; gvir_config_domain_disk_set_driver_format; @@ -527,15 +547,44 @@ LIBVIRT_GCONFIG_0.1.7 { gvir_config_domain_graphics_desktop_set_display; gvir_config_domain_graphics_desktop_set_fullscreen; - gvir_config_domain_graphics_sdl_set_fullscreen; - + gvir_config_domain_graphics_rdp_get_port; gvir_config_domain_graphics_rdp_get_type; gvir_config_domain_graphics_rdp_new; gvir_config_domain_graphics_rdp_new_from_xml; gvir_config_domain_graphics_rdp_set_autoport; - gvir_config_domain_graphics_rdp_get_port; gvir_config_domain_graphics_rdp_set_port; + gvir_config_domain_graphics_sdl_set_fullscreen; + + gvir_config_domain_snapshot_add_disk; + gvir_config_domain_snapshot_disk_get_driver_format; + gvir_config_domain_snapshot_disk_get_name; + gvir_config_domain_snapshot_disk_get_snapshot_type; + gvir_config_domain_snapshot_disk_get_source_file; + gvir_config_domain_snapshot_disk_get_type; + gvir_config_domain_snapshot_disk_new; + gvir_config_domain_snapshot_disk_new_from_xml; + gvir_config_domain_snapshot_disk_set_driver_format; + gvir_config_domain_snapshot_disk_set_name; + gvir_config_domain_snapshot_disk_set_snapshot_type; + gvir_config_domain_snapshot_disk_set_source_file; + gvir_config_domain_snapshot_domain_state_get_type; + gvir_config_domain_snapshot_get_creation_time; + gvir_config_domain_snapshot_get_description; + gvir_config_domain_snapshot_get_disks; + gvir_config_domain_snapshot_get_domain; + gvir_config_domain_snapshot_get_memory_file; + gvir_config_domain_snapshot_get_memory_state; + gvir_config_domain_snapshot_get_name; + gvir_config_domain_snapshot_get_parent; + gvir_config_domain_snapshot_get_state; + gvir_config_domain_snapshot_memory_state_get_type; + gvir_config_domain_snapshot_set_description; + gvir_config_domain_snapshot_set_disks; + gvir_config_domain_snapshot_set_memory_file; + gvir_config_domain_snapshot_set_memory_state; + gvir_config_domain_snapshot_set_name; + gvir_config_storage_permissions_get_group; gvir_config_storage_permissions_get_label; gvir_config_storage_permissions_get_mode; @@ -562,94 +611,60 @@ LIBVIRT_GCONFIG_0.1.7 { gvir_config_storage_pool_target_get_path; gvir_config_storage_pool_target_get_permissions; - gvir_config_domain_snapshot_domain_state_get_type; - gvir_config_domain_snapshot_memory_state_get_type; - gvir_config_domain_snapshot_get_creation_time; - gvir_config_domain_snapshot_get_description; - gvir_config_domain_snapshot_set_description; - gvir_config_domain_snapshot_get_domain; - gvir_config_domain_snapshot_get_memory_state; - gvir_config_domain_snapshot_set_memory_state; - gvir_config_domain_snapshot_get_memory_file; - gvir_config_domain_snapshot_set_memory_file; - gvir_config_domain_snapshot_get_name; - gvir_config_domain_snapshot_set_name; - gvir_config_domain_snapshot_get_parent; - gvir_config_domain_snapshot_get_state; - gvir_config_domain_snapshot_get_disks; - gvir_config_domain_snapshot_add_disk; - gvir_config_domain_snapshot_set_disks; - - gvir_config_domain_snapshot_disk_get_type; - gvir_config_domain_snapshot_disk_new; - gvir_config_domain_snapshot_disk_new_from_xml; - - gvir_config_domain_snapshot_disk_get_driver_format; - gvir_config_domain_snapshot_disk_set_driver_format; - gvir_config_domain_snapshot_disk_get_name; - gvir_config_domain_snapshot_disk_set_name; - gvir_config_domain_snapshot_disk_get_snapshot_type; - gvir_config_domain_snapshot_disk_set_snapshot_type; - gvir_config_domain_snapshot_disk_get_source_file; - gvir_config_domain_snapshot_disk_set_source_file; - - gvir_config_domain_chardev_source_pty_get_path; - gvir_config_domain_chardev_get_source; - - gvir_config_domain_device_get_alias; } LIBVIRT_GCONFIG_0.1.6; LIBVIRT_GCONFIG_0.1.8 { global: - gvir_config_domain_get_uuid; - gvir_config_domain_set_uuid; - - gvir_config_domain_disk_driver_get_type; gvir_config_domain_disk_driver_discard_get_type; gvir_config_domain_disk_driver_error_policy_get_type; + gvir_config_domain_disk_driver_get_cache; + gvir_config_domain_disk_driver_get_copy_on_read; + gvir_config_domain_disk_driver_get_discard; + gvir_config_domain_disk_driver_get_error_policy; + gvir_config_domain_disk_driver_get_format; + gvir_config_domain_disk_driver_get_io_policy; + gvir_config_domain_disk_driver_get_name; + gvir_config_domain_disk_driver_get_type; gvir_config_domain_disk_driver_io_policy_get_type; gvir_config_domain_disk_driver_new; gvir_config_domain_disk_driver_new_from_xml; gvir_config_domain_disk_driver_set_cache; - gvir_config_domain_disk_driver_get_cache; gvir_config_domain_disk_driver_set_copy_on_read; - gvir_config_domain_disk_driver_get_copy_on_read; gvir_config_domain_disk_driver_set_discard; - gvir_config_domain_disk_driver_get_discard; gvir_config_domain_disk_driver_set_error_policy; - gvir_config_domain_disk_driver_get_error_policy; gvir_config_domain_disk_driver_set_format; - gvir_config_domain_disk_driver_get_format; - gvir_config_domain_disk_driver_set_name; - gvir_config_domain_disk_driver_get_name; gvir_config_domain_disk_driver_set_io_policy; - gvir_config_domain_disk_driver_get_io_policy; + gvir_config_domain_disk_driver_set_name; gvir_config_domain_disk_get_driver; gvir_config_domain_disk_set_driver; + gvir_config_domain_get_uuid; + gvir_config_domain_graphics_rdp_set_multi_user; gvir_config_domain_graphics_rdp_set_replace_user; - gvir_config_object_new_from_xml; - - gvir_config_domain_interface_set_filterref; - gvir_config_domain_interface_get_filterref; - + gvir_config_domain_interface_filterref_add_parameter; + gvir_config_domain_interface_filterref_get_name; + gvir_config_domain_interface_filterref_get_parameters; gvir_config_domain_interface_filterref_get_type; gvir_config_domain_interface_filterref_new; gvir_config_domain_interface_filterref_new_from_xml; - gvir_config_domain_interface_filterref_set_name; - gvir_config_domain_interface_filterref_get_name; - gvir_config_domain_interface_filterref_add_parameter; - gvir_config_domain_interface_filterref_get_parameters; + gvir_config_domain_interface_filterref_parameter_get_name; gvir_config_domain_interface_filterref_parameter_get_type; + gvir_config_domain_interface_filterref_parameter_get_value; gvir_config_domain_interface_filterref_parameter_new; gvir_config_domain_interface_filterref_parameter_new_from_xml; gvir_config_domain_interface_filterref_parameter_set_name; gvir_config_domain_interface_filterref_parameter_set_value; - gvir_config_domain_interface_filterref_parameter_get_name; - gvir_config_domain_interface_filterref_parameter_get_value; + gvir_config_domain_interface_filterref_set_name; + + gvir_config_domain_interface_get_filterref; + gvir_config_domain_interface_set_filterref; + + gvir_config_domain_set_uuid; + + gvir_config_object_new_from_xml; } LIBVIRT_GCONFIG_0.1.7; # .... define new API here using predicted next version number .... diff --git a/libvirt-glib/libvirt-glib.sym b/libvirt-glib/libvirt-glib.sym index d9ddb07..aa90f55 100644 --- a/libvirt-glib/libvirt-glib.sym +++ b/libvirt-glib/libvirt-glib.sym @@ -1,15 +1,17 @@ LIBVIRT_GLIB_0.0.7 { global: - gvir_init; - gvir_init_check; - gvir_event_register; - gvir_error_new; - gvir_error_new_valist; gvir_error_new_literal; + gvir_error_new_valist; + + gvir_event_register; + + gvir_init; + gvir_init_check; + gvir_set_error; - gvir_set_error_valist; gvir_set_error_literal; + gvir_set_error_valist; local: *; diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym index edc876d..0225969 100644 --- a/libvirt-gobject/libvirt-gobject.sym +++ b/libvirt-gobject/libvirt-gobject.sym @@ -1,165 +1,167 @@ LIBVIRT_GOBJECT_0.0.8 { global: - gvir_init_object; - gvir_init_object_check; - - gvir_connection_get_type; - gvir_node_info_get_type; - gvir_connection_new; - gvir_connection_open; - gvir_connection_open_async; - gvir_connection_open_finish; - gvir_connection_is_open; gvir_connection_close; - gvir_connection_get_uri; - gvir_connection_get_stream; - + gvir_connection_create_domain; + gvir_connection_create_storage_pool; gvir_connection_fetch_domains; gvir_connection_fetch_domains_async; gvir_connection_fetch_domains_finish; gvir_connection_fetch_storage_pools; gvir_connection_fetch_storage_pools_async; gvir_connection_fetch_storage_pools_finish; - gvir_connection_get_domains; - gvir_connection_get_storage_pools; - gvir_connection_get_domain; - gvir_connection_get_storage_pool; gvir_connection_find_domain_by_id; gvir_connection_find_domain_by_name; gvir_connection_find_storage_pool_by_name; - gvir_connection_create_domain; - gvir_connection_create_storage_pool; - gvir_connection_start_domain; + gvir_connection_get_domain; + gvir_connection_get_domains; gvir_connection_get_node_info; + gvir_connection_get_storage_pool; + gvir_connection_get_storage_pools; + gvir_connection_get_stream; + gvir_connection_get_type; + gvir_connection_get_uri; + gvir_connection_handle_get_type; + gvir_connection_is_open; + gvir_connection_new; + gvir_connection_open; + gvir_connection_open_async; + gvir_connection_open_finish; + gvir_connection_start_domain; + + gvir_domain_delete; + gvir_domain_delete_flags_get_type; - gvir_domain_device_get_type; - gvir_domain_device_get_domain; gvir_domain_device_get_config; + gvir_domain_device_get_domain; + gvir_domain_device_get_type; - gvir_domain_disk_get_type; - gvir_domain_disk_stats_get_type; gvir_domain_disk_get_stats; + gvir_domain_disk_get_type; gvir_domain_disk_resize; + gvir_domain_disk_stats_get_type; - gvir_domain_interface_get_type; - gvir_domain_interface_stats_get_type; - gvir_domain_interface_get_stats; - - gvir_domain_get_type; - gvir_domain_handle_get_type; - gvir_domain_info_get_type; - gvir_domain_state_get_type; - gvir_domain_start_flags_get_type; - gvir_domain_delete_flags_get_type; - gvir_domain_get_name; - gvir_domain_get_uuid; - gvir_domain_get_id; - gvir_domain_start; - gvir_domain_resume; - gvir_domain_stop; - gvir_domain_suspend; - gvir_domain_save; - gvir_domain_save_async; - gvir_domain_save_finish; - gvir_domain_delete; - gvir_domain_open_console; - gvir_domain_open_graphics; - gvir_domain_shutdown; - gvir_domain_reboot; gvir_domain_get_config; - gvir_domain_set_config; gvir_domain_get_devices; + gvir_domain_get_id; gvir_domain_get_info; gvir_domain_get_info_async; gvir_domain_get_info_finish; + gvir_domain_get_name; gvir_domain_get_persistent; gvir_domain_get_saved; - gvir_domain_screenshot; + gvir_domain_get_type; + gvir_domain_get_uuid; + gvir_domain_handle_get_type; + gvir_domain_info_get_type; + + gvir_domain_interface_get_stats; + gvir_domain_interface_get_type; + gvir_domain_interface_stats_get_type; + + gvir_domain_open_console; + gvir_domain_open_graphics; + gvir_domain_reboot; + gvir_domain_resume; + gvir_domain_save; + gvir_domain_save_async; + gvir_domain_save_finish; gvir_domain_save_to_file; gvir_domain_save_to_file_async; gvir_domain_save_to_file_finish; + gvir_domain_screenshot; + gvir_domain_set_config; + gvir_domain_shutdown; + gvir_domain_snapshot_get_config; + gvir_domain_snapshot_get_name; gvir_domain_snapshot_get_type; gvir_domain_snapshot_handle_get_type; - gvir_domain_snapshot_get_name; - gvir_domain_snapshot_get_config; - gvir_network_get_type; - gvir_network_handle_get_type; - gvir_network_get_name; - gvir_network_get_uuid; - gvir_network_get_config; + gvir_domain_start; + gvir_domain_start_flags_get_type; + gvir_domain_state_get_type; + gvir_domain_stop; + gvir_domain_suspend; - gvir_network_filter_get_type; - gvir_network_filter_handle_get_type; + gvir_init_object; + gvir_init_object_check; + + gvir_interface_get_config; + gvir_interface_get_name; + gvir_interface_get_type; + gvir_interface_handle_get_type; + + gvir_manager_add_connection; + gvir_manager_find_connection_by_uri; + gvir_manager_get_connections; + gvir_manager_get_type; + gvir_manager_new; + gvir_manager_remove_connection; + + gvir_network_filter_get_config; gvir_network_filter_get_name; + gvir_network_filter_get_type; gvir_network_filter_get_uuid; - gvir_network_filter_get_config; + gvir_network_filter_handle_get_type; + + gvir_network_get_config; + gvir_network_get_name; + gvir_network_get_type; + gvir_network_get_uuid; + gvir_network_handle_get_type; + gvir_node_device_get_config; + gvir_node_device_get_name; gvir_node_device_get_type; gvir_node_device_handle_get_type; - gvir_node_device_get_name; - gvir_node_device_get_config; - gvir_interface_get_type; - gvir_interface_handle_get_type; - gvir_interface_get_name; - gvir_interface_get_config; + gvir_node_info_get_type; + gvir_secret_get_config; gvir_secret_get_type; - gvir_secret_handle_get_type; gvir_secret_get_uuid; - gvir_secret_get_config; + gvir_secret_handle_get_type; - gvir_storage_pool_get_type; - gvir_storage_pool_info_get_type; - gvir_storage_pool_handle_get_type; - gvir_storage_pool_get_name; - gvir_storage_pool_get_uuid; + gvir_storage_pool_build; + gvir_storage_pool_build_async; + gvir_storage_pool_build_finish; + gvir_storage_pool_create_volume; gvir_storage_pool_get_config; gvir_storage_pool_get_info; + gvir_storage_pool_get_name; + gvir_storage_pool_get_type; + gvir_storage_pool_get_uuid; + gvir_storage_pool_get_volume; + gvir_storage_pool_get_volumes; + gvir_storage_pool_handle_get_type; + gvir_storage_pool_info_get_type; gvir_storage_pool_refresh; gvir_storage_pool_refresh_async; gvir_storage_pool_refresh_finish; - gvir_storage_pool_get_volumes; - gvir_storage_pool_get_volume; - gvir_storage_pool_create_volume; - gvir_storage_pool_build; - gvir_storage_pool_build_async; - gvir_storage_pool_build_finish; gvir_storage_pool_start; gvir_storage_pool_start_async; gvir_storage_pool_start_finish; - gvir_storage_vol_get_type; - gvir_storage_vol_info_get_type; - gvir_storage_vol_handle_get_type; - gvir_storage_vol_get_name; - gvir_storage_vol_get_path; + gvir_storage_vol_delete; + gvir_storage_vol_download; gvir_storage_vol_get_config; gvir_storage_vol_get_info; - gvir_storage_vol_delete; + gvir_storage_vol_get_name; + gvir_storage_vol_get_path; + gvir_storage_vol_get_type; + gvir_storage_vol_handle_get_type; + gvir_storage_vol_info_get_type; gvir_storage_vol_resize; - gvir_storage_vol_download; gvir_storage_vol_upload; - gvir_connection_handle_get_type; - - gvir_manager_get_type; - gvir_manager_new; - gvir_manager_add_connection; - gvir_manager_remove_connection; - gvir_manager_get_connections; - gvir_manager_find_connection_by_uri; - + gvir_stream_add_watch; + gvir_stream_add_watch_full; gvir_stream_get_type; + gvir_stream_handle_get_type; gvir_stream_receive; gvir_stream_receive_all; gvir_stream_send; gvir_stream_send_all; - gvir_stream_handle_get_type; - gvir_stream_add_watch; - gvir_stream_add_watch_full; local: *; @@ -181,11 +183,11 @@ LIBVIRT_GOBJECT_0.0.9 { LIBVIRT_GOBJECT_0.1.1 { global: + gvir_domain_create_snapshot; + gvir_domain_shutdown_flags_get_type; gvir_domain_snapshot_create_flags_get_type; gvir_domain_xml_flags_get_type; - - gvir_domain_create_snapshot; } LIBVIRT_GOBJECT_0.0.9; LIBVIRT_GOBJECT_0.1.2 { @@ -206,11 +208,11 @@ LIBVIRT_GOBJECT_0.1.3 { LIBVIRT_GOBJECT_0.1.4 { global: - gvir_domain_update_device_flags_get_type; - gvir_domain_update_device; - gvir_domain_reboot_flags_get_type; + gvir_domain_update_device; + gvir_domain_update_device_flags_get_type; + gvir_storage_pool_delete; gvir_storage_pool_delete_async; gvir_storage_pool_delete_finish; -- 1.8.4.2

On Fri, Dec 06, 2013 at 12:37:58PM +0100, Christophe Fergeau wrote:
This is in preparation to enforcing this sorting during make check. The script only checks for alphabetical sorting, which leads to unexpected sorting between classes sharing a common prefix (eg the correct order is: gvir_config_domain_get_foo; gvir_config_domain_interface_set_foo; gvir_config_domain_set_foo;
instead of
gvir_config_domain_get_foo; gvir_config_domain_set_foo; gvir_config_domain_interface_set_foo;
if we want to keep methods from the same class grouped in the symbol file.
Yep, slightly odd. The only way to deal with this would be to introduce another level of grouping. eg in libvirt we put a magic comment with the filename just before each group of symbols, so we sort first by filename and then by symbol name. Not sure if it is worth going to this bother or not here. I don't care much either way, as long as we're consistent in our sorting. ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

This method was never exported. GVirConfigDomainCpu inherits from GVirConfigCapabilitiesCpu so gvir_config_capabilities_cpu_get_features() should be used to get these features (this calls the virtual method GVirConfigCapabilities::get_features() which GVirConfigDomainCpu implements). --- libvirt-gconfig/libvirt-gconfig.sym | 1 - 1 file changed, 1 deletion(-) diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 14d98e3..c1e6cc0 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -457,7 +457,6 @@ LIBVIRT_GCONFIG_0.1.0 { gvir_config_domain_cpu_feature_policy_get_type; gvir_config_domain_cpu_feature_set_policy; - gvir_config_domain_cpu_get_features; gvir_config_domain_cpu_get_match_policy; gvir_config_domain_cpu_get_mode; gvir_config_domain_cpu_get_type; -- 1.8.4.2

On Fri, Dec 06, 2013 at 12:37:59PM +0100, Christophe Fergeau wrote:
This method was never exported. GVirConfigDomainCpu inherits from GVirConfigCapabilitiesCpu so gvir_config_capabilities_cpu_get_features() should be used to get these features (this calls the virtual method GVirConfigCapabilities::get_features() which GVirConfigDomainCpu implements). --- libvirt-gconfig/libvirt-gconfig.sym | 1 - 1 file changed, 1 deletion(-)
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 14d98e3..c1e6cc0 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -457,7 +457,6 @@ LIBVIRT_GCONFIG_0.1.0 { gvir_config_domain_cpu_feature_policy_get_type; gvir_config_domain_cpu_feature_set_policy;
- gvir_config_domain_cpu_get_features; gvir_config_domain_cpu_get_match_policy; gvir_config_domain_cpu_get_mode; gvir_config_domain_cpu_get_type;
ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

gvir_connection_restore_domain_from_file_finish was not properly exported because of a typo in the symbol name. This commit also removes a newer occurrence of this symbol in the file (without the typo). This can be done without breaking ABI as we haven't made a release since this duplicate symbol was added in the symbol file. --- libvirt-gobject/libvirt-gobject.sym | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym index 0225969..f2419ac 100644 --- a/libvirt-gobject/libvirt-gobject.sym +++ b/libvirt-gobject/libvirt-gobject.sym @@ -175,7 +175,7 @@ LIBVIRT_GOBJECT_0.0.9 { gvir_connection_restore_domain_from_file; gvir_connection_restore_domain_from_file_async; - gvir_conecction_restore_domain_from_file_finish; + gvir_connection_restore_domain_from_file_finish; gvir_domain_start_async; gvir_domain_start_finish; @@ -234,8 +234,4 @@ LIBVIRT_GOBJECT_0.1.5 { gvir_connection_open_read_only_finish; } LIBVIRT_GOBJECT_0.1.4; -LIBVIRT_GOBJECT_0.1.8 { - gvir_connection_restore_domain_from_file_finish; -} LIBVIRT_GOBJECT_0.1.5; - # .... define new API here using predicted next version number .... -- 1.8.4.2

On Fri, Dec 06, 2013 at 12:38:00PM +0100, Christophe Fergeau wrote:
gvir_connection_restore_domain_from_file_finish was not properly exported because of a typo in the symbol name. This commit also removes a newer occurrence of this symbol in the file (without the typo). This can be done without breaking ABI as we haven't made a release since this duplicate symbol was added in the symbol file. --- libvirt-gobject/libvirt-gobject.sym | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

Import two test scripts from libvirt code which validate that all symbols in libvirt-glib symbol files exist in the ELF binary, and also validate the alphabetical sorting. These are hooked up to run with 'make check'. This commit is based on a libosinfo patch from Daniel P. Berrange --- Makefile.am | 2 + build-aux/check-symfile.pl | 70 +++++++++++++++++++++++++++++ build-aux/check-symsorting.pl | 100 ++++++++++++++++++++++++++++++++++++++++++ configure.ac | 8 ++++ libvirt-gconfig/Makefile.am | 15 +++++++ libvirt-glib/Makefile.am | 15 +++++++ libvirt-gobject/Makefile.am | 15 +++++++ 7 files changed, 225 insertions(+) create mode 100755 build-aux/check-symfile.pl create mode 100755 build-aux/check-symsorting.pl diff --git a/Makefile.am b/Makefile.am index 9101fdb..9b03676 100644 --- a/Makefile.am +++ b/Makefile.am @@ -14,6 +14,8 @@ EXTRA_DIST = $(PACKAGE).spec \ maint.mk \ cfg.mk \ AUTHORS.in \ + build-aux/check-symfile.pl \ + build-aux/check-symsorting.pl \ $(NULL) DISTCLEAN_FILES = $(PACKAGE).spec $(pkgconfig_DATA) diff --git a/build-aux/check-symfile.pl b/build-aux/check-symfile.pl new file mode 100755 index 0000000..d59a213 --- /dev/null +++ b/build-aux/check-symfile.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl + +# Copyright (C) 2012-2013 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see +# <http://www.gnu.org/licenses/>. + +die "syntax: $0 SYMFILE ELFLIB(S)" unless int(@ARGV) >= 2; + +my $symfile = shift @ARGV; +my @elflibs = @ARGV; + +my %wantsyms; +my %gotsyms; + +my $ret = 0; + +open SYMFILE, $symfile or die "cannot read $symfile: $!"; + +while (<SYMFILE>) { + next if /{/; + next if /}/; + next if /global:/; + next if /local:/; + next if /^\s*$/; + next if /^\s*#/; + next if /\*/; + + die "malformed line $_" unless /^\s*(\S+);$/; + + if (exists $wantsyms{$1}) { + print STDERR "Symbol $1 is listed twice\n"; + $ret = 1; + } else { + $wantsyms{$1} = 1; + } +} +close SYMFILE; + +foreach my $elflib (@elflibs) { + open NM, "-|", "nm", $elflib or die "cannot run 'nm $elflib': $!"; + + while (<NM>) { + next unless /^\S+\s(?:[TBD])\s(\S+)\s*$/; + + $gotsyms{$1} = 1; + } + + close NM; +} + +foreach my $sym (keys(%wantsyms)) { + next if exists $gotsyms{$sym}; + + print STDERR "Expected symbol $sym is not in ELF library\n"; + $ret = 1; +} + +exit($ret); diff --git a/build-aux/check-symsorting.pl b/build-aux/check-symsorting.pl new file mode 100755 index 0000000..470247c --- /dev/null +++ b/build-aux/check-symsorting.pl @@ -0,0 +1,100 @@ +#!/usr/bin/perl + +# Copyright (C) 2012-2013 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see +# <http://www.gnu.org/licenses/>. + +use strict; +use warnings; + +die "syntax: $0 SRCDIR SYMFILE..." unless int(@ARGV) >= 2; + +my $ret = 0; +my $srcdir = shift; +my $incomment = 0; +my $name; +foreach my $symfile (@ARGV) { + open SYMFILE, $symfile or die "cannot read $symfile: $!"; + + my $line = 0; + my @group; + + while (<SYMFILE>) { + chomp; + + if ($incomment) { + if (m,\*/,) { + $incomment = 0; + } else { + # skip + } + } else { + if (m,/\*,) { + $incomment = 1; + } elsif (/^(.*)\s*{\s*$/) { + @group = (); + $line = $.; + $name = $1; + } elsif (/^\s*}(.*);$/) { + &check_sorting(\@group, $symfile, $line, $name); + } elsif (/^\s*(global|local):/) { + # skip + } elsif (/^\s*\*;\s*$/) { + # skip + } elsif (/^\s*$/) { + # skip + } else { + $_ =~ s/;//; + push @group, $_; + } + } + } + + close SYMFILE; +} + +sub check_sorting { + my $group = shift; + my $symfile = shift; + my $line = shift; + my $name = shift; + + my @group = @{$group}; + my @sorted = sort { lc $a cmp lc $b } @group; + my $sorted = 1; + my $first; + my $last; + + # Check that symbols within a group are in order + for (my $i = 0 ; $i <= $#sorted ; $i++) { + if ($sorted[$i] ne $group[$i]) { + $first = $i unless defined $first; + $last = $i; + $sorted = 0; + } + } + if (!$sorted) { + @group = splice @group, $first, ($last-$first+1); + @sorted = splice @sorted, $first, ($last-$first+1); + print "Symbol block $name at $symfile:$line: symbols not sorted\n"; + print map { " " . $_ . "\n" } @group; + print "Correct ordering\n"; + print map { " " . $_ . "\n" } @sorted; + print "\n"; + $ret = 1; + } +} + +exit $ret; diff --git a/configure.ac b/configure.ac index 9b5d09c..81e0d4a 100644 --- a/configure.ac +++ b/configure.ac @@ -232,6 +232,14 @@ AC_SUBST([PYTHON_VERSION]) AC_SUBST([PYTHON_INCLUDES]) AC_SUBST([PYTHON_SITE_PACKAGES]) + +with_linux=no +case $host in + *-*-linux*) with_linux=yes ;; +esac +AM_CONDITIONAL([WITH_LINUX], [test "$with_linux" = "yes"]) + + AC_ARG_ENABLE([introspection], AS_HELP_STRING([--enable-introspection], [enable GObject introspection]), [], [enable_introspection=check]) diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 7550afe..d11493b 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -215,6 +215,21 @@ libvirt-gconfig-enum-types.c: $(GCONFIG_HEADER_FILES) libvirt-gconfig-enum-types $(AM_V_GEN) ( $(GLIB_MKENUMS) --template $(srcdir)/libvirt-gconfig-enum-types.c.template $(GCONFIG_HEADER_FILES:%=$(srcdir)/%) ) | \ sed -e "s/G_TYPE_VIR_CONFIG/GVIR_CONFIG_TYPE/" -e "s/g_vir/gvir/" > libvirt-gconfig-enum-types.c +# .libs/libvirt-gconfig.so is built by libtool as a side-effect of the Makefile +# rule for libosvirt-gconfig.la. However, checking symbols relies on Linux ELF layout +if WITH_LINUX +check-symfile: libvirt-gconfig.sym libvirt-gconfig-1.0.la + $(AM_V_GEN)$(PERL) $(top_srcdir)/build-aux/check-symfile.pl libvirt-gconfig.sym \ + .libs/libvirt-gconfig-1.0.so +else ! WITH_LINUX +check-symfile: +endif ! WITH_LINUX +check-symsorting: + $(AM_V_GEN)$(PERL) $(top_srcdir)/build-aux/check-symsorting.pl \ + $(srcdir) libvirt-gconfig.sym +check-local: check-symfile check-symsorting + + if WITH_GOBJECT_INTROSPECTION LibvirtGConfig-1.0.gir: libvirt-gconfig-1.0.la $(G_IR_SCANNER) Makefile.am diff --git a/libvirt-glib/Makefile.am b/libvirt-glib/Makefile.am index 1370ebc..c7b8123 100644 --- a/libvirt-glib/Makefile.am +++ b/libvirt-glib/Makefile.am @@ -37,6 +37,21 @@ libvirt_glib_1_0_la_LDFLAGS = \ -Wl,--version-script=$(srcdir)/libvirt-glib.sym \ -version-info $(LIBVIRT_GLIB_VERSION_INFO) +# .libs/libvirt-glib.so is built by libtool as a side-effect of the Makefile +# rule for libosvirt-glib.la. However, checking symbols relies on Linux ELF layout +if WITH_LINUX +check-symfile: libvirt-glib.sym libvirt-glib-1.0.la + $(AM_V_GEN)$(PERL) $(top_srcdir)/build-aux/check-symfile.pl libvirt-glib.sym \ + .libs/libvirt-glib-1.0.so +else ! WITH_LINUX +check-symfile: +endif ! WITH_LINUX +check-symsorting: + $(AM_V_GEN)$(PERL) $(top_srcdir)/build-aux/check-symsorting.pl \ + $(srcdir) libvirt-glib.sym +check-local: check-symfile check-symsorting + + if WITH_GOBJECT_INTROSPECTION LibvirtGLib-1.0.gir: libvirt-glib-1.0.la $(G_IR_SCANNER) Makefile.am diff --git a/libvirt-gobject/Makefile.am b/libvirt-gobject/Makefile.am index 3284b2c..0cc11e7 100644 --- a/libvirt-gobject/Makefile.am +++ b/libvirt-gobject/Makefile.am @@ -119,6 +119,21 @@ BUILT_SOURCES = $(GOBJECT_GENERATED_FILES) CLEANFILES = $(BUILT_SOURCES) +# .libs/libvirt-gobject.so is built by libtool as a side-effect of the Makefile +# rule for libosvirt-gobject.la. However, checking symbols relies on Linux ELF layout +if WITH_LINUX +check-symfile: libvirt-gobject.sym libvirt-gobject-1.0.la + $(AM_V_GEN)$(PERL) $(top_srcdir)/build-aux/check-symfile.pl libvirt-gobject.sym \ + .libs/libvirt-gobject-1.0.so +else ! WITH_LINUX +check-symfile: +endif ! WITH_LINUX +check-symsorting: + $(AM_V_GEN)$(PERL) $(top_srcdir)/build-aux/check-symsorting.pl \ + $(srcdir) libvirt-gobject.sym +check-local: check-symfile check-symsorting + + if WITH_GOBJECT_INTROSPECTION LibvirtGObject-1.0.gir: libvirt-gobject-1.0.la $(G_IR_SCANNER) Makefile.am -- 1.8.4.2

On Fri, Dec 06, 2013 at 12:38:01PM +0100, Christophe Fergeau wrote:
Import two test scripts from libvirt code which validate that all symbols in libvirt-glib symbol files exist in the ELF binary, and also validate the alphabetical sorting. These are hooked up to run with 'make check'.
This commit is based on a libosinfo patch from Daniel P. Berrange --- Makefile.am | 2 + build-aux/check-symfile.pl | 70 +++++++++++++++++++++++++++++ build-aux/check-symsorting.pl | 100 ++++++++++++++++++++++++++++++++++++++++++ configure.ac | 8 ++++ libvirt-gconfig/Makefile.am | 15 +++++++ libvirt-glib/Makefile.am | 15 +++++++ libvirt-gobject/Makefile.am | 15 +++++++ 7 files changed, 225 insertions(+) create mode 100755 build-aux/check-symfile.pl create mode 100755 build-aux/check-symsorting.pl
ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
participants (2)
-
Christophe Fergeau
-
Daniel P. Berrange