Skip to content

Create separate lexbor extension #18538

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,6 @@ tmp-php.ini
!/ext/fileinfo/libmagic/config.h
!/ext/fileinfo/libmagic.patch
!/ext/fileinfo/magicdata.patch
!/ext/dom/lexbor/patches/*.patch
!/ext/lexbor/patches/*.patch
!/ext/pcre/pcre2lib/config.h
!/win32/build/Makefile
7 changes: 7 additions & 0 deletions EXTENSIONS
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,13 @@ PRIMARY MAINTAINER: Thies C. Arntzen <[email protected]> (1999 - 2002)
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: lexbor
PRIMARY MAINTAINER: Niels Dossche <[email protected]> (2023 - 2025)
Mate Kocsis <[email protected]> (2025 - 2025)
MAINTENANCE: Maintained
STATUS: Working
SINCE: 8.5
-------------------------------------------------------------------------------
EXTENSION: libxml
PRIMARY MAINTAINER: Rob Richards <[email protected]> (2003 - 2009)
Christian Stocker <[email protected]> (2004 - 2011)
Expand Down
200 changes: 6 additions & 194 deletions ext/dom/config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -5,188 +5,11 @@ PHP_ARG_ENABLE([dom],
[yes])

if test "$PHP_DOM" != "no"; then
PHP_LEXBOR_ENABLED=yes

PHP_SETUP_LIBXML([DOM_SHARED_LIBADD], [
AC_DEFINE([HAVE_DOM], [1],
[Define to 1 if the PHP extension 'dom' is available.])
PHP_LEXBOR_CFLAGS="-I@ext_srcdir@/lexbor -DLEXBOR_STATIC"
LEXBOR_DIR="lexbor/lexbor"
LEXBOR_SOURCES=m4_normalize(["
$LEXBOR_DIR/core/array_obj.c
$LEXBOR_DIR/core/array.c
$LEXBOR_DIR/core/avl.c
$LEXBOR_DIR/core/bst.c
$LEXBOR_DIR/core/conv.c
$LEXBOR_DIR/core/diyfp.c
$LEXBOR_DIR/core/dobject.c
$LEXBOR_DIR/core/dtoa.c
$LEXBOR_DIR/core/hash.c
$LEXBOR_DIR/core/mem.c
$LEXBOR_DIR/core/mraw.c
$LEXBOR_DIR/core/print.c
$LEXBOR_DIR/core/serialize.c
$LEXBOR_DIR/core/shs.c
$LEXBOR_DIR/core/str.c
$LEXBOR_DIR/core/strtod.c
$LEXBOR_DIR/css/css.c
$LEXBOR_DIR/css/log.c
$LEXBOR_DIR/css/parser.c
$LEXBOR_DIR/css/selectors/pseudo_state.c
$LEXBOR_DIR/css/selectors/pseudo.c
$LEXBOR_DIR/css/selectors/selector.c
$LEXBOR_DIR/css/selectors/selectors.c
$LEXBOR_DIR/css/selectors/state.c
$LEXBOR_DIR/css/state.c
$LEXBOR_DIR/css/syntax/anb.c
$LEXBOR_DIR/css/syntax/parser.c
$LEXBOR_DIR/css/syntax/state.c
$LEXBOR_DIR/css/syntax/syntax.c
$LEXBOR_DIR/css/syntax/token.c
$LEXBOR_DIR/css/syntax/tokenizer.c
$LEXBOR_DIR/css/syntax/tokenizer/error.c
$LEXBOR_DIR/dom/interface.c
$LEXBOR_DIR/dom/interfaces/attr.c
$LEXBOR_DIR/dom/interfaces/cdata_section.c
$LEXBOR_DIR/dom/interfaces/character_data.c
$LEXBOR_DIR/dom/interfaces/comment.c
$LEXBOR_DIR/dom/interfaces/document_fragment.c
$LEXBOR_DIR/dom/interfaces/document_type.c
$LEXBOR_DIR/dom/interfaces/document.c
$LEXBOR_DIR/dom/interfaces/element.c
$LEXBOR_DIR/dom/interfaces/node.c
$LEXBOR_DIR/dom/interfaces/processing_instruction.c
$LEXBOR_DIR/dom/interfaces/shadow_root.c
$LEXBOR_DIR/dom/interfaces/text.c
$LEXBOR_DIR/encoding/big5.c
$LEXBOR_DIR/encoding/decode.c
$LEXBOR_DIR/encoding/encode.c
$LEXBOR_DIR/encoding/encoding.c
$LEXBOR_DIR/encoding/euc_kr.c
$LEXBOR_DIR/encoding/gb18030.c
$LEXBOR_DIR/encoding/iso_2022_jp_katakana.c
$LEXBOR_DIR/encoding/jis0208.c
$LEXBOR_DIR/encoding/jis0212.c
$LEXBOR_DIR/encoding/range.c
$LEXBOR_DIR/encoding/res.c
$LEXBOR_DIR/encoding/single.c
$LEXBOR_DIR/html/encoding.c
$LEXBOR_DIR/html/interface.c
$LEXBOR_DIR/html/interfaces/anchor_element.c
$LEXBOR_DIR/html/interfaces/area_element.c
$LEXBOR_DIR/html/interfaces/audio_element.c
$LEXBOR_DIR/html/interfaces/base_element.c
$LEXBOR_DIR/html/interfaces/body_element.c
$LEXBOR_DIR/html/interfaces/br_element.c
$LEXBOR_DIR/html/interfaces/button_element.c
$LEXBOR_DIR/html/interfaces/canvas_element.c
$LEXBOR_DIR/html/interfaces/d_list_element.c
$LEXBOR_DIR/html/interfaces/data_element.c
$LEXBOR_DIR/html/interfaces/data_list_element.c
$LEXBOR_DIR/html/interfaces/details_element.c
$LEXBOR_DIR/html/interfaces/dialog_element.c
$LEXBOR_DIR/html/interfaces/directory_element.c
$LEXBOR_DIR/html/interfaces/div_element.c
$LEXBOR_DIR/html/interfaces/document.c
$LEXBOR_DIR/html/interfaces/element.c
$LEXBOR_DIR/html/interfaces/embed_element.c
$LEXBOR_DIR/html/interfaces/field_set_element.c
$LEXBOR_DIR/html/interfaces/font_element.c
$LEXBOR_DIR/html/interfaces/form_element.c
$LEXBOR_DIR/html/interfaces/frame_element.c
$LEXBOR_DIR/html/interfaces/frame_set_element.c
$LEXBOR_DIR/html/interfaces/head_element.c
$LEXBOR_DIR/html/interfaces/heading_element.c
$LEXBOR_DIR/html/interfaces/hr_element.c
$LEXBOR_DIR/html/interfaces/html_element.c
$LEXBOR_DIR/html/interfaces/iframe_element.c
$LEXBOR_DIR/html/interfaces/image_element.c
$LEXBOR_DIR/html/interfaces/input_element.c
$LEXBOR_DIR/html/interfaces/label_element.c
$LEXBOR_DIR/html/interfaces/legend_element.c
$LEXBOR_DIR/html/interfaces/li_element.c
$LEXBOR_DIR/html/interfaces/link_element.c
$LEXBOR_DIR/html/interfaces/map_element.c
$LEXBOR_DIR/html/interfaces/marquee_element.c
$LEXBOR_DIR/html/interfaces/media_element.c
$LEXBOR_DIR/html/interfaces/menu_element.c
$LEXBOR_DIR/html/interfaces/meta_element.c
$LEXBOR_DIR/html/interfaces/meter_element.c
$LEXBOR_DIR/html/interfaces/mod_element.c
$LEXBOR_DIR/html/interfaces/o_list_element.c
$LEXBOR_DIR/html/interfaces/object_element.c
$LEXBOR_DIR/html/interfaces/opt_group_element.c
$LEXBOR_DIR/html/interfaces/option_element.c
$LEXBOR_DIR/html/interfaces/output_element.c
$LEXBOR_DIR/html/interfaces/paragraph_element.c
$LEXBOR_DIR/html/interfaces/param_element.c
$LEXBOR_DIR/html/interfaces/picture_element.c
$LEXBOR_DIR/html/interfaces/pre_element.c
$LEXBOR_DIR/html/interfaces/progress_element.c
$LEXBOR_DIR/html/interfaces/quote_element.c
$LEXBOR_DIR/html/interfaces/script_element.c
$LEXBOR_DIR/html/interfaces/select_element.c
$LEXBOR_DIR/html/interfaces/slot_element.c
$LEXBOR_DIR/html/interfaces/source_element.c
$LEXBOR_DIR/html/interfaces/span_element.c
$LEXBOR_DIR/html/interfaces/style_element.c
$LEXBOR_DIR/html/interfaces/table_caption_element.c
$LEXBOR_DIR/html/interfaces/table_cell_element.c
$LEXBOR_DIR/html/interfaces/table_col_element.c
$LEXBOR_DIR/html/interfaces/table_element.c
$LEXBOR_DIR/html/interfaces/table_row_element.c
$LEXBOR_DIR/html/interfaces/table_section_element.c
$LEXBOR_DIR/html/interfaces/template_element.c
$LEXBOR_DIR/html/interfaces/text_area_element.c
$LEXBOR_DIR/html/interfaces/time_element.c
$LEXBOR_DIR/html/interfaces/title_element.c
$LEXBOR_DIR/html/interfaces/track_element.c
$LEXBOR_DIR/html/interfaces/u_list_element.c
$LEXBOR_DIR/html/interfaces/unknown_element.c
$LEXBOR_DIR/html/interfaces/video_element.c
$LEXBOR_DIR/html/interfaces/window.c
$LEXBOR_DIR/html/parser.c
$LEXBOR_DIR/html/token_attr.c
$LEXBOR_DIR/html/token.c
$LEXBOR_DIR/html/tokenizer.c
$LEXBOR_DIR/html/tokenizer/error.c
$LEXBOR_DIR/html/tokenizer/state_comment.c
$LEXBOR_DIR/html/tokenizer/state_doctype.c
$LEXBOR_DIR/html/tokenizer/state_rawtext.c
$LEXBOR_DIR/html/tokenizer/state_rcdata.c
$LEXBOR_DIR/html/tokenizer/state_script.c
$LEXBOR_DIR/html/tokenizer/state.c
$LEXBOR_DIR/html/tree.c
$LEXBOR_DIR/html/tree/active_formatting.c
$LEXBOR_DIR/html/tree/error.c
$LEXBOR_DIR/html/tree/insertion_mode/after_after_body.c
$LEXBOR_DIR/html/tree/insertion_mode/after_after_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/after_body.c
$LEXBOR_DIR/html/tree/insertion_mode/after_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/after_head.c
$LEXBOR_DIR/html/tree/insertion_mode/before_head.c
$LEXBOR_DIR/html/tree/insertion_mode/before_html.c
$LEXBOR_DIR/html/tree/insertion_mode/foreign_content.c
$LEXBOR_DIR/html/tree/insertion_mode/in_body.c
$LEXBOR_DIR/html/tree/insertion_mode/in_caption.c
$LEXBOR_DIR/html/tree/insertion_mode/in_cell.c
$LEXBOR_DIR/html/tree/insertion_mode/in_column_group.c
$LEXBOR_DIR/html/tree/insertion_mode/in_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/in_head_noscript.c
$LEXBOR_DIR/html/tree/insertion_mode/in_head.c
$LEXBOR_DIR/html/tree/insertion_mode/in_row.c
$LEXBOR_DIR/html/tree/insertion_mode/in_select_in_table.c
$LEXBOR_DIR/html/tree/insertion_mode/in_select.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table_body.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table_text.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table.c
$LEXBOR_DIR/html/tree/insertion_mode/in_template.c
$LEXBOR_DIR/html/tree/insertion_mode/initial.c
$LEXBOR_DIR/html/tree/insertion_mode/text.c
$LEXBOR_DIR/html/tree/open_elements.c
$LEXBOR_DIR/ns/ns.c
$LEXBOR_DIR/ports/posix/lexbor/core/memory.c
$LEXBOR_DIR/selectors-adapted/selectors.c
$LEXBOR_DIR/tag/tag.c
"])
PHP_NEW_EXTENSION([dom], m4_normalize([
attr.c
cdatasection.c
Expand Down Expand Up @@ -223,25 +46,13 @@ if test "$PHP_DOM" != "no"; then
xml_serializer.c
xpath_callbacks.c
xpath.c
$LEXBOR_SOURCES
lexbor/selectors-adapted/selectors.c
]),
[$ext_shared],,
[$PHP_LEXBOR_CFLAGS])
[])
PHP_ADD_BUILD_DIR([
$ext_builddir/parentnode
$ext_builddir/$LEXBOR_DIR/core
$ext_builddir/$LEXBOR_DIR/css/selectors
$ext_builddir/$LEXBOR_DIR/css/syntax/tokenizer
$ext_builddir/$LEXBOR_DIR/css/tokenizer
$ext_builddir/$LEXBOR_DIR/dom/interfaces
$ext_builddir/$LEXBOR_DIR/encoding
$ext_builddir/$LEXBOR_DIR/html/interfaces
$ext_builddir/$LEXBOR_DIR/html/tokenizer
$ext_builddir/$LEXBOR_DIR/html/tree/insertion_mode
$ext_builddir/$LEXBOR_DIR/ns
$ext_builddir/$LEXBOR_DIR/ports/posix/lexbor/core
$ext_builddir/$LEXBOR_DIR/selectors-adapted
$ext_builddir/$LEXBOR_DIR/tag
$ext_builddir/lexbor/selectors-adapted
])
PHP_SUBST([DOM_SHARED_LIBADD])
PHP_INSTALL_HEADERS([ext/dom], m4_normalize([
Expand All @@ -251,5 +62,6 @@ if test "$PHP_DOM" != "no"; then
xpath_callbacks.h
]))
PHP_ADD_EXTENSION_DEP(dom, libxml)
PHP_ADD_EXTENSION_DEP(dom, lexbor)
])
fi
26 changes: 6 additions & 20 deletions ext/dom/config.w32
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,12 @@ if (PHP_DOM == "yes") {
entityreference.c \
token_list.c \
notation.c xpath.c dom_iterators.c \
namednodemap.c xpath_callbacks.c", null, "-Iext/dom/lexbor");
namednodemap.c xpath_callbacks.c", null, "/I ext/lexbor");
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cmb69 Currently, the build fails with the following error:

ext\dom\parentnode\css_selectors.c(26): fatal error C1083: Cannot open include file: 'lexbor/selectors-adapted/selectors.h': No such file or directory

I installed the relevant header file below, but do you think I should add something like -Iext/dom/ here? Please note that previously, the file was in ext/dom/lexbor/lexbor/lexbor-adapted/selectors.h, and now I removed one level from the path.


ADD_EXTENSION_DEP('dom', 'lexbor');

ADD_SOURCES("ext/dom/parentnode", "tree.c css_selectors.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/ports/windows_nt/lexbor/core", "memory.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/core", "array_obj.c array.c avl.c bst.c diyfp.c conv.c dobject.c dtoa.c hash.c mem.c mraw.c print.c serialize.c shs.c str.c strtod.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/dom", "interface.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/dom/interfaces", "attr.c cdata_section.c character_data.c comment.c document.c document_fragment.c document_type.c element.c node.c processing_instruction.c shadow_root.c text.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/html/tokenizer", "error.c state_comment.c state_doctype.c state_rawtext.c state_rcdata.c state_script.c state.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/html/tree", "active_formatting.c open_elements.c error.c", "dom");
ADD_SOURCES("ext/dom/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_select.c in_select_in_table.c in_table_body.c in_table.c in_table_text.c in_template.c text.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/html", "encoding.c interface.c parser.c token.c token_attr.c tokenizer.c tree.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/encoding", "big5.c decode.c encode.c encoding.c euc_kr.c gb18030.c iso_2022_jp_katakana.c jis0208.c jis0212.c range.c res.c single.c", "dom");
ADD_SOURCES("ext/dom/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 select_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/dom/lexbor/lexbor/selectors-adapted", "selectors.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/css", "state.c log.c parser.c css.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/css/selectors", "state.c selectors.c selector.c pseudo_state.c pseudo.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/css/syntax", "state.c parser.c syntax.c anb.c tokenizer.c token.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/css/syntax/tokenizer", "error.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/ns", "ns.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/tag", "tag.c", "dom");
ADD_FLAG("CFLAGS_DOM", "/D LEXBOR_STATIC ");
ADD_SOURCES("ext/dom/lexbor/selectors-adapted", "selectors.c", "dom");

AC_DEFINE("HAVE_DOM", 1, "Define to 1 if the PHP extension 'dom' is available.");

Expand All @@ -51,7 +36,8 @@ if (PHP_DOM == "yes") {
"dom_ce.h " +
"namespace_compat.h " +
"xml_common.h " +
"xpath_callbacks.h "
"xpath_callbacks.h " +
"lexbor/selectors-adapted/selectors.h "
);
} else {
WARNING("dom support can't be enabled, libxml is not enabled")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
#include <php.h>

#include "lexbor/selectors-adapted/selectors.h"
#include "../../../namespace_compat.h"
#include "../../../domexception.h"
#include "../../../php_dom.h"
#include "../../namespace_compat.h"
#include "../../domexception.h"
#include "../../php_dom.h"

#include <math.h>

Expand Down
4 changes: 2 additions & 2 deletions ext/dom/php_dom.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
#include "dom_properties.h"
#include "token_list.h"
#include "zend_interfaces.h"
#include "lexbor/lexbor/core/types.h"
#include "lexbor/lexbor/core/lexbor.h"
#include <lexbor/core/types.h>
#include <lexbor/core/lexbor.h>

#include "ext/standard/info.h"

Expand Down
File renamed without changes.
File renamed without changes.
Loading
Loading