# HG changeset patch
# Node ID 958e419f9783
# Parent  56abba6da605
diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,11 @@
-0.41.1: ????/??/??
+0.42.0: ????/??/??
   * Nothing yet, be the first!
 
 0.41.0: 2023/06/22
   * Fix a leak in settings list (RR 2305) (Elliott Sales de Andrade)
   * Simplify some error freeing (RR 2380) (Elliott Sales de Andrade)
   * Add turtle power to gplugin (RR 2388) (Gary Kramlich)
-  * Create gobject-introspection to make native plugins introspectable
+  * Create gplugin-introspection to make native plugins introspectable
     (RR 2458) (Gary Kramlich)
   * Create a zip file of the docs when building them with convey (RR 2462)
     (Gary Kramlich)
diff --git a/gplugin-gtk4/gplugin-gtk-plugin-page.h b/gplugin-gtk4/gplugin-gtk-plugin-page.h
--- a/gplugin-gtk4/gplugin-gtk-plugin-page.h
+++ b/gplugin-gtk4/gplugin-gtk-plugin-page.h
@@ -33,6 +33,8 @@
 G_BEGIN_DECLS
 
 #define GPLUGIN_GTK_TYPE_PLUGIN_PAGE (gplugin_gtk_plugin_page_get_type())
+
+GPLUGIN_AVAILABLE_IN_0_39
 G_DECLARE_FINAL_TYPE(
 	GPluginGtkPluginPage,
 	gplugin_gtk_plugin_page,
@@ -40,16 +42,21 @@
 	PLUGIN_PAGE,
 	GtkBox)
 
+GPLUGIN_AVAILABLE_IN_0_39
 GtkWidget *gplugin_gtk_plugin_page_new(void);
 
+GPLUGIN_AVAILABLE_IN_0_39
 void gplugin_gtk_plugin_page_set_plugin(
 	GPluginGtkPluginPage *page,
 	GPluginPlugin *plugin);
+GPLUGIN_AVAILABLE_IN_0_39
 GPluginPlugin *gplugin_gtk_plugin_page_get_plugin(GPluginGtkPluginPage *page);
 
+GPLUGIN_AVAILABLE_IN_0_40
 void gplugin_gtk_plugin_page_set_settings_backend(
 	GPluginGtkPluginPage *page,
 	gpointer backend);
+GPLUGIN_AVAILABLE_IN_0_40
 gpointer gplugin_gtk_plugin_page_get_settings_backend(
 	GPluginGtkPluginPage *page);
 
diff --git a/gplugin-gtk4/gplugin-gtk-plugin-row.h b/gplugin-gtk4/gplugin-gtk-plugin-row.h
--- a/gplugin-gtk4/gplugin-gtk-plugin-row.h
+++ b/gplugin-gtk4/gplugin-gtk-plugin-row.h
@@ -33,6 +33,8 @@
 G_BEGIN_DECLS
 
 #define GPLUGIN_GTK_TYPE_PLUGIN_ROW (gplugin_gtk_plugin_row_get_type())
+
+GPLUGIN_AVAILABLE_IN_0_38
 G_DECLARE_FINAL_TYPE(
 	GPluginGtkPluginRow,
 	gplugin_gtk_plugin_row,
@@ -40,13 +42,18 @@
 	PLUGIN_ROW,
 	GtkListBoxRow)
 
+GPLUGIN_AVAILABLE_IN_0_38
 GtkWidget *gplugin_gtk_plugin_row_new(void);
 
+GPLUGIN_AVAILABLE_IN_0_38
 void gplugin_gtk_plugin_row_set_plugin(
 	GPluginGtkPluginRow *row,
 	GPluginPlugin *plugin);
+GPLUGIN_AVAILABLE_IN_0_38
 GPluginPlugin *gplugin_gtk_plugin_row_get_plugin(GPluginGtkPluginRow *row);
+GPLUGIN_AVAILABLE_IN_0_38
 gchar *gplugin_gtk_plugin_row_get_sort_key(GPluginGtkPluginRow *row);
+GPLUGIN_AVAILABLE_IN_0_38
 gboolean gplugin_gtk_plugin_row_matches_search(
 	GPluginGtkPluginRow *row,
 	const gchar *text);
diff --git a/gplugin-gtk4/gplugin-gtk-plugin-row.c b/gplugin-gtk4/gplugin-gtk-plugin-row.c
--- a/gplugin-gtk4/gplugin-gtk-plugin-row.c
+++ b/gplugin-gtk4/gplugin-gtk-plugin-row.c
@@ -27,6 +27,8 @@
  *
  * A widget that displays a [iface@GPlugin.Plugin] in a user friendly way,
  * intended to be placed in a [class@Gtk.ListBox].
+ *
+ * Since: 0.38.0
  */
 
 /******************************************************************************
diff --git a/gplugin-gtk4/gplugin-gtk-plugin-settings-list.h b/gplugin-gtk4/gplugin-gtk-plugin-settings-list.h
--- a/gplugin-gtk4/gplugin-gtk-plugin-settings-list.h
+++ b/gplugin-gtk4/gplugin-gtk-plugin-settings-list.h
@@ -34,6 +34,8 @@
 
 #define GPLUGIN_GTK_TYPE_PLUGIN_SETTINGS_LIST \
 	(gplugin_gtk_plugin_settings_list_get_type())
+
+GPLUGIN_AVAILABLE_IN_0_40
 G_DECLARE_FINAL_TYPE(
 	GPluginGtkPluginSettingsList,
 	gplugin_gtk_plugin_settings_list,
@@ -41,11 +43,14 @@
 	PLUGIN_SETTINGS_LIST,
 	GtkBox)
 
+GPLUGIN_AVAILABLE_IN_0_40
 GtkWidget *gplugin_gtk_plugin_settings_list_new(void);
 
+GPLUGIN_AVAILABLE_IN_0_40
 void gplugin_gtk_plugin_settings_list_set_settings(
 	GPluginGtkPluginSettingsList *list,
 	GSettings *settings);
+GPLUGIN_AVAILABLE_IN_0_40
 GSettings *gplugin_gtk_plugin_settings_list_get_settings(
 	GPluginGtkPluginSettingsList *list);
 
diff --git a/gplugin-gtk4/gplugin-gtk-plugin-settings-list.c b/gplugin-gtk4/gplugin-gtk-plugin-settings-list.c
--- a/gplugin-gtk4/gplugin-gtk-plugin-settings-list.c
+++ b/gplugin-gtk4/gplugin-gtk-plugin-settings-list.c
@@ -22,7 +22,7 @@
 #include <gplugin-gtk-plugin-settings-list.h>
 
 /**
- * GPluginGtkPluginSettingslist:
+ * GPluginGtkPluginSettingsList:
  *
  * A [class@Gtk.ListBox] widget that displays all the settings from a plugin.
  *
diff --git a/gplugin-gtk4/gplugin-gtk-view.h b/gplugin-gtk4/gplugin-gtk-view.h
--- a/gplugin-gtk4/gplugin-gtk-view.h
+++ b/gplugin-gtk4/gplugin-gtk-view.h
@@ -33,6 +33,8 @@
 G_BEGIN_DECLS
 
 #define GPLUGIN_GTK_TYPE_VIEW (gplugin_gtk_view_get_type())
+
+GPLUGIN_AVAILABLE_IN_ALL
 G_DECLARE_FINAL_TYPE(
 	GPluginGtkView,
 	gplugin_gtk_view,
@@ -40,24 +42,33 @@
 	VIEW,
 	GtkBox)
 
+GPLUGIN_AVAILABLE_IN_ALL
 GtkWidget *gplugin_gtk_view_new(void);
 
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_gtk_view_set_manager(
 	GPluginGtkView *view,
 	GPluginManager *manager);
+GPLUGIN_AVAILABLE_IN_ALL
 GPluginManager *gplugin_gtk_view_get_manager(GPluginGtkView *view);
 
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_gtk_view_set_show_internal(
 	GPluginGtkView *view,
 	gboolean show_internal);
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_gtk_view_get_show_internal(GPluginGtkView *view);
 
+GPLUGIN_AVAILABLE_IN_0_40
 void gplugin_gtk_view_set_settings_backend(
 	GPluginGtkView *view,
 	gpointer backend);
+GPLUGIN_AVAILABLE_IN_0_40
 gpointer gplugin_gtk_view_get_settings_backend(GPluginGtkView *view);
 
+GPLUGIN_AVAILABLE_IN_0_39
 void gplugin_gtk_view_show_overview(GPluginGtkView *view);
+GPLUGIN_AVAILABLE_IN_0_39
 void gplugin_gtk_view_show_plugin(GPluginGtkView *view, GPluginPlugin *plugin);
 
 G_END_DECLS
diff --git a/gplugin-introspection/gplugin-introspection.h b/gplugin-introspection/gplugin-introspection.h
--- a/gplugin-introspection/gplugin-introspection.h
+++ b/gplugin-introspection/gplugin-introspection.h
@@ -20,12 +20,16 @@
 
 #include <glib.h>
 
+#include <gplugin.h>
+
 G_BEGIN_DECLS
 
+GPLUGIN_AVAILABLE_IN_0_41
 int gplugin_introspection_introspect_plugin(
 	int *argc,
 	char ***argv,
 	const char *filename);
+GPLUGIN_AVAILABLE_IN_0_41
 int gplugin_introspection_introspect_plugins(int *argc, char ***argv, ...)
 	G_GNUC_NULL_TERMINATED;
 
diff --git a/gplugin/gplugin-core.h b/gplugin/gplugin-core.h
--- a/gplugin/gplugin-core.h
+++ b/gplugin/gplugin-core.h
@@ -25,6 +25,8 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <gplugin/gplugin-version.h>
+
 #define GPLUGIN_DOMAIN (g_quark_from_static_string("gplugin"))
 
 /* clang-format off */
@@ -37,9 +39,13 @@
 
 G_BEGIN_DECLS
 
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_init(GPluginCoreFlags flags);
+
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_uninit(void);
 
+GPLUGIN_AVAILABLE_IN_0_34
 GPluginCoreFlags gplugin_get_flags(void);
 
 G_END_DECLS
diff --git a/gplugin/gplugin-file-tree.h b/gplugin/gplugin-file-tree.h
--- a/gplugin/gplugin-file-tree.h
+++ b/gplugin/gplugin-file-tree.h
@@ -20,6 +20,8 @@
 
 #include <glib.h>
 
+#include <gplugin/gplugin-version.h>
+
 typedef struct {
 	gchar *filename;
 	gchar *extension;
@@ -27,7 +29,10 @@
 
 G_BEGIN_DECLS
 
+GPLUGIN_AVAILABLE_IN_ALL
 GNode *gplugin_file_tree_new(GList *paths);
+
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_file_tree_free(GNode *root);
 
 G_END_DECLS
diff --git a/gplugin/gplugin-loader.h b/gplugin/gplugin-loader.h
--- a/gplugin/gplugin-loader.h
+++ b/gplugin/gplugin-loader.h
@@ -25,9 +25,13 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <gplugin/gplugin-version.h>
+
 G_BEGIN_DECLS
 
 #define GPLUGIN_TYPE_LOADER (gplugin_loader_get_type())
+
+GPLUGIN_AVAILABLE_IN_ALL
 G_DECLARE_DERIVABLE_TYPE(
 	GPluginLoader,
 	gplugin_loader,
@@ -60,19 +64,25 @@
 	gpointer reserved[4];
 };
 
+GPLUGIN_AVAILABLE_IN_0_34
 const gchar *gplugin_loader_get_id(GPluginLoader *loader);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GSList *gplugin_loader_get_supported_extensions(GPluginLoader *loader);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GPluginPlugin *gplugin_loader_query_plugin(
 	GPluginLoader *loader,
 	const gchar *filename,
 	GError **error);
 
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_loader_load_plugin(
 	GPluginLoader *loader,
 	GPluginPlugin *plugin,
 	GError **error);
+
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_loader_unload_plugin(
 	GPluginLoader *loader,
 	GPluginPlugin *plugin,
diff --git a/gplugin/gplugin-manager.h b/gplugin/gplugin-manager.h
--- a/gplugin/gplugin-manager.h
+++ b/gplugin/gplugin-manager.h
@@ -26,10 +26,13 @@
 #include <glib-object.h>
 
 #include <gplugin/gplugin-plugin.h>
+#include <gplugin/gplugin-version.h>
 
 G_BEGIN_DECLS
 
 #define GPLUGIN_TYPE_MANAGER (gplugin_manager_get_type())
+
+GPLUGIN_AVAILABLE_IN_0_32
 G_DECLARE_FINAL_TYPE(GPluginManager, gplugin_manager, GPLUGIN, MANAGER, GObject)
 
 typedef void (*GPluginManagerForeachFunc)(
@@ -37,75 +40,111 @@
 	GSList *plugins,
 	gpointer data);
 
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_manager_append_path(GPluginManager *manager, const gchar *path);
+
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_manager_prepend_path(GPluginManager *manager, const gchar *path);
+
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_manager_remove_path(GPluginManager *manager, const gchar *path);
+
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_manager_remove_paths(GPluginManager *manager);
 
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_manager_add_default_paths(GPluginManager *manager);
+
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_manager_add_app_paths(
 	GPluginManager *manager,
 	const gchar *prefix,
 	const gchar *appname);
+
+GPLUGIN_AVAILABLE_IN_0_37
 void gplugin_manager_append_paths_from_environment(
 	GPluginManager *manager,
 	const gchar *name);
+
+GPLUGIN_AVAILABLE_IN_0_37
 void gplugin_manager_prepend_paths_from_environment(
 	GPluginManager *manager,
 	const gchar *name);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GList *gplugin_manager_get_paths(GPluginManager *manager);
 
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_manager_register_loader(
 	GPluginManager *manager,
 	GPluginLoader *loader,
 	GError **error);
+
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_manager_unregister_loader(
 	GPluginManager *manager,
 	GPluginLoader *loader,
 	GError **error);
+
+GPLUGIN_AVAILABLE_IN_ALL
 GList *gplugin_manager_get_loaders(GPluginManager *manager);
 
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_manager_refresh(GPluginManager *manager);
 
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_manager_foreach(
 	GPluginManager *manager,
 	GPluginManagerForeachFunc func,
 	gpointer data);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GSList *gplugin_manager_find_plugins(GPluginManager *manager, const gchar *id);
+
+GPLUGIN_AVAILABLE_IN_ALL
 GSList *gplugin_manager_find_plugins_with_version(
 	GPluginManager *manager,
 	const gchar *id,
 	const gchar *op,
 	const gchar *version);
+
+GPLUGIN_AVAILABLE_IN_ALL
 GSList *gplugin_manager_find_plugins_with_state(
 	GPluginManager *manager,
 	GPluginPluginState state);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GPluginPlugin *gplugin_manager_find_plugin(
 	GPluginManager *manager,
 	const gchar *id);
+
+GPLUGIN_AVAILABLE_IN_ALL
 GPluginPlugin *gplugin_manager_find_plugin_with_newest_version(
 	GPluginManager *manager,
 	const gchar *id);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GSList *gplugin_manager_get_plugin_dependencies(
 	GPluginManager *manager,
 	GPluginPlugin *plugin,
 	GError **error);
 
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_manager_load_plugin(
 	GPluginManager *manager,
 	GPluginPlugin *plugin,
 	GError **error);
+
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_manager_unload_plugin(
 	GPluginManager *manager,
 	GPluginPlugin *plugin,
 	GError **error);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GList *gplugin_manager_list_plugins(GPluginManager *manager);
 
+GPLUGIN_AVAILABLE_IN_0_33
 GPluginManager *gplugin_manager_get_default(void);
 
 G_END_DECLS
diff --git a/gplugin/gplugin-native-loader.h b/gplugin/gplugin-native-loader.h
--- a/gplugin/gplugin-native-loader.h
+++ b/gplugin/gplugin-native-loader.h
@@ -26,12 +26,15 @@
 #include <glib-object.h>
 
 #include <gplugin/gplugin-loader.h>
+#include <gplugin/gplugin-version.h>
 
 #define GPLUGIN_NATIVE_PLUGIN_ABI_VERSION 0x01000000
 
 G_BEGIN_DECLS
 
 #define GPLUGIN_TYPE_NATIVE_LOADER (gplugin_native_loader_get_type())
+
+GPLUGIN_AVAILABLE_IN_ALL
 G_DECLARE_FINAL_TYPE(
 	GPluginNativeLoader,
 	gplugin_native_loader,
@@ -39,6 +42,7 @@
 	NATIVE_LOADER,
 	GPluginLoader)
 
+GPLUGIN_AVAILABLE_IN_0_34
 GPluginLoader *gplugin_native_loader_new(void);
 
 G_END_DECLS
diff --git a/gplugin/gplugin-native-plugin.h b/gplugin/gplugin-native-plugin.h
--- a/gplugin/gplugin-native-plugin.h
+++ b/gplugin/gplugin-native-plugin.h
@@ -26,10 +26,13 @@
 
 #include <gplugin/gplugin-plugin-info.h>
 #include <gplugin/gplugin-plugin.h>
+#include <gplugin/gplugin-version.h>
 
 G_BEGIN_DECLS
 
 #define GPLUGIN_TYPE_NATIVE_PLUGIN (gplugin_native_plugin_get_type())
+
+GPLUGIN_AVAILABLE_IN_ALL
 G_DECLARE_FINAL_TYPE(
 	GPluginNativePlugin,
 	gplugin_native_plugin,
@@ -47,8 +50,10 @@
 typedef gboolean (*GPluginNativePluginUnloadFunc)(GPluginPlugin *plugin, gboolean shutdown, GError **error);
 /* clang-format on */
 
+GPLUGIN_AVAILABLE_IN_ALL
 GModule *gplugin_native_plugin_get_module(GPluginNativePlugin *plugin);
 
+GPLUGIN_AVAILABLE_MACRO_IN_0_31
 #define GPLUGIN_NATIVE_PLUGIN_DECLARE(name) \
 	G_MODULE_EXPORT GPluginPluginInfo *gplugin_query(GError **error); \
 	G_MODULE_EXPORT GPluginPluginInfo *gplugin_query(GError **error) \
diff --git a/gplugin/gplugin-options.h b/gplugin/gplugin-options.h
--- a/gplugin/gplugin-options.h
+++ b/gplugin/gplugin-options.h
@@ -24,8 +24,11 @@
 
 #include <glib.h>
 
+#include <gplugin/gplugin-version.h>
+
 G_BEGIN_DECLS
 
+GPLUGIN_AVAILABLE_IN_ALL
 GOptionGroup *gplugin_get_option_group(void);
 
 G_END_DECLS
diff --git a/gplugin/gplugin-plugin-info.h b/gplugin/gplugin-plugin-info.h
--- a/gplugin/gplugin-plugin-info.h
+++ b/gplugin/gplugin-plugin-info.h
@@ -25,9 +25,13 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <gplugin/gplugin-version.h>
+
 G_BEGIN_DECLS
 
 #define GPLUGIN_TYPE_PLUGIN_INFO (gplugin_plugin_info_get_type())
+
+GPLUGIN_AVAILABLE_IN_ALL
 G_DECLARE_DERIVABLE_TYPE(
 	GPluginPluginInfo,
 	gplugin_plugin_info,
@@ -36,7 +40,6 @@
 	GObject)
 
 #include <gplugin/gplugin-loader.h>
-#include <gplugin/gplugin-version.h>
 
 struct _GPluginPluginInfoClass {
 	/*< private >*/
@@ -54,32 +57,74 @@
 		__VA_ARGS__))
 /* clang-format on */
 
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_id(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 gchar *gplugin_plugin_info_get_id_normalized(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_0_32
 const gchar *const *gplugin_plugin_info_get_provides(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 gint gplugin_plugin_info_get_priority(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 guint32 gplugin_plugin_info_get_abi_version(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_plugin_info_get_internal(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_0_39
 gboolean gplugin_plugin_info_get_auto_load(GPluginPluginInfo *info);
 
-G_DEPRECATED_FOR(gplugin_plugin_info_get_auto_load)
+GPLUGIN_DEPRECATED_IN_0_39_FOR(gplugin_plugin_info_get_auto_load)
 gboolean gplugin_plugin_info_get_load_on_query(GPluginPluginInfo *info);
 
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_name(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_version(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_0_39
 const gchar *gplugin_plugin_info_get_settings_schema(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_license_id(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_license_text(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_license_url(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_icon_name(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_summary(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_description(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_category(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *const *gplugin_plugin_info_get_authors(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_plugin_info_get_website(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *const *gplugin_plugin_info_get_dependencies(
 	GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_ALL
 gboolean gplugin_plugin_info_get_bind_global(GPluginPluginInfo *info);
+
+GPLUGIN_AVAILABLE_IN_0_35
 gboolean gplugin_plugin_info_get_unloadable(GPluginPluginInfo *info);
 
 G_END_DECLS
diff --git a/gplugin/gplugin-plugin.h b/gplugin/gplugin-plugin.h
--- a/gplugin/gplugin-plugin.h
+++ b/gplugin/gplugin-plugin.h
@@ -25,6 +25,8 @@
 #include <glib.h>
 #include <glib-object.h>
 
+#include <gplugin/gplugin-version.h>
+
 /* clang-format off */
 typedef enum /*< prefix=GPLUGIN_PLUGIN_STATE,underscore_name=GPLUGIN_PLUGIN_STATE >*/ {
 	GPLUGIN_PLUGIN_STATE_UNKNOWN = -1,
@@ -43,6 +45,8 @@
 G_BEGIN_DECLS
 
 #define GPLUGIN_TYPE_PLUGIN (gplugin_plugin_get_type())
+
+GPLUGIN_AVAILABLE_IN_ALL
 G_DECLARE_INTERFACE(GPluginPlugin, gplugin_plugin, GPLUGIN, PLUGIN, GObject)
 
 /* circular dependencies suck... */
@@ -63,20 +67,33 @@
 	gpointer reserved[8];
 };
 
+GPLUGIN_AVAILABLE_IN_ALL
 gchar *gplugin_plugin_get_filename(GPluginPlugin *plugin);
+
+GPLUGIN_AVAILABLE_IN_ALL
 GPluginLoader *gplugin_plugin_get_loader(GPluginPlugin *plugin);
+
+GPLUGIN_AVAILABLE_IN_ALL
 GPluginPluginInfo *gplugin_plugin_get_info(GPluginPlugin *plugin);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GPluginPluginState gplugin_plugin_get_state(GPluginPlugin *plugin);
+
+GPLUGIN_AVAILABLE_IN_ALL
 void gplugin_plugin_set_state(GPluginPlugin *plugin, GPluginPluginState state);
 
+GPLUGIN_AVAILABLE_IN_0_38
 GPluginPluginState gplugin_plugin_get_desired_state(GPluginPlugin *plugin);
+
+GPLUGIN_AVAILABLE_IN_0_38
 void gplugin_plugin_set_desired_state(
 	GPluginPlugin *plugin,
 	GPluginPluginState state);
 
+GPLUGIN_AVAILABLE_IN_ALL
 GError *gplugin_plugin_get_error(GPluginPlugin *plugin);
 
+GPLUGIN_AVAILABLE_IN_0_32
 const gchar *gplugin_plugin_state_to_string(GPluginPluginState state);
 
 G_END_DECLS
diff --git a/gplugin/gplugin-version.h b/gplugin/gplugin-version.h
--- a/gplugin/gplugin-version.h
+++ b/gplugin/gplugin-version.h
@@ -22,19 +22,269 @@
 #ifndef GPLUGIN_VERSION_H
 #define GPLUGIN_VERSION_H
 
+#include <glib.h>
+
 #include <gplugin/gplugin-version-defs.h>
 
+#define _GPLUGIN_EXTERN extern
+
+#ifdef GPLUGIN_DISABLE_DEPRECATION_WARNINGS
+#define GPLUGIN_DEPRECATED _GPLUGIN_EXTERN
+#define GPLUGIN_DEPRECATED_FOR(f) _GPLUGIN_EXTERN
+#define GPLUGIN_UNAVAILABLE(maj, min) _GPLUGIN_EXTERN
+#define GPLUGIN_UNAVAILABLE_STATIC_INLINE(maj, min)
+#define GPLUGIN_UNAVAILABLE_TYPE(maj, min)
+#else
+#define GPLUGIN_DEPRECATED G_DEPRECATED _GPLUGIN_EXTERN
+#define GPLUGIN_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _GPLUGIN_EXTERN
+#define GPLUGIN_UNAVAILABLE(maj, min) G_UNAVAILABLE(maj, min) _GPLUGIN_EXTERN
+#define GPLUGIN_UNAVAILABLE_STATIC_INLINE(maj, min) G_UNAVAILABLE(maj, min)
+#define GPLUGIN_UNAVAILABLE_TYPE(maj, min) G_UNAVAILABLE(maj, min)
+#endif
+
+/**
+ * GPLUGIN_VERSION_CUR_STABLE:
+ *
+ * A macro that evaluates to the current stable version of GPlugin, in a format
+ * that can be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_CUR_STABLE \
+	(G_ENCODE_VERSION(GPLUGIN_MAJOR_VERSION, GPLUGIN_MINOR_VERSION))
+
+/* If the package sets GPLUGIN_VERSION_MIN_REQUIRED to some future
+ * GPLUGIN_VERSION_X_Y value that we don't know about, it will compare as 0 in
+ * preprocessor tests.
+ */
+#ifndef GPLUGIN_VERSION_MIN_REQUIRED
+#define GPLUGIN_VERSION_MIN_REQUIRED (GPLUGIN_VERSION_CUR_STABLE)
+#elif GPLUGIN_VERSION_MIN_REQUIRED == 0
+#undef GPLUGIN_VERSION_MIN_REQUIRED
+#define GPLUGIN_VERSION_MIN_REQUIRED (GPLUGIN_VERSION_CUR_STABLE + 1)
+#endif /* GPLUGIN_VERSION_MIN_REQUIRED */
+
+#if !defined(GPLUGIN_VERSION_MAX_ALLOWED) || (GPLUGIN_VERSION_MAX_ALLOWED == 0)
+#undef GPLUGIN_VERSION_MAX_ALLOWED
+#define GPLUGIN_VERSION_MAX_ALLOWED (GPLUGIN_VERSION_CUR_STABLE)
+#endif /* GPLUGIN_VERSION_MAX_ALLOWED */
+
+/* sanity checks */
+#if GPLUGIN_VERSION_MIN_REQUIRED > GPLUGIN_VERSION_CUR_STABLE
+#error "GPLUGIN_VERSION_MIN_REQUIRED must be <= GPLUGIN_VERSION_CUR_STABLE"
+#endif
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_MIN_REQUIRED
+#error "GPLUGIN_VERSION_MAX_ALLOWED must be >= GPLUGIN_VERSION_MIN_REQUIRED"
+#endif
+#if GPLUGIN_VERSION_MIN_REQUIRED < GPLUGIN_VERSION_0_38
+#error "GPLUGIN_VERSION_MIN_REQUIRED must be >= GPLUGIN_VERSION_0_38"
+#endif
+
+#define GPLUGIN_AVAILABLE_IN_ALL _GPLUGIN_EXTERN
+
+/**
+ * GPLUGIN_VERSION_0_31:
+ *
+ * A macro that evaluates to the 0.31 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_31 (G_ENCODE_VERSION(0, 31))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_31
+#define GPLUGIN_AVAILABLE_MACRO_IN_0_31 GPLUGIN_UNAVAILABLE_MACRO(0, 31)
+#else
+#define GPLUGIN_AVAILABLE_MACRO_IN_0_31
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_32:
+ *
+ * A macro that evaluates to the 0.32 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_32 (G_ENCODE_VERSION(0, 32))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_32
+#define GPLUGIN_AVAILABLE_IN_0_32 GPLUGIN_UNAVAILABLE(0, 32)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_32 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_33:
+ *
+ * A macro that evaluates to the 0.33 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_33 (G_ENCODE_VERSION(0, 33))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_33
+#define GPLUGIN_AVAILABLE_IN_0_33 GPLUGIN_UNAVAILABLE(0, 33)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_33 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_34:
+ *
+ * A macro that evaluates to the 0.34 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_34 (G_ENCODE_VERSION(0, 34))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_34
+#define GPLUGIN_AVAILABLE_IN_0_34 GPLUGIN_UNAVAILABLE(0, 34)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_34 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_35:
+ *
+ * A macro that evaluates to the 0.35 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_35 (G_ENCODE_VERSION(0, 35))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_35
+#define GPLUGIN_AVAILABLE_IN_0_35 GPLUGIN_UNAVAILABLE(0, 35)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_35 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_36:
+ *
+ * A macro that evaluates to the 0.36 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_36 (G_ENCODE_VERSION(0, 36))
+
+/**
+ * GPLUGIN_VERSION_0_37:
+ *
+ * A macro that evaluates to the 0.37 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_37 (G_ENCODE_VERSION(0, 37))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_37
+#define GPLUGIN_AVAILABLE_IN_0_37 GPLUGIN_UNAVAILABLE(0, 37)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_37 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_38:
+ *
+ * A macro that evaluates to the 0.38 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_38 (G_ENCODE_VERSION(0, 38))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_38
+#define GPLUGIN_AVAILABLE_IN_0_38 GPLUGIN_UNAVAILABLE(0, 38)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_38 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_39:
+ *
+ * A macro that evaluates to the 0.39 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_39 (G_ENCODE_VERSION(0, 39))
+
+#if GPLUGIN_VERSION_MIN_REQUIRED >= GPLUGIN_VERSION_0_39
+#define GPLUGIN_DEPRECATED_IN_0_39_FOR(f) GPLUGIN_DEPRECATED_FOR(f)
+#else
+#define GPLUGIN_DEPRECATED_IN_0_39_FOR(f) _GPLUGIN_EXTERN
+#endif
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_39
+#define GPLUGIN_AVAILABLE_IN_0_39 GPLUGIN_UNAVAILABLE(0, 39)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_39 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_40:
+ *
+ * A macro that evaluates to the 0.40 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_40 (G_ENCODE_VERSION(0, 40))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_40
+#define GPLUGIN_AVAILABLE_IN_0_40 GPLUGIN_UNAVAILABLE(0, 40)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_40 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_41:
+ *
+ * A macro that evaluates to the 0.41 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_41 (G_ENCODE_VERSION(0, 41))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_41
+#define GPLUGIN_AVAILABLE_IN_0_41 GPLUGIN_UNAVAILABLE(0, 41)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_41 _GPLUGIN_EXTERN
+#endif
+
+/**
+ * GPLUGIN_VERSION_0_42:
+ *
+ * A macro that evaluates to the 0.42 version of GPlugin, in a format that can
+ * be used by the C pre-processor.
+ *
+ * Since: 0.42.0
+ */
+#define GPLUGIN_VERSION_0_42 (G_ENCODE_VERSION(0, 42))
+
+#if GPLUGIN_VERSION_MAX_ALLOWED < GPLUGIN_VERSION_0_42
+#define GPLUGIN_AVAILABLE_IN_0_42 GPLUGIN_UNAVAILABLE(0, 42)
+#else
+#define GPLUGIN_AVAILABLE_IN_0_42 _GPLUGIN_EXTERN
+#endif
+
 #define GPLUGIN_VERSION_CHECK(major, minor, micro) \
 	((major) == GPLUGIN_MAJOR_VERSION && \
 	 ((minor) < GPLUGIN_MINOR_VERSION || \
 	  ((minor) == GPLUGIN_MINOR_VERSION && (micro) <= GPLUGIN_MICRO_VERSION)))
 
-#include <glib.h>
-
 G_BEGIN_DECLS
 
+GPLUGIN_AVAILABLE_IN_ALL
 const gchar *gplugin_version_check(guint major, guint minor, guint micro);
 
+GPLUGIN_AVAILABLE_IN_ALL
 gint gplugin_version_compare(const gchar *v1, const gchar *v2);
 
 G_END_DECLS
diff --git a/meson.build b/meson.build
--- a/meson.build
+++ b/meson.build
@@ -3,7 +3,7 @@
 ###############################################################################
 project('gplugin', 'c',
 	license : 'LGPL-2.0-or-later',
-	version : '0.41.1-dev',
+	version : '0.42.0-dev',
 	meson_version : '>=0.61.0',
 	default_options : ['c_std=c17', 'warning_level=2'])
 
