[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