static void ide_build_system_get_build_flags_cb (GObject *object, GAsyncResult *result, gpointer user_data) { IdeBuildSystem *self = (IdeBuildSystem *)object; g_autoptr(IdeTask) task = user_data; g_autoptr(GError) error = NULL; g_auto(GStrv) flags = NULL; GetBuildFlagsData *data; GFile *file; g_assert (IDE_IS_BUILD_SYSTEM (self)); g_assert (G_IS_ASYNC_RESULT (result)); g_assert (IDE_IS_TASK (task)); data = ide_task_get_task_data (task); g_assert (data != NULL); g_assert (data->files != NULL); g_assert (data->files->len > 0); g_assert (data->index < data->files->len); g_assert (data->flags != NULL); file = g_ptr_array_index (data->files, data->index); g_assert (G_IS_FILE (file)); data->index++; flags = ide_build_system_get_build_flags_finish (self, result, &error); if (error != NULL) g_debug ("Failed to load build flags for \"%s\": %s", g_file_peek_path (file), error->message); else g_hash_table_insert (data->flags, g_object_ref (file), g_steal_pointer (&flags)); if (ide_task_return_error_if_cancelled (task)) return; if (data->index < data->files->len) { GCancellable *cancellable = ide_task_get_cancellable (task); file = g_ptr_array_index (data->files, data->index); g_assert (G_IS_FILE (file)); ide_build_system_get_build_flags_async (self, file, cancellable, ide_build_system_get_build_flags_cb, g_steal_pointer (&task)); return; } ide_task_return_pointer (task, g_steal_pointer (&data->flags), g_hash_table_unref); }
static void ide_clang_service__get_build_flags_cb (GObject *object, GAsyncResult *result, gpointer user_data) { IdeBuildSystem *build_system = (IdeBuildSystem *)object; g_autoptr(GTask) task = user_data; ParseRequest *request; gchar **argv; GError *error = NULL; g_assert (IDE_IS_BUILD_SYSTEM (build_system)); g_assert (G_IS_TASK (task)); request = g_task_get_task_data (task); argv = ide_build_system_get_build_flags_finish (build_system, result, &error); if (!argv) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) g_message ("%s", error->message); g_clear_error (&error); argv = g_new0 (gchar*, 1); } request->command_line_args = argv; #ifdef IDE_ENABLE_TRACE { gchar *cflags; cflags = g_strjoinv (" ", argv); IDE_TRACE_MSG ("CFLAGS = %s", cflags); g_free (cflags); } #endif ide_thread_pool_push_task (IDE_THREAD_POOL_COMPILER, task, ide_clang_service_parse_worker); }