Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3Hlr-0014xN-3C for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 18:07:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3Hlq-001i1J-1J for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 18:06:58 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3Hlq-001i18-08 for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 18:06:58 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3Hln-000000002wz-338p for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 18:06:58 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b93698bb57aso240247566b.0 for ; Thu, 19 Mar 2026 11:06:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773943615; cv=none; d=google.com; s=arc-20240605; b=Bw46x8vG3ICrkMyt7sZR6XDUOxnnLvn1Xg7xANCQeSiMVzd5uIyUdxplmph3eVHxZJ n+oClllNSAGAukdTBAFNCwf6I6mLFnpsKA6yqzwiZerSc5z3NGqhyffdDWRLMldeV+Cf 6G3JDeA5BF+FcSGvBMKebh94+8prxPisMLGtgP0Lny6zbA+g/RqAARbCaarcRweZUiO+ IQi+zMeJL8xVVkfLyjkBx8Lu3hQjVtEKw2Fe/1egxWZErD1XF/Wz3zbDDF4XLnV4wXU0 89JBIfRgB80cGnYMXBYAYdOQ8TadU4ZWwVh+89heHnlpb7YL1mferOMeb4cXnkKgDLyf LjAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=1Zi5DWztYVvfJ+MpQ5QrhNB5F0WeLxPZ8D+3+cXNRdE=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=aFntOPsVYBsClQ10caVEciYGgeu5nJVfsq+KIuL8ZGsWkutLxboA1F2T7W9yqsK2a2 r7AImxLT+I6Ni1ljAiE3adXFiu1mf6OKFJ1bPT+yTWTBy3HF2a/nIGNJ3ENkSKuEKn6T jqTicIS1cdx8u2Scdvi56jWN6W9ngsYt2pSiL4dpDSZ5CMz+qCsHyFXTUqCY7Mel9a4T 3HVD4/8mkukrbWHinkRFYEYAtK4hpQCuBS+9ZCLx3oCS6F3wOsXnYrxkYAW1oP89KSJM qB0QFZjlyRCZt2cohrJ4bnxIuRGN611bF311yxV5kRlemig5VBNNKzU0Z/39/COVm5E2 RI1A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773943615; x=1774548415; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=1Zi5DWztYVvfJ+MpQ5QrhNB5F0WeLxPZ8D+3+cXNRdE=; b=Je9iEVsuJlWNmLBJNqBn+tv2+0tsTKUy6/0rs8NCvJKHUOqj87LD5LChNWE/16xaf6 pOvhWcWDNtYw4bRKO3lCpULQCfuyvY3c7A85gct0o06kWGxPaXp3Uif2HOc3iWIbGquJ h2Bfs01cv62IuDN0/3ST3p2oKwTKSL15+l2vrVf/iRR+plrSPvn1EiywSR0GLOWDCtkm +kG1AxaXKgW5gAtq8Ht8ZcnpXCppXbotNMVNdZdJXLuyGwKwcMXcKSnTu6hZqGKt7z1V Xc3qXX7cnUnyZFqmtBRLXRG37h77Uyz8Q2josE5T1Jdhn+NWIhWVJKGUhIGTRpELjbEP ZHBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773943615; x=1774548415; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=1Zi5DWztYVvfJ+MpQ5QrhNB5F0WeLxPZ8D+3+cXNRdE=; b=pFoVc0lJYYGouiASh+WeSj71OUKtaoDqCq2nwSmUqWJrKy7qLBKOl4DQcSEf6jjOFr sDHYZxjKPWTBmg+DqoP6Egwlca5hht1EZ0bu2IS2e/29gfcPIXW979h4dJ/7SOmDRAYn O0qzrcD8VdbdxS8jHaENDXCPL5eiypparx+onxHPgN11fXHoNtzvSns4yz94ZFe+CdOV U6ItXNRxbkDMHQ1WMiNL0EnjRaLnqZ1qzgE2xtopr+ojb28dndRfSikl8TYpHu5zspfm jfeW8Wp0lJcOuJuTAGUrtwE2ObnxER2vZVnV9ILE2qh3viyhgJRWbYp8f+duflc8pJmz th6A== X-Gm-Message-State: AOJu0YzWzGDjnig3tsbC80uCfhf6pLy5ersChy5G39sUUr8n7HG5sIFT 5q2CGKE4oniHpiz6eLSO5JXUcsrkaI08Jb8m1JZx/oLLjm5o2FbXeDdPdWhjpXWkjQ7UWGKXbS6 NXPxCMwrlQnQo8/+1enjVR+rQedU7BNsqhHJrUfc= X-Gm-Gg: ATEYQzyqTZbii1a94HevK/+0CO89dete7RupkHjiPQoP3699898jDVqLaY+yiJwVhUz ft5Zqz3BCIhykQlB4mYxrnYfw31fwYE3DSwK6MV2KBaWPlC7jNQ1wLCut2FrYSFubPhf4EQglmJ 8HJAmDsok7hilNApGg8z5hE4dsxFQP9NBGze8jjxoZaxr71wwR89qi7uWhaA44NPITxh3GEUSV1 0W7jIpNQHegq8+T1twkHD0Rqy6oscodoeSaHvvMCc+phYvxs6dxIrrIizkD+9v1mSSjwNShkwEU Qjpd8xVVVtBIki55n/LOnqNs4t5/DVbrPuSlr7Av X-Received: by 2002:a17:906:f2d4:b0:b8f:c684:db37 with SMTP id a640c23a62f3a-b982f39b0a4mr17246566b.9.1773943614892; Thu, 19 Mar 2026 11:06:54 -0700 (PDT) MIME-Version: 1.0 From: Jianghua Yang Date: Thu, 19 Mar 2026 11:06:17 -0700 X-Gm-Features: AaiRm53UASMJR-IIk1u4P6PA8UPoTfnEgbWbCc_RE1sBFUCfgJq-Btr9X_6EKcE Message-ID: Subject: [PATCH] Fix build failure on macOS 26.2 SDK due to missing nl_langinfo_l declaration To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000004ac89064d646f37" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000004ac89064d646f37 Content-Type: multipart/alternative; boundary="00000000000004ac87064d646f35" --00000000000004ac87064d646f35 Content-Type: text/plain; charset="UTF-8" Hi, Building PostgreSQL against the macOS 26.2 SDK (Xcode 26 beta) fails with the following error: src/port/chklocale.c:326:8: error: call to undeclared function 'nl_langinfo_l'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] sys = nl_langinfo_l(CODESET, loc); == Root Cause == macOS 26.2 SDK changed the structure of . In previous SDK versions, nl_langinfo_l() was declared unconditionally. In the new SDK, it is only exposed when _USE_EXTENDED_LOCALES_ is defined, guarded behind a conditional include of : /* macOS 26.2 SDK: langinfo.h */ #include <_langinfo.h> /* nl_langinfo() only */ #ifdef _USE_EXTENDED_LOCALES_ #include /* nl_langinfo_l() */ #endif PostgreSQL's chklocale.c only includes directly, so nl_langinfo_l() is no longer visible on macOS 26.2. == Fix == Include explicitly on Apple platforms. This header declares nl_langinfo_l() unconditionally and is the standard way to access locale-specific extensions on macOS. Tested on macOS 26.2 (darwin 25.3) with Apple Clang 17. Patch attached. Regards, Jianghua Yang --00000000000004ac87064d646f35 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

=C2=A0 Building PostgreSQL against the macOS 26= .2 SDK (Xcode 26 beta) fails
=C2=A0 with the following error:

=C2= =A0 =C2=A0 src/port/chklocale.c:326:8: error: call to undeclared function=C2=A0 =C2=A0 'nl_langinfo_l'; ISO C99 and later do not support i= mplicit function
=C2=A0 =C2=A0 declarations [-Wimplicit-function-declara= tion]
=C2=A0 =C2=A0 =C2=A0 =C2=A0 sys =3D nl_langinfo_l(CODESET, loc);
=C2=A0 =3D=3D Root Cause =3D=3D

=C2=A0 macOS 26.2 SDK changed = the structure of <langinfo.h>.=C2=A0 In previous
=C2=A0 SDK versio= ns, nl_langinfo_l() was declared unconditionally.=C2=A0 In the
=C2=A0 ne= w SDK, it is only exposed when _USE_EXTENDED_LOCALES_ is defined,
=C2=A0= guarded behind a conditional include of <xlocale/_langinfo.h>:
=C2=A0 =C2=A0 /* macOS 26.2 SDK: langinfo.h */
=C2=A0 =C2=A0 #include = <_langinfo.h> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* nl_langinfo() only= */

=C2=A0 =C2=A0 #ifdef _USE_EXTENDED_LOCALES_
=C2=A0 =C2=A0 #in= clude <xlocale/_langinfo.h> =C2=A0/* nl_langinfo_l() */
=C2=A0 =C2= =A0 #endif

=C2=A0 PostgreSQL's chklocale.c only includes <lan= ginfo.h> directly, so
=C2=A0 nl_langinfo_l() is no longer visible on = macOS 26.2.

=C2=A0 =3D=3D Fix =3D=3D

=C2=A0 Include <xloca= le.h> explicitly on Apple platforms.=C2=A0 This header
=C2=A0 declare= s nl_langinfo_l() unconditionally and is the standard way
=C2=A0 to acce= ss locale-specific extensions on macOS.

=C2=A0 Tested on macOS 26.2 = (darwin 25.3) with Apple Clang 17.

=C2=A0 Patch attached.

=C2= =A0 Regards,
=C2=A0 Jianghua Yang
--00000000000004ac87064d646f35-- --00000000000004ac89064d646f37 Content-Type: application/octet-stream; name="0001-Fix-build-failure-on-macOS-26.2-SDK-due-to-missing-n.patch" Content-Disposition: attachment; filename="0001-Fix-build-failure-on-macOS-26.2-SDK-due-to-missing-n.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxs777e0 RnJvbSBjMWJlNWEzMmU4ZTlkMTMwNTkyMzU1Yzk3ZWJjODlkZGM1ZTgxZDdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaWFuZ2h1YSBZYW5nIDx5amhqc3R6QGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAxOSBNYXIgMjAyNiAxMDo1OToxMSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEZpeCBi dWlsZCBmYWlsdXJlIG9uIG1hY09TIDI2LjIgU0RLIGR1ZSB0byBtaXNzaW5nCiBubF9sYW5naW5m b19sIGRlY2xhcmF0aW9uCgptYWNPUyAyNi4yIFNESyBjaGFuZ2VkIGxhbmdpbmZvLmggdG8gb25s eSBleHBvc2UgbmxfbGFuZ2luZm9fbCgpIHdoZW4KX1VTRV9FWFRFTkRFRF9MT0NBTEVTXyBpcyBk ZWZpbmVkLCB2aWEgeGxvY2FsZS9fbGFuZ2luZm8uaC4gIFByZXZpb3VzClNESyB2ZXJzaW9ucyBl eHBvc2VkIGl0IHVuY29uZGl0aW9uYWxseS4gIFRoaXMgY2F1c2VkIGEgYnVpbGQgZXJyb3IgaW4K Y2hrbG9jYWxlLmM6CgogIGVycm9yOiBjYWxsIHRvIHVuZGVjbGFyZWQgZnVuY3Rpb24gJ25sX2xh bmdpbmZvX2wnCgpGaXggYnkgZXhwbGljaXRseSBpbmNsdWRpbmcgPHhsb2NhbGUuaD4gb24gQXBw bGUgcGxhdGZvcm1zLCB3aGljaApkZWNsYXJlcyBubF9sYW5naW5mb19sKCkgcmVnYXJkbGVzcyBv ZiBfVVNFX0VYVEVOREVEX0xPQ0FMRVNfLgotLS0KIHNyYy9wb3J0L2Noa2xvY2FsZS5jIHwgMyAr KysKIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvcG9y dC9jaGtsb2NhbGUuYyBiL3NyYy9wb3J0L2Noa2xvY2FsZS5jCmluZGV4IDY2NGVlYWI5MDUwLi40 NDI4Yjk5ZDc5ZSAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvY2hrbG9jYWxlLmMKKysrIGIvc3JjL3Bv cnQvY2hrbG9jYWxlLmMKQEAgLTIxLDYgKzIxLDkgQEAKIAogI2lmbmRlZiBXSU4zMgogI2luY2x1 ZGUgPGxhbmdpbmZvLmg+CisjaWZkZWYgX19BUFBMRV9fCisjaW5jbHVkZSA8eGxvY2FsZS5oPgkJ CQkvKiBwcm92aWRlcyBubF9sYW5naW5mb19sIG9uIG1hY09TICovCisjZW5kaWYKICNlbmRpZgog CiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --00000000000004ac89064d646f37--