[php-src] Issue #21911: [Windows] Lexbor compile failed on 8.5.6

[email protected] (nono303)
Newsgroups php.bugs
Message-ID <[email protected]>
Issue: https://github.com/php/php-src/issues/21911
Author: nono303

### Description

Hi,
regarding https://github.com/php/php-src/commit/d58d3d2fd6c1cfa7e3489a9859eda63086af762f some sources had been added to `config.w32` when bumping lexbor from 2.5 to 2.7 but they had been targeted to `dom` and not `lexbor`
🔴 Result is build failed when configure require `--with-dom=shared`
> new lexbor sources added and targeted `dom` are present in `DOM_GLOBAL_OBJS` but not in `LEXBOR_GLOBAL_OBJS` which cause a link error on php8ts.dll  
```
C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\php8ts.dll : fatal error LNK1120: 169 unresolved externals
NMAKE : fatal error U1077: '"link.exe" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\PHP_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\DATE_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\HASH_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\JSON_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\LEXBOR_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\LIBXML_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\PCRE_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\RANDOM_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\REFLECTION_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\SPL_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\STANDARD_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\TOKENIZER_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\FILTER_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\MYSQLND_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\OPCACHE_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\PDO_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\PHAR_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\SESSION_GLOBAL_OBJS.txt" @"C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\resp\URI_GLOBAL_OBJS.txt"     libxml2_a_dll.lib libiconv.lib liblzma.lib icuuc.lib pcre2-8.lib    iphlpapi.lib   WS2_32.Lib z.lib Crypt32.Lib   libcrypto.lib libcrypto.lib gdi32.lib   kernel32.lib ole32.lib user32.lib advapi32.lib shell32.lib ws2_32.lib Dnsapi.lib psapi.lib bcrypt.lib Pathcch.lib pthreadVC3.lib C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\Zend\jump_x86_64_ms_pe_masm.obj C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\Zend\make_x86_64_ms_pe_masm.obj C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\Zend\save_xmm_x86_64_ms_masm.obj C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\php8ts.dll.res /out:C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\php8ts.dll  /dll /nodefaultlib:libcmt /def:C:\sdk\src\php-sdk\phpmaster\vs18\x64\build\Release_TS\php8ts.dll.def /nologo /d2:-AllowCompatibleILVersions /incremental:no /LTCG /NODEFAULTLIB:libcmt.lib /CGTHREADS:8 /debug /opt:ref,icf /libpath:"C:\sdk\release\vs18_x64-avx2\lib" /libpath:"C:\sdk\src\php-sdk\phpmaster\vs18\x64\php-src" /libpath:"C:\sdk\release\vs18_x64-avx2\_proj\lib" /libpath:"C:\sdk\release\vs18_x64-avx2\_gdal\lib" /libpath:"..\..\..\..\..\..\release\vs18_x64-avx2\lib"     /libpath:"..\..\..\..\..\..\release\vs18_x64-avx2\lib" /libpath:"..\..\..\..\..\..\release\vs18_x64-avx2\lib" /libpath:"..\..\..\..\..\..\release\vs18_x64-avx2\lib"       /libpath:"..\..\..\..\..\..\release\vs18_x64-avx2\lib"   /libpath:"..\..\..\..\..\..\release\vs18_x64-avx2\lib" /IGNORE:4089  ' : return code '0x460'
```
⏩ Configuring with `--with-dom` static works _(as both `DOM_GLOBAL_OBJS` and `LEXBOR_GLOBAL_OBJS` present when linking `php8ts.dll`)_
Here is the fix:
```patch
diff --git a/ext/lexbor/config.w32 b/ext/lexbor/config.w32
index 44ddfe1ffae..e75798e0618 100644
--- a/ext/lexbor/config.w32
+++ b/ext/lexbor/config.w32
@@ -11,10 +11,10 @@ ADD_SOURCES("ext/lexbor/lexbor/html/tree", "active_formatting.c open_elements.c
 ADD_SOURCES("ext/lexbor/lexbor/html/tree/insertion_mode", "after_after_body.c after_after_frameset.c after_body.c after_frameset.c after_head.c before_head.c before_html.c foreign_content.c in_body.c in_caption.c in_cell.c in_column_group.c in_frameset.c in_head.c in_head_noscript.c initial.c in_row.c in_table_body.c in_table.c in_table_text.c in_template.c text.c","lexbor");
 ADD_SOURCES("ext/lexbor/lexbor/html", "encoding.c interface.c parser.c tag.c token.c token_attr.c tokenizer.c tree.c","lexbor");
 ADD_SOURCES("ext/lexbor/lexbor/encoding", "decode.c encode.c encoding.c multi.c range.c res.c single.c","lexbor");
-ADD_SOURCES("ext/lexbor/lexbor/html/interfaces", "anchor_element.c area_element.c audio_element.c base_element.c body_element.c br_element.c button_element.c canvas_element.c data_element.c data_list_element.c details_element.c dialog_element.c directory_element.c div_element.c d_list_element.c document.c element.c embed_element.c field_set_element.c font_element.c form_element.c frame_element.c frame_set_element.c head_element.c heading_element.c hr_element.c html_element.c iframe_element.c image_element.c input_element.c label_element.c legend_element.c li_element.c link_element.c map_element.c marquee_element.c media_element.c menu_element.c meta_element.c meter_element.c mod_element.c object_element.c o_list_element.c opt_group_element.c option_element.c output_element.c paragraph_element.c param_element.c picture_element.c pre_element.c progress_element.c quote_element.c script_element.c search_element.c select_element.c selectedcontent_element.c slot_element.c source_element.c span_element.c style_element.c table_caption_element.c table_cell_element.c table_col_element.c table_element.c table_row_element.c table_section_element.c template_element.c text_area_element.c time_element.c title_element.c track_element.c u_list_element.c unknown_element.c video_element.c window.c", "dom");
-ADD_SOURCES("ext/lexbor/lexbor/css", "at_rule.c blank.c css.c declaration.c log.c parser.c property.c rule.c state.c stylesheet.c unit.c value.c", "dom");
-ADD_SOURCES("ext/lexbor/lexbor/css/at_rule", "state.c", "dom");
-ADD_SOURCES("ext/lexbor/lexbor/css/property", "state.c", "dom");
+ADD_SOURCES("ext/lexbor/lexbor/html/interfaces", "anchor_element.c area_element.c audio_element.c base_element.c body_element.c br_element.c button_element.c canvas_element.c data_element.c data_list_element.c details_element.c dialog_element.c directory_element.c div_element.c d_list_element.c document.c element.c embed_element.c field_set_element.c font_element.c form_element.c frame_element.c frame_set_element.c head_element.c heading_element.c hr_element.c html_element.c iframe_element.c image_element.c input_element.c label_element.c legend_element.c li_element.c link_element.c map_element.c marquee_element.c media_element.c menu_element.c meta_element.c meter_element.c mod_element.c object_element.c o_list_element.c opt_group_element.c option_element.c output_element.c paragraph_element.c param_element.c picture_element.c pre_element.c progress_element.c quote_element.c script_element.c search_element.c select_element.c selectedcontent_element.c slot_element.c source_element.c span_element.c style_element.c table_caption_element.c table_cell_element.c table_col_element.c table_element.c table_row_element.c table_section_element.c template_element.c text_area_element.c time_element.c title_element.c track_element.c u_list_element.c unknown_element.c video_element.c window.c", "lexbor");
+ADD_SOURCES("ext/lexbor/lexbor/css", "at_rule.c blank.c css.c declaration.c log.c parser.c property.c rule.c state.c stylesheet.c unit.c value.c", "lexbor");
+ADD_SOURCES("ext/lexbor/lexbor/css/at_rule", "state.c", "lexbor");
+ADD_SOURCES("ext/lexbor/lexbor/css/property", "state.c", "lexbor");
 ADD_SOURCES("ext/lexbor/lexbor/css/selectors", "state.c selectors.c selector.c pseudo_state.c pseudo.c","lexbor");
 ADD_SOURCES("ext/lexbor/lexbor/css/syntax", "state.c parser.c syntax.c anb.c tokenizer.c token.c","lexbor");
 ADD_SOURCES("ext/lexbor/lexbor/css/syntax/tokenizer", "error.c","lexbor");
```


### PHP Version

```plain
PHP 8.5.6RC2 (cli) (built: Apr 29 2026 17:35:27) (ZTS MSVC 19.50.35729, untested x64)
Copyright (c) The PHP Group
Zend Engine v4.5.6RC2, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.6RC2, Copyright (c), by Zend Technologies
```

### Operating System

WIndows 11
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.