Some compile output still leaks through with --verbosity=1

OpenSubmitted by Mark H Weaver.
Details
2 participants
  • Ludovic Courtès
  • Mark H Weaver
Owner
unassigned
Severity
important
M
M
Mark H Weaver wrote on 21 Apr 2019 01:53
(address . bug-guix@gnu.org)
87mukkfd2j.fsf@netris.org
Sometimes when compiling a package with --verbosity=1, some parts of thecompile output leak through. For example, see the transcript below.
Mark

Toggle snippet (1247 lines)mhw@jojen ~$ guix system build /etc/config.scm --verbosity=1 --keep-failed --keep-going; guix package -m mhw-manifest.scm --keep-failed --keep-goingbuilding /gnu/store/3c9f2rv92fb5id7xy0h62jl4vvglvpvh-linux-libre-5.0.8-gnu.tar.xz.drv...downloading from https://linux-libre.fsfla.org/pub/linux-libre/releases/5.0.8-gnu/linux-libre-5.0.8-gnu.tar.xz...building /gnu/store/cxlivh8bq6adnhdzc6i75z5i2qplq8zr-linux-libre-5.0.8-gnu.tar.xz.drv...building /gnu/store/9xlx7zj4w9cl69xi3d21gl40l3gx4jri-linux-libre-5.0.8.drv...building /gnu/store/la179xxpm8m4jmajjr3xfrchzfwpc06y-console-setup-1.191-checkout.drv...building /gnu/store/v7a1y4v0nwrq64ddr7kdm4855gzjrzrc-console-setup-1.191.drv...building /gnu/store/04wdi408fbl9bmnzdy4dwxd135cy9jss-gpgme-1.13.0.tar.bz2.drv...downloading from https://gnupg.org/ftp/gcrypt/gpgme/gpgme-1.13.0.tar.bz2...building /gnu/store/yaavzrys958mhmki2axpdnbrlyzd911f-gpgme-1.13.0.drv...- 'check' phaselt.building /gnu/store/0rdfdqsahs0axzhpn6k3g4zmskmgkvcg-samba-4.10.2.drv...building /gnu/store/75z0i5hb2cwn0y76gnaqlj18z1715yy1-volume-key-0.3.12.drv...building /gnu/store/0fjcqx6s7bm7wsa4iwf2knpki9r8g71h-libblockdev-2.21.drv...building /gnu/store/dk1867ygsaimm5yzxp6rrx3379fsx878-udisks-2.7.7.drv...building /gnu/store/a2cwdflfbklmj4cflrzkd4n4m3q3ain5-gvfs-1.32.1.drv...building /gnu/store/j8a8k76qaslj3bvbbbzpp6wwh80cv27b-libmbim-1.18.2.tar.xz.drv...downloading from https://www.freedesktop.org/software/libmbim/libmbim-1.18.2.tar.xz...building /gnu/store/070338avjl034y1vqd40hb62aw3i7yg0-libqmi-1.22.4.tar.xz.drv...downloading from https://www.freedesktop.org/software/libqmi/libqmi-1.22.4.tar.xz...building /gnu/store/vgli6q8lyfp92mxr9v5783kd2cgyb3mr-libmbim-1.18.2.drv...building /gnu/store/7jq010r8fvdgdr9sb6g2znrkqkjgpbjk-libqmi-1.22.4.drv...building /gnu/store/rn5mbq2h2fmxpd95q6cfx31bgbw5q89a-modem-manager-1.4.14.drv...\ 'build' phase�@ build-log 30033 4096� is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_error (ctx->result, ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:122:21: note: declared here void g_simple_async_result_set_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6136:5: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem.c: In function ‘sms_pdu_part_list_ready’:mm-broadband-modem.c:6172:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6179:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6205:5: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem.c: In function ‘list_parts_lock_storages_ready’:mm-broadband-modem.c:6219:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, @ build-log 30033 4096 from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c: In function ‘modem_messaging_load_initial_sms_parts’:mm-broadband-modem.c:6249:15: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->self = g_object_ref (self); ^mm-broadband-modem.c:6250:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] ctx->result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem.c: In function ‘hdr_state_context_complete_and_free’:mm-broadband-modem.c:6365:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (ctx->result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘modem_cdma_get_hdr_state_finish’:mm-broadband-modem.c:6382:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6385:5: warning: ‘g_simple_async_result_get_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] results = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:79:21: note: declared here gpointer g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘hdr_subsys_state_info_ready’:mm-broadband-modem.c:6405:9: warning: ‘g_simple_async_result_set_from_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_from_error (ctx->result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-g@ build-log 30033 4096lib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:113:21: note: declared here void g_simple_async_result_set_from_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6415:9: warning: ‘g_simple_async_result_set_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_error (ctx->result, ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:122:21: note: declared here void g_simple_async_result_set_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6433:5: warning: ‘g_simple_async_result_set_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gpointer (ctx->result, results, (GDestroyNotify)g_free); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:75:21: note: declared here void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, ^mm-broadband-modem.c: In function ‘modem_cdma_get_hdr_state’:mm-broadband-modem.c:6448:9: warning: ‘g_simple_async_report_error_in_idle’ is deprecated: Use 'g_task_report_error' instead [-Wdeprecated-declarations] g_simple_async_report_error_in_idle (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:140:6: note: declared here void g_simple_async_report_error_in_idle (GObject *object, ^mm-broadband-modem.c:6459:15: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->self = g_object_ref (self); ^mm-broadband-modem.c:6460:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] ctx->result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem.c: In function ‘call_manager_state_context_complete_and_free’:mm-broadband-modem.c:6497:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (ctx->result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncre@ build-log 30033 4096sult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘modem_cdma_get_call_manager_state_finish’:mm-broadband-modem.c:6513:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6516:5: warning: ‘g_simple_async_result_get_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] results = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:79:21: note: declared here gpointer g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘cm_subsys_state_info_ready’:mm-broadband-modem.c:6535:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6546:9: warning: ‘g_simple_async_result_set_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_error (ctx->result, ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:122:21: note: declared here void g_simple_async_result_set_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6561:5: warning: ‘g_simple_async_result_set_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gpointer (ctx->result, results, (GDestroyNotify)g_free); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:75:21: note: declared here void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, ^mm-broadband-modem.c: In function ‘modem_cdma_get_call_manager_state’:mm-broadband-modem.c:6576:9: warning: ‘g_sim@ build-log 30033 4096ple_async_report_error_in_idle’ is deprecated: Use 'g_task_report_error' instead [-Wdeprecated-declarations] g_simple_async_report_error_in_idle (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:140:6: note: declared here void g_simple_async_report_error_in_idle (GObject *object, ^mm-broadband-modem.c:6587:15: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->self = g_object_ref (self); ^mm-broadband-modem.c:6588:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] ctx->result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem.c: In function ‘cdma1x_serving_system_context_complete_and_free’:mm-broadband-modem.c:6627:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (ctx->result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘modem_cdma_get_cdma1x_serving_system_finish’:mm-broadband-modem.c:6656:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6659:5: warning: ‘g_simple_async_result_get_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] results = (Cdma1xServingSystemResults *)g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:79:21: note: declared here gpointer g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘css_query_ready’:mm-broadband-modem.c:6685:9: warning: ‘g_simple_async_result_take_e@ build-log 30033 4096rror’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6708:13: warning: ‘g_simple_async_result_set_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_error ( ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:122:21: note: declared here void g_simple_async_result_set_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6748:9: warning: ‘g_simple_async_result_set_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_error ( ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:122:21: note: declared here void g_simple_async_result_set_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6777:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6790:5: warning: ‘g_simple_async_result_set_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gpointer (ctx->result, results, (GDestroyNotify)g_free); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:75:21: note: declared here void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, ^mm-broadband-modem.c: In function ‘qcdm_cdma_status_ready’:mm-broadband-modem.c:6854:5: warning: ‘g_simple_async_result_set_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gpointer (ctx->result, results, (GDestroyNotify)g_free); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/@ build-log 30033 4096store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:75:21: note: declared here void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, ^mm-broadband-modem.c: In function ‘modem_cdma_get_cdma1x_serving_system’:mm-broadband-modem.c:6867:15: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->self = g_object_ref (self); ^mm-broadband-modem.c:6868:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] ctx->result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem.c: In function ‘modem_cdma_get_service_status_finish’:mm-broadband-modem.c:6909:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6912:5: warning: ‘g_simple_async_result_get_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] *has_cdma_service = g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (res)); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:91:21: note: declared here gboolean g_simple_async_result_get_op_res_gboolean (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘cad_query_ready’:mm-broadband-modem.c:6926:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (simple, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6933:13: warning: ‘g_simple_async_result_set_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_error (simple, ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/@ build-log 30033 4096include/glib-2.0/gio/gsimpleasyncresult.h:122:21: note: declared here void g_simple_async_result_set_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6940:13: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (simple, (cad == 1)); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6943:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (simple); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘modem_cdma_get_service_status’:mm-broadband-modem.c:6954:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem.c: In function ‘detailed_registration_state_context_complete_and_free’:mm-broadband-modem.c:6988:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, ctx->error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6995:9: warning: ‘g_simple_async_result_set_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gpointer (ctx->result, results, g_free); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:75:21: note: declared here void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, ^mm-broadband-modem.c:6998:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdepre@ build-log 30033 1434cated-declarations] g_simple_async_result_complete (ctx->result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem.c: In function ‘modem_cdma_get_detailed_registration_state_finish’:mm-broadband-modem.c:7014:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-broadband-modem.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^| 'build' phase��@ build-log 30033 4096��g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-sim-mbim.c:283:5: warning: ‘g_simple_async_result_get_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] provider = (MbimProvider *)g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:79:21: note: declared here gpointer g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c:7964:5: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); ^mm-sim-mbim.c: In function ‘load_operator_name_ready’:In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-sim-mbim.c:303:9: warning: ‘g_simple_async_result_set_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gpointer (simple, provider, (GDestroyNotify)mbim_provider_free); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:75:21: note: declared here void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, ^mm-sim-mbim.c:305:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (simple, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-sim-mbim.c:309:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (simple); ^mm-broadband-modem-qmi.c: In function ‘disable_location_gathering’:In file included from /gn@ build-log 30033 4096u/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c:7979:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-sim-mbim.c: In function ‘load_operator_name’:mm-sim-mbim.c:325:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, load_operator_name); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem-qmi.c:7987:9: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:7988:9: warning: ‘g_simple_async_result_complete_in_idle’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete_in_idle (result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:106:21: note: declared here void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); ^mm-sim-mbim.c: In function ‘send_pin_finish’:mm-sim-mbim.c:345:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declaratio@ build-log 30033 4096ns] return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:8001:15: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->self = g_object_ref (self); ^mm-broadband-modem-qmi.c:8002:17: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->client = g_object_ref (client); ^mm-sim-mbim.c: In function ‘pin_set_enter_ready’:mm-sim-mbim.c:380:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (simple, error); ^mm-broadband-modem-qmi.c:8032:5: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-sim-mbim.c:382:9: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (simple, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-sim-mbim.c:383:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (simple); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-sim-mbim.c: In function ‘send_pin’:mm-sim-mbim.c:403:5: warning: ‘g_simple_async_result_new’ @ build-log 30033 4096is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, send_pin); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem-qmi.c: In function ‘enable_location_gathering_context_complete_and_free’:mm-broadband-modem-qmi.c:8074:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (ctx->result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-sim-mbim.c:413:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-sim-mbim.c:414:9: warning: ‘g_simple_async_result_complete_in_idle’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete_in_idle (result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-sim-mbim.c:25:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:106:21: note: declared here void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘enable_location_gathering_finish’:mm-broadband-modem-qmi.c:8087:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c: In function ‘ser_location_ready’:mm-broadband-modem-qmi.c:81@ build-log 30033 170501:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:8108:9: warning: ‘g_simple_async_result_take_error’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_take_error (ctx->result, error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:116:21: note: declared here void g_simple_async_result_take_error (GSimpleAsyncResult *simple, ^| 'build' phase��@ build-log 30033 4096��g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (simple); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘oma_cancel_session’:mm-broadband-modem-qmi.c:8696:9: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem-qmi.c: In function ‘common_oma_setup_cleanup_unsolicited_events_finish’:mm-broadband-modem-qmi.c:8757:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c: In function ‘common_setup_cleanup_oma_unsolicited_events’:mm-broadband-modem-qmi.c:8774:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem-qmi.c:8782:9: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, @ build-log 30033 4096 from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:8783:9: warning: ‘g_simple_async_result_complete_in_idle’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete_in_idle (result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:106:21: note: declared here void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c:8805:5: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:8806:5: warning: ‘g_simple_async_result_complete_in_idle’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete_in_idle (result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:106:21: note: declared here void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘enable_oma_unsolicited_events_context_complete_and_free’:mm-broadband-modem-qmi.c:8845:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (ctx->result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘common_oma_enable_disa@ build-log 30033 4096ble_unsolicited_events_finish’:mm-broadband-modem-qmi.c:8857:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c: In function ‘ser_oma_indicator_ready’:mm-broadband-modem-qmi.c:8882:5: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c: In function ‘common_enable_disable_oma_unsolicited_events’:mm-broadband-modem-qmi.c:8902:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem-qmi.c:8910:9: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:8911:9: warning: ‘g_simple_async_result_complete_in_idle’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete_in_idle (result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.@ build-log 30033 4096h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:106:21: note: declared here void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c:8918:17: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->client = g_object_ref (client); ^mm-broadband-modem-qmi.c: In function ‘firmware_check_support_context_complete_and_free’:mm-broadband-modem-qmi.c:8993:5: warning: ‘g_simple_async_result_complete’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete (ctx->result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:104:21: note: declared here void g_simple_async_result_complete (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘firmware_check_support_finish’:mm-broadband-modem-qmi.c:9007:5: warning: ‘g_simple_async_result_get_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] return g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (res)); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:91:21: note: declared here gboolean g_simple_async_result_get_op_res_gboolean (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘get_next_image_info’:mm-broadband-modem-qmi.c:9121:13: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, FALSE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:9123:13: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, @ build-log 30033 4096 from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c: In function ‘list_stored_images_ready’:mm-broadband-modem-qmi.c:9163:9: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, FALSE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:9208:9: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, FALSE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:9256:9: warning: ‘g_simple_async_result_set_op_res_gboolean’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gboolean (ctx->result, FALSE); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:88:21: note: declared here void g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c: In function ‘firmware_check_support’:mm-broadband-modem-qmi.c:9283:15: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->self = g_object_ref (self); ^mm-broadband-modem-qmi.c:9284:17: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ctx->client = g_object_ref (client); ^mm-broadband-modem-qmi.c:9285:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] ctx->result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-@ build-log 30033 4096broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem-qmi.c: In function ‘firmware_load_list_finish’:mm-broadband-modem-qmi.c:9307:5: warning: ‘g_simple_async_result_get_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] return (GList *)g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:79:21: note: declared here gpointer g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘firmware_load_list’:mm-broadband-modem-qmi.c:9319:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem-qmi.c:9328:5: warning: ‘g_simple_async_result_set_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gpointer (result, dup, NULL); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:75:21: note: declared here void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:9329:5: warning: ‘g_simple_async_result_complete_in_idle’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete_in_idle (result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:106:21: note: declared here void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘firmware_load_current_finish’:mm-broadband-modem-qmi.c:9341:5: warning: ‘g_simple_async_result_get_op_res_gpointer’ i@ build-log 30033 4096s deprecated [-Wdeprecated-declarations] return (MMFirmwareProperties *)g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); ^ CC ModemManager-mm-bearer-mbim.omm-bearer-mbim.c: In function ‘peek_ports’:mm-bearer-mbim.c:73:13: warning: ‘g_simple_async_report_error_in_idle’ is deprecated: Use 'g_task_report_error' instead [-Wdeprecated-declarations] g_simple_async_report_error_in_idle (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:79:21: note: declared here gpointer g_simple_async_result_get_op_res_gpointer (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘firmware_load_current’:mm-broadband-modem-qmi.c:9352:5: warning: ‘g_simple_async_result_new’ is deprecated: Use 'g_task_new' instead [-Wdeprecated-declarations] result = g_simple_async_result_new (G_OBJECT (self), ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:51:21: note: declared here GSimpleAsyncResult *g_simple_async_result_new (GObject *source_object, ^mm-broadband-modem-qmi.c:9358:5: warning: ‘g_simple_async_result_set_op_res_gpointer’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_set_op_res_gpointer ( ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:75:21: note: declared here void g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple, ^mm-broadband-modem-qmi.c:9362:5: warning: ‘g_simple_async_result_complete_in_idle’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete_in_idle (result); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:106:21: note: declared here void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘firmware_change_current_context_complete_and_free’:mm-broadband-modem-qmi.c:9379:5: warning: ‘g_simple_async_result_complete_in_idle’ is deprecated [-Wdeprecated-declarations] g_simple_async_result_complete_in_idle (ctx->result@ build-log 30033 2129); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:106:21: note: declared here void g_simple_async_result_complete_in_idle (GSimpleAsyncResult *simple); ^mm-broadband-modem-qmi.c: In function ‘firmware_change_current_finish’:mm-broadband-modem-qmi.c:9393:5: warning: ‘g_simple_async_result_propagate_error’ is deprecated [-Wdeprecated-declarations] return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error); ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-base-modem.h:27, from mm-broadband-modem.h:27, from mm-broadband-modem-qmi.h:19, from mm-broadband-modem-qmi.c:24:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:119:21: note: declared here gboolean g_simple_async_result_propagate_error (GSimpleAsyncResult *simple, ^In file included from /gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gio.h:117:0, from ../libmm-glib/generated/mm-gdbus-manager.h:11, from ../libmm-glib/libmm-glib.h:77, from mm-bearer-mbim.c:27:/gnu/store/cgy82g6yv8l1chawgch47zh23b0jll3l-glib-2.56.3/include/glib-2.0/gio/gsimpleasyncresult.h:140:6: note: declared here void g_simple_async_report_error_in_idle (GObject *object, ^building /gnu/store/chimxmk6w5i4slhlzfb7iqdfc0qng37g-network-manager-1.8.4.drv...building /gnu/store/sr67b6i666xyl9ch6r812m1kps6pd0mj-network-manager-applet-1.8.4.drv...building /gnu/store/pmcv8mr5a2c69ab0g6sfh9aq4w4c0w55-nano-4.1.tar.xz.drv...downloading from https://ftpmirror.gnu.org/gnu/nano/nano-4.1.tar.xz...building /gnu/store/d3d7djjvmis2gj9s3w4ikzapw94fr8hd-nano-4.1.drv...building /gnu/store/79n246z4ijwmnsgn4w075irbhc1pgl92-guix-0.16.0-13.b8b1e4d-checkout.drv...building /gnu/store/dg7jimn8nfwhg8hlpgmpmhzdv32yyk8g-http-parser-2.9.2-checkout.drv...building /gnu/store/d1pgfdvh6l6znqmfkp8sy104gczh62b8-libgit2-0.28.1-checkout.drv...building /gnu/store/2q2l0kvwfqnq9ggak495ihbzcyh1jfv8-http-parser-2.9.2.drv...building /gnu/store/79kqyg6njag5gbycj72i5bfa3irpiafr-libgit2-0.28.tar.xz.drv.../
L
L
Ludovic Courtès wrote on 21 Apr 2019 22:15
(name . Mark H Weaver)(address . mhw@netris.org)(address . 35350@debbugs.gnu.org)
87r29v2jz2.fsf@gnu.org
Hi Mark,
Mark H Weaver <mhw@netris.org> skribis:
Toggle quote (3 lines)> Sometimes when compiling a package with --verbosity=1, some parts of the> compile output leak through. For example, see the transcript below.
Weird. What’s the value of --max-jobs? Is offloading enabled?
Presumably both the client and daemon are recent, right?
Thanks,Ludo’.
M
M
Mark H Weaver wrote on 23 Apr 2019 01:52
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35350@debbugs.gnu.org)
87ftq9silk.fsf@netris.org
Hi Ludovic,
Ludovic Courtès <ludo@gnu.org> writes:
Toggle quote (7 lines)> Mark H Weaver <mhw@netris.org> skribis:>>> Sometimes when compiling a package with --verbosity=1, some parts of the>> compile output leak through. For example, see the transcript below.>> Weird.
FWIW, a few observations, possibly relevant:
(1) Each chunk of leaked output begins with 1 or 2 Unicode Replacement characters (U+FFFD). In the transcript I provided, the first leak began with 1 replacement char, and all later leaks began with 2.
(2) The replacement characters are immediately followed by "@ build-log 30033 4096\n", and that string is also sprinkled throughout the leaked output, with approximately ~4060-4070 characters of leaked output between each occurrence of "@ build-log 30033 4096\n".
Toggle quote (2 lines)> What’s the value of --max-jobs?
I'm not sure, how do I find out? I don't specify it in my OSconfiguration, and it's not on the command line of 'guix-daemon'.Here's the relevant portion of my OS config:
(modify-services %base-services (guix-service-type config => (guix-configuration (inherit config) (use-substitutes? #f) (authorized-keys '()) (substitute-urls '()) (extra-options '("--gc-keep-derivations=yes" "--gc-keep-outputs=yes")))))
I guess it's probably 2, because that's how many cores are in thismachine (Thinkpad X200), and 2 is also the number of GCC processes thatI typically see when building packages on this machine.
Toggle quote (2 lines)> Is offloading enabled?
No. In addition to the above configuration, my /etc/guix/acl alsocontains simply "(acl)".
Toggle quote (2 lines)> Presumably both the client and daemon are recent, right?
Yes, this machine is rarely more than a week out-of-date w.r.t. our'master' branch.
Thanks, Mark
M
M
Mark H Weaver wrote on 23 Apr 2019 10:45
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35350@debbugs.gnu.org)
877eblw1mz.fsf@netris.org
Toggle quote (2 lines)> What’s the value of --max-jobs?
max-jobs is 1. Please disregard my previous response.
Thanks, Mark
L
L
Ludovic Courtès wrote on 23 Apr 2019 12:12
(name . Mark H Weaver)(address . mhw@netris.org)(address . 35350@debbugs.gnu.org)
87imv5jai5.fsf@gnu.org
Hi Mark,
Mark H Weaver <mhw@netris.org> skribis:
Toggle quote (21 lines)> Ludovic Courtès <ludo@gnu.org> writes:>>> Mark H Weaver <mhw@netris.org> skribis:>>>>> Sometimes when compiling a package with --verbosity=1, some parts of the>>> compile output leak through. For example, see the transcript below.>>>> Weird.>> FWIW, a few observations, possibly relevant:>> (1) Each chunk of leaked output begins with 1 or 2 Unicode Replacement> characters (U+FFFD). In the transcript I provided, the first leak> began with 1 replacement char, and all later leaks began with 2.>> (2) The replacement characters are immediately followed by> "@ build-log 30033 4096\n", and that string is also sprinkled> throughout the leaked output, with approximately ~4060-4070> characters of leaked output between each occurrence of> "@ build-log 30033 4096\n".
Indeed. I managed to reproduce it while building modem-manager. Istrace’d ‘guix build’ with an additional ‘pk’¹ to see what happens, andhere’s what leads to the wrong “write(2, "�@ build-log…")” call:
Toggle snippet (30 lines)read(13, "gmlo\0\0\0\0", 8) = 8read(13, "\27\20\0\0\0\0\0\0", 8) = 8read(13, "@ build-log 22090 4096\n […] warning: \342\200", 4119) = 4119read(13, "\0", 1) = 1write(1, "\n", 1) = 1write(1, ";;; (write 1008 <> #f 0)\n", 25) = 25write(1, "\n", 1) = 1write(1, ";;; (write 985 <> 22090 4096)\n", 30) = 30write(1, "\n", 1) = 1write(1, ";;; (write 1008 <> 22090 3111)\n", 31) = 31write(1, "\n", 1) = 1write(1, ";;; (write 1008 <> 22090 2103)\n", 31) = 31write(1, "\n", 1) = 1write(1, ";;; (write 1008 <> 22090 1095)\n", 31) = 31write(1, "\n", 1) = 1write(1, ";;; (write 88 <> 22090 87)\n", 27) = 27write(2, "\r\33[K\\ 'build' phase", 19) = 19[…]write(2, "\r\33[K\\ 'build' phase", 19) = 19write(1, "\n", 1) = 1write(1, ";;; (write 1 <> #f 0)\n", 22) = 22read(13, "gmlo\0\0\0\0", 8) = 8read(13, "\27\20\0\0\0\0\0\0", 8) = 8read(13, "@ build-log 22090 4096\n\230g_simple_async_result_take_error\342\200\231 is deprecated[…]", 4119) = 4119read(13, "\0", 1) = 1write(1, "\n", 1) = 1write(1, ";;; (write 1008 <> #f 0)\n", 25) = 25write(2, "\357\277\275@ build-log 22090 4096\n", 26) = 26
The third read(2) call here ends on a partial UTF-8 sequence for LEFTSINGLE QUOTATION MARK (we get the first two bytes of a three bytesequence.)
What happens is that ‘process-stderr’ in (guix store) gets that bytestring from the daemon, passes it through ‘read-maybe-utf8-string’,which replaces the last two bytes with REPLACEMENT CHARACTER, which isitself a 3-byte sequence.
Thus, we have this extra byte that’s being inserted. That confuses thewhole machinery since the build log was announced as being 4096-bytelong, and it’s now 4097-byte long.
Internally, ‘build-event-output-port’ keeps the last byte of theREPLACEMENT CHARACTER sequence in the ‘%fragments’ buffer.Consequently, the “@ build-log” string that comes next doesn’t start ona newline, and thus it is considered build output. Since the first bytedoes not constitute a valid UTF-8 sequence, another REPLACEMENTCHARACTER is inserted there when it gets printed.

So ‘build-event-output-port’ is working as expected. The problem is thefirst layer of UTF-8 decoding that happens in ‘process-stderr’, in the‘%stderr-next’ case. We would need to disable it, but only if the buildoutput port is ‘build-event-output-port’ (i.e., it’s capable ofinterpreting “multiplexed build output” correctly.)
Thanks,Ludo’.
¹ pk:
Toggle diff (12 lines)diff --git a/guix/status.scm b/guix/status.scmindex cbea4151f2..4dcbcb0c1f 100644--- a/guix/status.scm+++ b/guix/status.scm@@ -717,6 +717,7 @@ The second return value is a thunk to retrieve the current state." (pointer->bytevector ptr count))) (define (write! bv offset count)+ (pk 'write count '<> %build-output-pid %build-output-left) (if %build-output-pid (let ((keep (min count %build-output-left))) (set! %build-output
M
M
Mark H Weaver wrote on 26 Apr 2019 21:09
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35350@debbugs.gnu.org)
87k1fgh9c0.fsf@netris.org
Hi Ludovic,
Thanks for investigating this.
Ludovic Courtès <ludo@gnu.org> writes:
Toggle quote (9 lines)> The third read(2) call here ends on a partial UTF-8 sequence for LEFT> SINGLE QUOTATION MARK (we get the first two bytes of a three byte> sequence.)>> What happens is that ‘process-stderr’ in (guix store) gets that byte> string from the daemon, passes it through ‘read-maybe-utf8-string’,> which replaces the last two bytes with REPLACEMENT CHARACTER, which is> itself a 3-byte sequence.
It seems to me that what's needed here is to save the UTF-8 decoderstate between calls to 'process-stderr'. Coincidentally, I also neededsomething like this a week ago, when I tried implementing R6RS customtextual input/output ports on top of R6RS custom binary input/outputports.
To meet these needs, I've implemented a fairly efficient, purelyfunctional UTF-8 decoder in Scheme that accepts a decoder state and anarbitrary range from a bytevector, and returns a new decoder state.There's a macro that allows arbitrary actions to be performed when acode point (or maximal subpart in the case of errors) is found.
This macro is then used to implement a decoder (utf8->string!) thatwrites into an arbitrary range of an existing string. Of course, it'snot purely functional, but it avoids heap allocation when compiled withGuile. On my Thinkpad X200, it can process around 10 megabytes persecond.
The state is represented as an exact integer between 0 and #xF48FBFinclusive, which are simply the bytes that have been seen so far in thecurrent code sequence, in big-endian order, or 0 for the start state.For example, #xF48FBF represents the state where the bytes (F4 8F BF)have been read. The state is always either 0 or a proper prefix of avalid UTF-8 byte sequence.
I also plan to implement an optimized C version of 'utf8->string!' andadd it to Guile, in order to implement fast custom textual ports. Theprecise name and API is not yet finalized. At present, 'utf8->string!'always replaces maximal subparts with the substitution character in caseof errors, but I intend to eventually support other error modes as well.
What would you think about using this code to replace the uses of'read-maybe-utf8-string', and storing the UTF-8 decoder state in the<store-connection> object? Would we need to store multiple states incase of (max-jobs > 1)?
Regards Mark
;;; Copyright © 2019 Mark H Weaver <mhw@netris.org> ;;; ;;; 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 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 <http://www.gnu.org/licenses/>. (use-modules (rnrs bytevectors) ;; the following modules are only needed for the test. ;;(srfi srfi-1) ;;(ice-9 iconv) ) ;; Well-formed UTF-8 sequences ;; =========================== ;; 00..7F ;; C2..DF 80..BF ;; E0 *A0..BF 80..BF ;; E1..EC 80..BF 80..BF ;; ED 80..9F* 80..BF ;; EE..EF 80..BF 80..BF ;; F0 *90..BF 80..BF 80..BF ;; F1..F3 80..BF 80..BF 80..BF ;; F4 80..8F* 80..BF 80..BF ;; UTF-8 Decoder states ;; ==================== ;; 0 start state ;; C2 .. DF got 1/2 bytes ;; E0 .. EF got 1/3 bytes ;; F0 .. F4 got 1/4 bytes ;; E0A0 .. ED9F got 2/3 bytes (range 1) ;; EE80 .. EFBF got 2/3 bytes (range 2) ;; F090 .. F48F got 2/4 bytes ;; F09080 .. F48FBF got 3/4 bytes (define-syntax-rule (utf8-decode ((j init-expr) ...) (i continue) (output (code-point) e1 e1* ...) (error (maximal-subpart) e2 e2* ...) state-expr bv-expr start-expr end-expr) ;; The start state is 0. ;; When 'error' is called with arguments (state i j ...), 'state' ;; contains the bytes of the "maximal subpart of an ill-formed ;; subsequence" as defined in The Unicode Standard section 3.9, ;; i.e. the bytes which are being represented by this error report ;; and which are not being converted. 'i' is the bytevector index ;; immediately following this maximal subpart, i.e. the index where ;; decoding should resume. 'j ...' are the user-provided seeds. ;; the decoder returns the values: (new-state bv-pos j ...) (let ((bv bv-expr) (end end-expr)) (define (output code-point i j ...) e1 e1* ...) (define (error maximal-subpart i j ...) e2 e2* ...) (define (continue i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (cond ((<= byte #x7F) (output byte (+ i 1) j ...)) ((<= #xC2 byte #xF4) (got-1 byte (+ i 1) j ...)) (else (error byte (+ i 1) j ...)))) (values 0 i j ...))) (define (got-1 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (cond ((not (<= #x80 byte #xBF)) (error state i j ...)) ((<= state #xDF) (output (logior (ash (logand state #x1F) 6) (logand byte #x3F)) (+ i 1) j ...)) (else (let ((state^ (logior (ash state 8) byte))) (cond ((or (<= #xE0A0 state^ #xED9F) (<= #xEE80 state^ #xEFBF)) (got-2/3 state^ (+ i 1) j ...)) ((<= #xF090 state^ #xF48F) (got-2/4 state^ (+ i 1) j ...)) (else (error state i j ...))))))) (values state i j ...))) (define (got-2/3 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (output (logior (ash (logand state #xF00) 4) (ash (logand state #x3F) 6) (logand byte #x3F)) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (got-2/4 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (got-3/4 (logior (ash state 8) byte) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (got-3/4 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (output (logior (ash (logand state #x70000) 2) (ash (logand state #x3F00) 4) (ash (logand state #x3F) 6) (logand byte #x3F)) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (enter state i j ...) (cond ((zero? state) (continue i j ...)) ((<= state #xF4) (got-1 state i j ...)) ((<= state #xEFBF) (got-2/3 state i j ...)) ((<= state #xF48F) (got-2/4 state i j ...)) (else (got-3/4 state i j ...)))) (enter state-expr start-expr init-expr ...))) ;; Returns three values: (new-state source-pos target-pos) (define (utf8->string! state source source-start source-end target target-start target-end) (utf8-decode ((j target-start)) (i continue) (output (code-point) (string-set! target j (integer->char code-point)) (if (< (+ j 1) target-end) (continue i (+ j 1)) (values 0 i (+ j 1)))) (error (maximal-subpart) (output #xFFFD i j)) ;TODO: support other error handlers state source source-start source-end)) ;; Another experimental primitive, slower than the ones above. (define* (utf8-fold* out err seed state bv #:optional (start 0) (end (bytevector-length bv))) (utf8-decode ((j seed)) (i continue) (output (code-point) (out code-point i j continue)) (error (maximal-subpart) (err maximal-subpart i j continue)) state bv start end)) ;; Another experimental primitive, slower than the ones above. (define* (utf8-fold out err seed state bv #:optional (start 0) (end (bytevector-length bv))) (utf8-fold* (lambda (code-point i j continue) (continue i (out code-point i j))) (lambda (maximal-subpart i j continue) (call-with-values (lambda () (err maximal-subpart i j)) (lambda (continue? j^) (if continue? (continue i j^) (values 0 i j^))))) seed state bv start end)) ;; A not-so-quick test of all valid characters. ;; TODO: Tests of strictness and error handling. #; (let () (define ss (string-tabulate (lambda (i) (if (< i #xD800) (integer->char i) (integer->char (+ i #x800)))) (- #x110000 #x800))) (define bv (string->utf8 ss)) (define bv-len (bytevector-length bv)) (define slen (* 2 (string-length ss))) (define s (make-string slen)) (every (lambda (incr) (string-fill! s #\a) (call-with-values (lambda () (let loop ((state 0) (i 0) (j 0)) (if (< i bv-len) (call-with-values (lambda () (utf8->string! state bv i (min bv-len (+ i incr)) s j slen)) loop) (values state i j)))) (lambda (state i j) (and (= i bv-len) (= j (string-length ss)) (string=? ss (substring s 0 j)))))) (iota 5 1)))
M
M
Mark H Weaver wrote on 27 Apr 2019 02:45
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35350@debbugs.gnu.org)
87bm0sgts0.fsf@netris.org
Here's an improved version of the code with doc strings. It alsoproperly handles the case of (target-source >= target-end) in'utf8->string!'.
Mark
;;; Copyright © 2019 Mark H Weaver <mhw@netris.org> ;;; ;;; 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 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 <http://www.gnu.org/licenses/>. (use-modules (rnrs bytevectors) ;; the following modules are only needed for the test. ;;(srfi srfi-1) ;;(ice-9 iconv) ) ;; Well-formed UTF-8 sequences ;; =========================== ;; 00..7F ;; C2..DF 80..BF ;; E0 *A0..BF 80..BF ;; E1..EC 80..BF 80..BF ;; ED 80..9F* 80..BF ;; EE..EF 80..BF 80..BF ;; F0 *90..BF 80..BF 80..BF ;; F1..F3 80..BF 80..BF 80..BF ;; F4 80..8F* 80..BF 80..BF ;; UTF-8 Decoder states ;; ==================== ;; 0 start state ;; C2 .. DF got 1/2 bytes ;; E0 .. EF got 1/3 bytes ;; F0 .. F4 got 1/4 bytes ;; E0A0 .. ED9F got 2/3 bytes (range 1) ;; EE80 .. EFBF got 2/3 bytes (range 2) ;; F090 .. F48F got 2/4 bytes ;; F09080 .. F48FBF got 3/4 bytes (define-syntax-rule (utf8-decode ((j init-expr) ...) (i continue) (output (code-point) e1 e1* ...) (error (maximal-subpart) e2 e2* ...) state-expr bv-expr start-expr end-expr) "Decode part of a UTF-8 byte stream in the bytevector BV-EXPR with indices in the interval from START-EXPR (inclusive) to END-EXPR (exclusive). STATE-EXPR is the initial decoder state, which must be an incomplete prefix of a valid UTF-8 byte sequence. The start state is 0. When a valid UTF-8 byte sequence is found, the output expressions (E1 E1* ...) are evaluated, with the following bindings available in the lexical environment: CODE-POINT the decoded code point, as an exact integer. I bytevector index immediately after the decoded sequence. J ... the user-provided seeds. CONTINUE procedure with arguments (i j ...) to continue decoding. OUTPUT procedure with arguments (code-point i j ...), whose body consists of (E1 E1* ...), provided by the user. ERROR procedure with arguments (maximal-subpart i j ...), whose body consists of (E2 E2* ...), provided by the user. If you wish for decoding to continue, (E1 E1* ...) should end by tail-calling (CONTINUE I J^ ...), where (J^ ...) are the new seeds. Alternatively, if you wish to terminate decoding early, simply return one or more values, which will be returned to the caller of 'utf8-decode'. Normally, (values 0 I J^ ...) should be returned. In case of a decoding error, the expressions (E2 E2* ...) will be called with the same bindings listed above, except CODE-POINT is omitted, and MAXIMAL-SUBPART is bound to the 'maximal subpart of an ill-formed subsequence' as defined in section 3.9 of The Unicode Standard 12.0, i.e. the longest code unit subsequence starting at an inconvertible offset that is either (a) the initial subsequence of a well-formed code unit sequence, or (b) a subsequence of length one. MAXIMAL-SUBPART is represented as an exact integer containing the bytes in big-endian order, e.g. #xF48FBF represents the bytes (F4 8F BF). The bindings OUTPUT and ERROR are provided for convenience, in case the error expressions (E2 E2* ...) wish to call the user-provided output procedure (e.g. to output a substitution character), or the output expressions (E1 E1* ...) wish to call the user-provided error procedure. If the provided bytes in BV-EXPR end with a non-empty but incomplete prefix of a well-formed UTF-8 byte sequence, then the following values are returned: (NEW-STATE BV-POS J ...). When decoding finishes, every byte in the input (including in the initial STATE-EXPR) will have been reported in exactly one of the following ways: (1) as part of a well-formed UTF-8 byte sequence, via the output expressions (E1 E1* ...), or (2) as part of a 'maximal subpart of an ill-formed subsequence', via the error expressions (E2 E2* ...), or (3) as part of the new state. (4) in the unexamined indices of BV-EXPR starting with BV-POS." (let ((bv bv-expr) (end end-expr)) (define (output code-point i j ...) e1 e1* ...) (define (error maximal-subpart i j ...) e2 e2* ...) (define (continue i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (cond ((<= byte #x7F) (output byte (+ i 1) j ...)) ((<= #xC2 byte #xF4) (got-1 byte (+ i 1) j ...)) (else (error byte (+ i 1) j ...)))) (values 0 i j ...))) (define (got-1 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (cond ((not (<= #x80 byte #xBF)) (error state i j ...)) ((<= state #xDF) (output (logior (ash (logand state #x1F) 6) (logand byte #x3F)) (+ i 1) j ...)) (else (let ((state^ (logior (ash state 8) byte))) (cond ((or (<= #xE0A0 state^ #xED9F) (<= #xEE80 state^ #xEFBF)) (got-2/3 state^ (+ i 1) j ...)) ((<= #xF090 state^ #xF48F) (got-2/4 state^ (+ i 1) j ...)) (else (error state i j ...))))))) (values state i j ...))) (define (got-2/3 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (output (logior (ash (logand state #xF00) 4) (ash (logand state #x3F) 6) (logand byte #x3F)) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (got-2/4 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (got-3/4 (logior (ash state 8) byte) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (got-3/4 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (output (logior (ash (logand state #x70000) 2) (ash (logand state #x3F00) 4) (ash (logand state #x3F) 6) (logand byte #x3F)) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (enter state i j ...) (cond ((zero? state) (continue i j ...)) ((<= state #xF4) (got-1 state i j ...)) ((<= state #xEFBF) (got-2/3 state i j ...)) ((<= state #xF48F) (got-2/4 state i j ...)) (else (got-3/4 state i j ...)))) (enter state-expr start-expr init-expr ...))) (define (utf8->string! state source source-start source-end target target-start target-end) "Decode part of a UTF-8 byte stream from the bytevector SOURCE starting at index SOURCE-START and up to (but not including) index SOURCE-END, and writing into the string TARGET starting at index TARGET-START and up to (but not including) index TARGET-END. Returns three values: NEW-STATE, SOURCE-POS, and TARGET-POS. STATE is either 0 (the start state) or the value of NEW-STATE returned by the previous call. In case of errors, each 'maximal subpart of an ill-formed subsequence', as defined in section 3.9 of The Unicode Standard 12.0, is replaced with a Unicode replacement character (U+FFFD)." (if (< target-start target-end) (utf8-decode ((j target-start)) (i continue) (output (code-point) (string-set! target j (integer->char code-point)) (if (< (+ j 1) target-end) (continue i (+ j 1)) (values 0 i (+ j 1)))) (error (maximal-subpart) (output #xFFFD i j)) ;TODO: support other error handlers state source source-start source-end) (values state source-start target-start))) ;; Another experimental primitive, slower than the ones above. (define* (utf8-fold* out err seed state bv #:optional (start 0) (end (bytevector-length bv))) "Decode part of a UTF-8 byte stream from the bytevector SOURCE starting at index SOURCE-START and up to (but not including) index SOURCE-END. Returns three values: NEW-STATE, SOURCE-POS, and FINAL-SEED. STATE is either 0 (the start state) or the value of NEW-STATE returned by the previous call. For each valid code point, call (OUT CODE-POINT SOURCE-POS SEED K), which should either call (K SOURCE-POS NEW-SEED) to continue decoding, or return three values (0 SOURCE-POS NEW-SEED) which will terminate decoding and immediately exit. In case of errors, call (ERR MAXIMAL-SUBPART SOURCE-POS SEED K) where MAXIMAL-SUBPART is a 'maximal subpart of an ill-formed subsequence', as defined in section 3.9 of The Unicode Standard 12.0. Similarly, ERR should either call (K SOURCE-POS NEW-SEED) to continue decoding, or return to exit immediately." (utf8-decode ((j seed)) (i continue) (output (code-point) (out code-point i j continue)) (error (maximal-subpart) (err maximal-subpart i j continue)) state bv start end)) ;; Another experimental primitive, slower than the ones above. (define* (utf8-fold out err seed state bv #:optional (start 0) (end (bytevector-length bv))) "Decode part of a UTF-8 byte stream from the bytevector SOURCE starting at index SOURCE-START and up to (but not including) index SOURCE-END. Returns three values: NEW-STATE, SOURCE-POS, and FINAL-SEED. STATE is either 0 (the start state) or the value of NEW-STATE returned by the previous call. For each valid code point, call (OUT CODE-POINT SOURCE-POS SEED), which should return a new SEED. In case of errors, call (ERR MAXIMAL-SUBPART SOURCE-POS SEED) where MAXIMAL-SUBPART is a 'maximal subpart of an ill-formed subsequence', as defined in section 3.9 of The Unicode Standard 12.0. ERR should return two values: a boolean specifying whether to continue decoding, and a new seed." (utf8-fold* (lambda (code-point i j continue) (continue i (out code-point i j))) (lambda (maximal-subpart i j continue) (call-with-values (lambda () (err maximal-subpart i j)) (lambda (continue? j^) (if continue? (continue i j^) (values 0 i j^))))) seed state bv start end)) ;; A not-so-quick test of all valid characters. ;; TODO: Tests of strictness and error handling. #; (let () (define ss (string-tabulate (lambda (i) (if (< i #xD800) (integer->char i) (integer->char (+ i #x800)))) (- #x110000 #x800))) (define bv (string->utf8 ss)) (define bv-len (bytevector-length bv)) (define slen (* 2 (string-length ss))) (define s (make-string slen)) (every (lambda (incr) (string-fill! s #\a) (call-with-values (lambda () (let loop ((state 0) (i 0) (j 0)) (if (< i bv-len) (call-with-values (lambda () (utf8->string! state bv i (min bv-len (+ i incr)) s j slen)) loop) (values state i j)))) (lambda (state i j) (and (zero? state) (= i bv-len) (= j (string-length ss)) (string=? ss (substring s 0 j)))))) (iota 5 1)))
M
M
Mark H Weaver wrote on 27 Apr 2019 09:56
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35350@debbugs.gnu.org)
877ebfhodh.fsf@netris.org
Here's version 3 with much more precise specifications in thedocstrings. If I recall correctly, the code itself is identical toversion 2.
Mark
;;; Copyright © 2019 Mark H Weaver <mhw@netris.org> ;;; ;;; 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 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 <http://www.gnu.org/licenses/>. (use-modules (rnrs bytevectors) ;; the following modules are needed only for the test. ;;(srfi srfi-1) ;;(ice-9 iconv) ) ;; Well-formed UTF-8 sequences ;; =========================== ;; 00..7F ;; C2..DF 80..BF ;; E0 *A0..BF 80..BF ;; E1..EC 80..BF 80..BF ;; ED 80..9F* 80..BF ;; EE..EF 80..BF 80..BF ;; F0 *90..BF 80..BF 80..BF ;; F1..F3 80..BF 80..BF 80..BF ;; F4 80..8F* 80..BF 80..BF ;; UTF-8 Decoder states ;; ==================== ;; 0 start state ;; C2 .. DF got 1/2 bytes ;; E0 .. EF got 1/3 bytes ;; F0 .. F4 got 1/4 bytes ;; E0A0 .. ED9F got 2/3 bytes (range 1) ;; EE80 .. EFBF got 2/3 bytes (range 2) ;; F090 .. F48F got 2/4 bytes ;; F09080 .. F48FBF got 3/4 bytes (define-syntax-rule (utf8-decode ((j init-expr) ...) (i continue) (output (code-point) e1 e1* ...) (error (maximal-subpart) e2 e2* ...) state-expr bv-expr start-expr end-expr) "Let BYTE-STR denote the concatenation of the following two byte strings: (1) the bytes encoded in STATE-EXPR, and (2) the bytevector BV-EXPR beginning with index START-EXPR (inclusive) and ending with index END-EXPR (exclusive). STATE-EXPR must evaluate to an exact integer between 0 and #xF48FBF that encodes a proper prefix of a well-formed UTF-8 sequence. The bytes are in big-endian order, e.g. #xF48FBF encodes (F4 8F BF) and 0 encodes the empty string. Let TAIL be the longest suffix of BYTE-STR that is a proper prefix of a well-formed UTF-8 byte sequence. Let ITEMS be a list of strings whose concatenation equals BYTE-STR with TAIL removed, such that each element in ITEMS is either (1) a well-formed UTF-8 byte sequence, or (2) a maximal subpart of an ill-formed subsequence, as defined in section 3.9 of The Unicode Standard 12.0, i.e. the longest code unit subsequence starting at an inconvertible offset that is either (a) the initial subsequence of a well-formed code unit sequence, or (b) a subsequence of length one. UTF8-DECODE iterates over ITEMS from left to right, evaluating the 'output' expressions (E1 E1* ...) for each well-formed UTF-8 byte sequence, and the 'error' expressions (E2 E2* ...) for each maximal subpart of an ill-formed subsequence. As with a 'fold' operation, zero or more seeds are included in the iterator state, bound to variables (J ...) with initial values (INIT-EXPR ...). Each of the user-provided expression sequences (E1 E1* ...) and (E2 E2* ...) have access to the current seed values (J ...), and produce new seed values each time they are called. The user-provided expression sequences have access to the following variables, whose identifiers are specified by operands to UTF8-DECODE: (1) I, the bytevector index immediately following the current item, i.e. where decoding should resume after processing this item. (2) (J ...) the user-provided seed values. (3) CODE-POINT [only bound in (E1 E1* ...)], an exact integer Unicode scalar value. (4) MAXIMAL-SUBPART [only bound in (E2 E2* ...)], the maximal subpart of the ill-formed subsequence, represented as an exact integer from #xC2 to #xF48FBF containing the bytes in big-endian order. For example, #xF48FBF represents the byte string (F4 8F BF). (5) CONTINUE, a procedure which may be applied to arguments (I J^ ...) by the user-provided expression sequences to continue decoding with the new seed values (J^ ...). (6) OUTPUT, a procedure which may be applied to arguments (CODE-POINT I J^ ...) to evaluate the user-provided expression sequence (E1 E1* ...). (7) ERROR, a procedure which may be applied to arguments (MAXIMAL-SUBPART I J^ ...) to evaluate the user-provided expression sequence (E2 E2* ...). Each user-provided expression sequence may choose either to continue the loop by calling (CONTINUE I J^ ...), or to terminate the loop by returning (values 0 I J^ ...), where (J^ ...) are the new seed values. OUTPUT and ERROR are included for convenience, to allow the output and error expression sequences to call each other. For example, it may be convenient for the error expression sequence to end with: (output #xFFFD i j ...) If the end of BYTE-STR is reached, UTF8-DECODE returns the values (NEW-STATE END J^ ...), where NEW-STATE encodes the bytes in TAIL, END equals END-EXPR, and (J^ ...) are the final seed values. In any case, if the user-provided expressions behave as specified above, then when UTF8-DECODE returns values (NEW-STATE NEW-POS J^ ...), every byte in BYTE-STR will have been reported in exactly one of the following ways: (1) as part of a well-formed UTF-8 byte sequence, reported to the user-provided output expressions (E1 E1* ...), or (2) as part of a maximal subpart of an ill-formed subsequence, reported to the user-provided error expressions (E2 E2* ...), or (3) as part of NEW-STATE, or (4) as part of the bytevector starting at index NEW-POS." (let ((bv bv-expr) (end end-expr)) (define (output code-point i j ...) e1 e1* ...) (define (error maximal-subpart i j ...) e2 e2* ...) (define (continue i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (cond ((<= byte #x7F) (output byte (+ i 1) j ...)) ((<= #xC2 byte #xF4) (got-1 byte (+ i 1) j ...)) (else (error byte (+ i 1) j ...)))) (values 0 i j ...))) (define (got-1 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (cond ((not (<= #x80 byte #xBF)) (error state i j ...)) ((<= state #xDF) (output (logior (ash (logand state #x1F) 6) (logand byte #x3F)) (+ i 1) j ...)) (else (let ((state^ (logior (ash state 8) byte))) (cond ((or (<= #xE0A0 state^ #xED9F) (<= #xEE80 state^ #xEFBF)) (got-2/3 state^ (+ i 1) j ...)) ((<= #xF090 state^ #xF48F) (got-2/4 state^ (+ i 1) j ...)) (else (error state i j ...))))))) (values state i j ...))) (define (got-2/3 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (output (logior (ash (logand state #xF00) 4) (ash (logand state #x3F) 6) (logand byte #x3F)) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (got-2/4 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (got-3/4 (logior (ash state 8) byte) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (got-3/4 state i j ...) (if (< i end) (let ((byte (bytevector-u8-ref bv i))) (if (<= #x80 byte #xBF) (output (logior (ash (logand state #x70000) 2) (ash (logand state #x3F00) 4) (ash (logand state #x3F) 6) (logand byte #x3F)) (+ i 1) j ...) (error state i j ...))) (values state i j ...))) (define (enter state i j ...) (cond ((zero? state) (continue i j ...)) ((<= state #xF4) (got-1 state i j ...)) ((<= state #xEFBF) (got-2/3 state i j ...)) ((<= state #xF48F) (got-2/4 state i j ...)) (else (got-3/4 state i j ...)))) (enter state-expr start-expr init-expr ...))) (define (utf8->string! state source source-start source-end target target-start target-end) "Let BYTE-STR denote the concatenation of the following two byte strings: (1) the bytes encoded in STATE, and (2) the bytevector SOURCE beginning with index SOURCE-START (inclusive) and ending with index SOURCE-END (exclusive). STATE must be an exact integer between 0 and #xF48FBF that encodes a proper prefix of a well-formed UTF-8 sequence. The bytes are in big-endian order, e.g. #xF48FBF encodes (F4 8F BF), and 0 encodes the empty string. Let TAIL be the longest suffix of BYTE-STR that is a proper prefix of a well-formed UTF-8 byte sequence, and let BYTE-STR-SANS-TAIL be BYTE-STR with TAIL removed. UTF8->STRING! permissively decodes the Unicode 8-bit string BYTE-STR-SANS-TAIL and writes the resulting characters to the string TARGET beginning with index TARGET-START (inclusive) and ending with index TARGET-END (exclusive). In case of decoding errors, each 'maximal subpart of an ill-formed subsequence', as defined in section 3.9 of The Unicode Standard 12.0, is replaced with a Unicode replacement character (U+FFFD). UTF8->STRING! returns three values (NEW-STATE SOURCE-POS TARGET-POS). If the target string is able to hold all of the decoded characters and replacement characters, then NEW-STATE encodes the bytes in TAIL, SOURCE-POS equals SOURCE-END, and TARGET-POS equals TARGET-START plus the number of characters written. If there's not enough space in the target string, then NEW-STATE is 0, SOURCE-POS is the index of the first byte that is not represented by the characters written, and TARGET-POS equals TARGET-END." (if (< target-start target-end) (utf8-decode ((j target-start)) (i continue) (output (code-point) (string-set! target j (integer->char code-point)) (if (< (+ j 1) target-end) (continue i (+ j 1)) (values 0 i (+ j 1)))) (error (maximal-subpart) (output #xFFFD i j)) ;TODO: support other error handlers state source source-start source-end) (values state source-start target-start))) ;; Another experimental primitive, slower than the ones above. (define* (utf8-fold* out err seed state bv #:optional (start 0) (end (bytevector-length bv))) "Let BYTE-STR denote the concatenation of the following two byte strings: (1) the bytes encoded in STATE, and (2) the bytevector BV beginning with index START (inclusive) and ending with index END (exclusive). STATE must be an exact integer between 0 and #xF48FBF that encodes a proper prefix of a well-formed UTF-8 sequence. The bytes are in big-endian order, e.g. #xF48FBF encodes (F4 8F BF), and 0 encodes the empty string. Let TAIL be the longest suffix of BYTE-STR that is a proper prefix of a well-formed UTF-8 byte sequence. Let ITEMS be a list of strings whose concatenation equals BYTE-STR with TAIL removed, such that each element in ITEMS is either (1) a well-formed UTF-8 byte sequence, or (2) a maximal subpart of an ill-formed subsequence, as defined in section 3.9 of The Unicode Standard 12.0, i.e. the longest code unit subsequence starting at an inconvertible offset that is either (a) the initial subsequence of a well-formed code unit sequence, or (b) a subsequence of length one. UTF8-FOLD* iterates over ITEMS from left to right, calling OUT for each well-formed UTF-8 byte sequence, and ERR for each maximal subpart of an ill-formed subsequence. For each well-formed UTF-8 byte sequence, (OUT CODE-POINT INDEX SEED K) is called, where CODE-POINT is the Unicode scalar value as an exact integer, INDEX is the bytevector index immediately following the decoded code point, SEED is the current seed value, and K is the continuation. OUT may choose to either continue decoding or to exit the loop. To continue decoding, call (K INDEX NEW-SEED). To exit, return (values 0 INDEX FINAL-SEED). For each maximal subpart of an ill-formed UTF-8 byte sequence, (ERR MAXIMAL-SUBPART INDEX SEED K) is called, where MAXIMAL-SUBPART is an exact integer between #xC2 and #xF48FBF containing the bytes in big-endian order, and INDEX is the bytevector index immediately following those bytes. For example, #xF48FBF represents the byte string (F4 8F BF). Like OUT, ERR may either call (K INDEX NEW-SEED) to continue, or return (values 0 INDEX FINAL-SEED) to exit the loop. If the end of BYTE-STR is reached, UTF8-FOLD* returns the values (NEW-STATE END FINAL-SEED), where NEW-STATE encodes the bytes in TAIL. In any case, if the user-provided procedures behave as specified above, then when UTF8-FOLD* returns values (NEW-STATE NEW-POS FINAL-SEED), every byte in BYTE-STR will have been reported in exactly one of the following ways: (1) as part of a well-formed UTF-8 byte sequence, reported to OUT, (2) as part of a maximal subpart of an ill-formed subsequence, reported to ERR, (3) as part of NEW-STATE, or (4) as part of the bytevector starting at index NEW-POS." (utf8-decode ((j seed)) (i continue) (output (code-point) (out code-point i j continue)) (error (maximal-subpart) (err maximal-subpart i j continue)) state bv start end)) ;; Another experimental primitive, slower than the ones above. (define* (utf8-fold out err seed state bv #:optional (start 0) (end (bytevector-length bv))) "Let BYTE-STR denote the concatenation of the following two byte strings: (1) the bytes encoded in STATE, and (2) the bytevector BV beginning with index START (inclusive) and ending with index END (exclusive). STATE must be an exact integer between 0 and #xF48FBF that encodes a proper prefix of a well-formed UTF-8 sequence. The bytes are in big-endian order, e.g. #xF48FBF encodes (F4 8F BF), and 0 encodes the empty string. Let TAIL be the longest suffix of BYTE-STR that is a proper prefix of a well-formed UTF-8 byte sequence. Let ITEMS be a list of strings whose concatenation equals BYTE-STR with TAIL removed, such that each element in ITEMS is either (1) a well-formed UTF-8 byte sequence, or (2) a maximal subpart of an ill-formed subsequence, as defined in section 3.9 of The Unicode Standard 12.0, i.e. the longest code unit subsequence starting at an inconvertible offset that is either (a) the initial subsequence of a well-formed code unit sequence, or (b) a subsequence of length one. UTF8-FOLD iterates over ITEMS from left to right, calling OUT for each well-formed UTF-8 byte sequence, and ERR for each maximal subpart of an ill-formed subsequence. For each well-formed UTF-8 byte sequence, (OUT CODE-POINT INDEX SEED) is called, where CODE-POINT is the Unicode scalar value as an exact integer, INDEX is the bytevector index immediately following the decoded code point, and SEED is the current seed value. OUT should return the new seed value. For each maximal subpart of an ill-formed UTF-8 byte sequence, (ERR MAXIMAL-SUBPART INDEX SEED) is called, where MAXIMAL-SUBPART is an exact integer between #xC2 and #xF48FBF containing the bytes in big-endian order, and INDEX is the bytevector index immediately following those bytes. For example, #xF48FBF represents the byte string (F4 8F BF). ERR should return two values: (CONTINUE? NEW-SEED), where CONTINUE? is a boolean specifying whether to continue the loop. If the end of BYTE-STR is reached, UTF8-FOLD returns the values (NEW-STATE END FINAL-SEED), where NEW-STATE encodes the bytes in TAIL. In any case, if the user-provided procedures behave as specified above, then when UTF8-FOLD returns values (NEW-STATE NEW-POS FINAL-SEED), every byte in BYTE-STR will have been reported in exactly one of the following ways: (1) as part of a well-formed UTF-8 byte sequence, reported to OUT, (2) as part of a maximal subpart of an ill-formed subsequence, reported to ERR, (3) as part of NEW-STATE, or (4) as part of the bytevector starting at index NEW-POS." (utf8-fold* (lambda (code-point i j continue) (continue i (out code-point i j))) (lambda (maximal-subpart i j continue) (call-with-values (lambda () (err maximal-subpart i j)) (lambda (continue? j^) (if continue? (continue i j^) (values 0 i j^))))) seed state bv start end)) ;; A not-so-quick test of all valid characters. ;; TODO: Tests of strictness and error handling. #; (let () (define ss (string-tabulate (lambda (i) (if (< i #xD800) (integer->char i) (integer->char (+ i #x800)))) (- #x110000 #x800))) (define bv (string->utf8 ss)) (define bv-len (bytevector-length bv)) (define slen (* 2 (string-length ss))) (define s (make-string slen)) (every (lambda (incr) (string-fill! s #\a) (call-with-values (lambda () (let loop ((state 0) (i 0) (j 0)) (if (< i bv-len) (call-with-values (lambda () (utf8->string! state bv i (min bv-len (+ i incr)) s j slen)) loop) (values state i j)))) (lambda (state i j) (and (zero? state) (= i bv-len) (= j (string-length ss)) (string=? ss (substring s 0 j)))))) (iota 5 1)))
L
L
Ludovic Courtès wrote on 27 Apr 2019 18:36
(name . Mark H Weaver)(address . mhw@netris.org)(address . 35350@debbugs.gnu.org)
874l6jh0bx.fsf@gnu.org
Hi Mark,
Mark H Weaver <mhw@netris.org> skribis:
Toggle quote (14 lines)> Ludovic Courtès <ludo@gnu.org> writes:>>> The third read(2) call here ends on a partial UTF-8 sequence for LEFT>> SINGLE QUOTATION MARK (we get the first two bytes of a three byte>> sequence.)>>>> What happens is that ‘process-stderr’ in (guix store) gets that byte>> string from the daemon, passes it through ‘read-maybe-utf8-string’,>> which replaces the last two bytes with REPLACEMENT CHARACTER, which is>> itself a 3-byte sequence.>> It seems to me that what's needed here is to save the UTF-8 decoder> state between calls to 'process-stderr'.
So there are two things. To fix the issue you reported (build outputthat goes through), I think we must simply turn off UTF-8 decoding from‘process-stderr’ and leave that entirely to ‘build-event-output-port’.
However, ‘build-event-output-port’ would still fail to properly decodesplit UTF-8 sequences, and for that we’d need to preserve decoder stateas you describe.
Toggle quote (23 lines)> Coincidentally, I also needed something like this a week ago, when I> tried implementing R6RS custom textual input/output ports on top of> R6RS custom binary input/output ports.>> To meet these needs, I've implemented a fairly efficient, purely> functional UTF-8 decoder in Scheme that accepts a decoder state and an> arbitrary range from a bytevector, and returns a new decoder state.> There's a macro that allows arbitrary actions to be performed when a> code point (or maximal subpart in the case of errors) is found.>> This macro is then used to implement a decoder (utf8->string!) that> writes into an arbitrary range of an existing string. Of course, it's> not purely functional, but it avoids heap allocation when compiled with> Guile. On my Thinkpad X200, it can process around 10 megabytes per> second.>> The state is represented as an exact integer between 0 and #xF48FBF> inclusive, which are simply the bytes that have been seen so far in the> current code sequence, in big-endian order, or 0 for the start state.> For example, #xF48FBF represents the state where the bytes (F4 8F BF)> have been read. The state is always either 0 or a proper prefix of a> valid UTF-8 byte sequence.
Awesome! I think that’s something we should definitely add to Guileproper. We can use it in Guix before or after it’s included in Guile.
Thank you!
Ludo’.
M
M
Mark H Weaver wrote on 30 Apr 2019 22:26
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35350@debbugs.gnu.org)
87imuvme7g.fsf@netris.org
Hi Ludovic,
Ludovic Courtès <ludo@gnu.org> writes:
Toggle quote (20 lines)> Mark H Weaver <mhw@netris.org> skribis:>>> Ludovic Courtès <ludo@gnu.org> writes:>>>>> The third read(2) call here ends on a partial UTF-8 sequence for LEFT>>> SINGLE QUOTATION MARK (we get the first two bytes of a three byte>>> sequence.)>>>>>> What happens is that ‘process-stderr’ in (guix store) gets that byte>>> string from the daemon, passes it through ‘read-maybe-utf8-string’,>>> which replaces the last two bytes with REPLACEMENT CHARACTER, which is>>> itself a 3-byte sequence.>>>> It seems to me that what's needed here is to save the UTF-8 decoder>> state between calls to 'process-stderr'.>> So there are two things. To fix the issue you reported (build output> that goes through), I think we must simply turn off UTF-8 decoding from> ‘process-stderr’ and leave that entirely to ‘build-event-output-port’.
Can we assume that UTF-8 is the appropriate encoding for(current-build-output-port)? My interpretation of the Guix manual entryfor 'current-build-output-port' suggests that the answer should be "no".
Also, in your previous message you wrote:
The problem is the first layer of UTF-8 decoding that happens in ‘process-stderr’, in the ‘%stderr-next’ case. We would need to disable it, but only if the build output port is ‘build-event-output-port’ (i.e., it’s capable of interpreting “multiplexed build output” correctly.)
It sounds like you're suggesting that 'process-stderr' should look tosee if (current-build-output-port) is a 'build-event-output-port', andin that case it should use binary I/O primitives to write raw binarydata to it, otherwise it should use text I/O primitives and writecharacters to it. Do I understand correctly?
IMO, it would be cleaner to treat 'build-event-output-port' uniformly,and specifically as a textual port of unknown encoding.
What do you think?
Toggle quote (4 lines)> However, ‘build-event-output-port’ would still fail to properly decode> split UTF-8 sequences, and for that we’d need to preserve decoder> state as you describe.
I would suggest changing 'build-event-output-port' to create an R6RScustom *textual* output port, so that it wouldn't have to worry aboutencodings at all, and it would only be given whole characters.Internally, it would be doing exactly what you suggest above, but thosedetails would be encapsulated within the custom textual port.
However, I don't think we can use Guile's current implementation of R6RScustom textual output ports, which are currently built on Guile's legacysoft ports, which I suspect have a similar bug with multibyte characterssometimes being split (see 'soft_port_write' in vports.c).
Having said all of this, my suggestions would ultimately entail havingtwo separate places along the stderr pipeline where 'utf8->string!'would be used, and maybe that's too much until we have a more optimizedC implementation of it.
Thoughts?
Mark
L
L
Ludovic Courtès wrote on 4 May 2019 11:33
(name . Mark H Weaver)(address . mhw@netris.org)(address . 35350@debbugs.gnu.org)
87r29e5zsw.fsf@gnu.org
Hi Mark,
Mark H Weaver <mhw@netris.org> skribis:
Toggle quote (2 lines)> Ludovic Courtès <ludo@gnu.org> writes:
[...]
Toggle quote (8 lines)>> So there are two things. To fix the issue you reported (build output>> that goes through), I think we must simply turn off UTF-8 decoding from>> ‘process-stderr’ and leave that entirely to ‘build-event-output-port’.>> Can we assume that UTF-8 is the appropriate encoding for> (current-build-output-port)? My interpretation of the Guix manual entry> for 'current-build-output-port' suggests that the answer should be "no".
What goes to ‘current-build-output-port’ comes from builds processes.It’s usually UTF-8 but it can be anything, including binary garbage,which should be gracefully handled.
That’s why ‘process-stderr’ currently uses ‘read-maybe-utf8-string’.
Toggle quote (14 lines)> Also, in your previous message you wrote:>> The problem is the first layer of UTF-8 decoding that happens in> ‘process-stderr’, in the ‘%stderr-next’ case. We would need to> disable it, but only if the build output port is> ‘build-event-output-port’ (i.e., it’s capable of interpreting> “multiplexed build output” correctly.)>> It sounds like you're suggesting that 'process-stderr' should look to> see if (current-build-output-port) is a 'build-event-output-port', and> in that case it should use binary I/O primitives to write raw binary> data to it, otherwise it should use text I/O primitives and write> characters to it. Do I understand correctly?
Yes. (Actually, rather than guessing if (current-build-output-port) isa ‘build-event-output-port’, there could be a fluid to ask for the useof raw binary primitives.)
Toggle quote (3 lines)> IMO, it would be cleaner to treat 'build-event-output-port' uniformly,> and specifically as a textual port of unknown encoding.
(You mean ‘current-build-output-port’, right?)
I think you’re right. I’m not yet entirely sure what the implicationsare. There’s a couple of tests in tests/store.scm for UTF-8interpretation that describe behavior that I think we should preserve.
Toggle quote (16 lines)> I would suggest changing 'build-event-output-port' to create an R6RS> custom *textual* output port, so that it wouldn't have to worry about> encodings at all, and it would only be given whole characters.> Internally, it would be doing exactly what you suggest above, but those> details would be encapsulated within the custom textual port.>> However, I don't think we can use Guile's current implementation of R6RS> custom textual output ports, which are currently built on Guile's legacy> soft ports, which I suspect have a similar bug with multibyte characters> sometimes being split (see 'soft_port_write' in vports.c).>> Having said all of this, my suggestions would ultimately entail having> two separate places along the stderr pipeline where 'utf8->string!'> would be used, and maybe that's too much until we have a more optimized> C implementation of it.
Yeah it looks like we don’t yet have custom textual output ports that wecould rely on, do we?
I support your work to add that in Guile proper!
Thanks,Ludo’.
M
M
Mark H Weaver wrote on 4 May 2019 20:53
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 35350@debbugs.gnu.org)
87tveauk2u.fsf@netris.org
Hi Ludovic,
Ludovic Courtès <ludo@gnu.org> writes:
Toggle quote (20 lines)> Mark H Weaver <mhw@netris.org> skribis:>>> Ludovic Courtès <ludo@gnu.org> writes:>> [...]>>>> So there are two things. To fix the issue you reported (build output>>> that goes through), I think we must simply turn off UTF-8 decoding from>>> ‘process-stderr’ and leave that entirely to ‘build-event-output-port’.>>>> Can we assume that UTF-8 is the appropriate encoding for>> (current-build-output-port)? My interpretation of the Guix manual entry>> for 'current-build-output-port' suggests that the answer should be "no".>> What goes to ‘current-build-output-port’ comes from builds processes.> It’s usually UTF-8 but it can be anything, including binary garbage,> which should be gracefully handled.>> That’s why ‘process-stderr’ currently uses ‘read-maybe-utf8-string’.
I agree that we should (permissively) interpret the build process outputas UTF-8, regardless of locale settings. However, the encoding of'current-build-output-port' is orthogonal, and I see no reason to assumethat it's UTF-8.
As 'process-stderr' is currently implemented, it makes no assumptionsabout the encoding of 'current-build-output-port'. That's because ituses only textual I/O on it. The end result is that the UTF-8 buildoutput is effectively converted into the port encoding of'current-build-output-port', whatever it might be. I think that's howit should be, no?
Toggle quote (23 lines)>> Also, in your previous message you wrote:>>>> The problem is the first layer of UTF-8 decoding that happens in>> ‘process-stderr’, in the ‘%stderr-next’ case. We would need to>> disable it, but only if the build output port is>> ‘build-event-output-port’ (i.e., it’s capable of interpreting>> “multiplexed build output” correctly.)>>>> It sounds like you're suggesting that 'process-stderr' should look to>> see if (current-build-output-port) is a 'build-event-output-port', and>> in that case it should use binary I/O primitives to write raw binary>> data to it, otherwise it should use text I/O primitives and write>> characters to it. Do I understand correctly?>> Yes. (Actually, rather than guessing if (current-build-output-port) is> a ‘build-event-output-port’, there could be a fluid to ask for the use> of raw binary primitives.)>>> IMO, it would be cleaner to treat 'build-event-output-port' uniformly,>> and specifically as a textual port of unknown encoding.>> (You mean ‘current-build-output-port’, right?)
Yes, indeed.
Toggle quote (4 lines)> I think you’re right. I’m not yet entirely sure what the implications> are. There’s a couple of tests in tests/store.scm for UTF-8> interpretation that describe behavior that I think we should preserve.
I certainly agree that we should preserve those tests. I would gofurther and add two more tests that bind 'current-build-output-port' toa port with a non-UTF-8 encoding (e.g. UTF-16) and verify that the λgets converted correctly. The test build process would output the λ asUTF-8, but it should be written to 'current-build-output-port' ase.g. UTF-16.
What do you think?
Toggle quote (21 lines)>> I would suggest changing 'build-event-output-port' to create an R6RS>> custom *textual* output port, so that it wouldn't have to worry about>> encodings at all, and it would only be given whole characters.>> Internally, it would be doing exactly what you suggest above, but those>> details would be encapsulated within the custom textual port.>>>> However, I don't think we can use Guile's current implementation of R6RS>> custom textual output ports, which are currently built on Guile's legacy>> soft ports, which I suspect have a similar bug with multibyte characters>> sometimes being split (see 'soft_port_write' in vports.c).>>>> Having said all of this, my suggestions would ultimately entail having>> two separate places along the stderr pipeline where 'utf8->string!'>> would be used, and maybe that's too much until we have a more optimized>> C implementation of it.>> Yeah it looks like we don’t yet have custom textual output ports that we> could rely on, do we?>> I support your work to add that in Guile proper!
For now, I can offer a new implementation of custom textual output portsbuilt upon custom binary ports and the 'utf8->string!' that I previouslysent. See attached.
Thanks, Mark

Toggle snippet (32 lines)GNU Guile 2.2.4Copyright (C) 1995-2017 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.This program is free software, and you are welcome to redistribute itunder certain conditions; type `,show c' for details.
Enter `,help' for help.scheme@(guile-user)> (load "utf8-decoder.scm")scheme@(guile-user)> (load "guile-new-custom-textual-ports.scm")scheme@(guile-user)> (define (my-write! str start count) (pk 'my-write! (substring str start (+ start count))) count)scheme@(guile-user)> (define port (make-custom-textual-output-port "test1" my-write! #f #f #f))scheme@(guile-user)> (display "Hello λ world!" port)scheme@(guile-user)> (force-output port)
;;; (my-write! "Hello λ world!")scheme@(guile-user)> (string->utf8 "λ")$2 = #vu8(206 187)scheme@(guile-user)> (string->utf8 "Hello λ world!")$3 = #vu8(72 101 108 108 111 32 206 187 32 119 111 114 108 100 33)scheme@(guile-user)> (put-bytevector port #vu8(72 101 108 108 111 32 206))scheme@(guile-user)> (force-output port)
;;; (my-write! "Hello ")scheme@(guile-user)> (put-bytevector port #vu8(187 32 119 111 114 108 100 33))scheme@(guile-user)> (force-output port)
;;; (my-write! "λ world!")scheme@(guile-user)>
;;; Copyright © 2019 Mark H Weaver <mhw@netris.org> ;;; ;;; 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 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 <http://www.gnu.org/licenses/>. (use-modules (rnrs io ports)) (define (make-custom-textual-output-port id write! get-position set-position! close) (let (;; Allocate a per-port string buffer which will be used as a ;; temporary buffer for decoding, to avoid heap allocation ;; during normal operation. (buffer (make-string 4096)) ;; 'state' is the UTF-8 decoder state, which represents a ;; proper prefix of a well-formed UTF-8 byte sequence. These ;; are bytes that 'binary-write!' has accepted and reported as ;; having been written, although we are not able to decode ;; them into a character to pass to (textual) 'write!' until ;; more bytes arrive. (state 0)) (define (binary-write! bv start count) (call-with-values (lambda () ;; XXX FIXME: Consider performing this ;; decoding strictly. (utf8->string! state bv start (+ start count) buffer 0 (string-length buffer))) (lambda (new-state bv-pos char-count) (let* (;; Avoid calling write! with (char-count = 0) unless ;; (count = 0) was passed to us, because calling ;; 'write!' with count=0 has a special meaning: it ;; means to pass an EOF object to the byte/character ;; sink. (chars-accepted (if (and (zero? char-count) (not (zero? count))) 0 (write! buffer 0 char-count))) ;; Compute 'bytes-accepted' in such a way that the ;; bytes from STATE are not included, because they ;; were passed to us in previous calls, and are not ;; part of the bytevector range that we are now being ;; asked to write. However, it's important to note ;; that if 'write!' did not accept the bytes from ;; STATE, 'bytes-accepted' will be negative. We must ;; handle that case specially below. (bytes-accepted (- count (string-utf8-length (substring buffer chars-accepted char-count))))) ;; If 'bytes-accepted' is negative, that means the bytes ;; from STATE were not written. This can only happen if ;; 'chars-accepted' is 0, because 'write!' can only accept ;; whole code points, and the bytes from STATE are part of ;; at most a single code point. In this case, we must ;; leave STATE unchanged and return 0. (if (negative? bytes-accepted) 0 (begin (set! state new-state) bytes-accepted)))))) (define (binary-close) (set! buffer #f) (when close (close))) (define port (make-custom-binary-output-port id binary-write! get-position set-position! binary-close)) ;; Always use UTF-8 as the encoding for custom textual ports, as ;; an internal implementation detail, to ensure that all Unicode ;; characters will pass through regardless of the current locale. (set-port-encoding! port "UTF-8") port))
L
L
Ludovic Courtès wrote on 9 Nov 2019 18:17
control message for bug #35350
(address . control@debbugs.gnu.org)
874kzdarzx.fsf@gnu.org
severity 35350 importantquit
?