From 37db66b4bfda600a933b454f3489a9fe3e163619 Mon Sep 17 00:00:00 2001 From: MAJigsaw77 <77043862+MAJigsaw77@users.noreply.github.com> Date: Mon, 9 Mar 2026 19:51:16 +0200 Subject: [PATCH 1/4] Fix setting `HXCPP_CPP__` not working on `Build.xml`. --- tools/hxcpp/BuildTool.hx | 70 +++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/tools/hxcpp/BuildTool.hx b/tools/hxcpp/BuildTool.hx index 82a2b533e..454923df5 100644 --- a/tools/hxcpp/BuildTool.hx +++ b/tools/hxcpp/BuildTool.hx @@ -164,45 +164,8 @@ class BuildTool Profile.setEntry("parse xml"); - - - if (mDefines.exists("HXCPP_C_STANDARD")) { - defaultCStandard = Std.parseInt(mDefines.get("HXCPP_C_STANDARD")); - } - - // Hxcpp requires C++11, so the default standard cannot be less than that - if (mDefines.exists("HXCPP_CXX_STANDARD")) { - defaultCxxStandard = Std.parseInt(mDefines.get("HXCPP_CXX_STANDARD")); - if (defaultCxxStandard < 11) { - Log.warn('Increasing default C++ standard to C++11 instead of C++${defaultCxxStandard}'); - defaultCxxStandard = 11; - } - } else if(mDefines.exists("HXCPP_CPP17")) { - defaultCxxStandard = 17; - } else if (mDefines.exists("HXCPP_CPP14")) { - defaultCxxStandard = 14; - } else { - defaultCxxStandard = 11; - } - - if (mDefines.exists("HXCPP_OBJC_STANDARD")) { - defaultObjCStandard = Std.parseInt(mDefines.get("HXCPP_OBJC_STANDARD")); - } - - if (mDefines.exists("HXCPP_OBJCXX_STANDARD")) { - defaultObjCxxStandard = Std.parseInt(mDefines.get("HXCPP_OBJCXX_STANDARD")); - if (defaultObjCxxStandard < 11) { - Log.warn('Increasing default Obj-C++ standard to Obj-C++11 instead of Obj-C++${defaultObjCxxStandard}'); - defaultObjCxxStandard = 11; - } - } else { - defaultObjCxxStandard = 11; - } - include("toolchain/setup.xml"); - - if (mDefines.exists("toolchain")) { if (!mDefines.exists("BINDIR")) @@ -1021,6 +984,39 @@ class BuildTool if (inTags!=null) group.mTags = inTags; + if (mDefines.exists("HXCPP_C_STANDARD")) { + defaultCStandard = Std.parseInt(mDefines.get("HXCPP_C_STANDARD")); + } + + // Hxcpp requires C++11, so the default standard cannot be less than that + if (mDefines.exists("HXCPP_CXX_STANDARD")) { + defaultCxxStandard = Std.parseInt(mDefines.get("HXCPP_CXX_STANDARD")); + if (defaultCxxStandard < 11) { + Log.warn('Increasing default C++ standard to C++11 instead of C++${defaultCxxStandard}'); + defaultCxxStandard = 11; + } + } else if(mDefines.exists("HXCPP_CPP17")) { + defaultCxxStandard = 17; + } else if (mDefines.exists("HXCPP_CPP14")) { + defaultCxxStandard = 14; + } else { + defaultCxxStandard = 11; + } + + if (mDefines.exists("HXCPP_OBJC_STANDARD")) { + defaultObjCStandard = Std.parseInt(mDefines.get("HXCPP_OBJC_STANDARD")); + } + + if (mDefines.exists("HXCPP_OBJCXX_STANDARD")) { + defaultObjCxxStandard = Std.parseInt(mDefines.get("HXCPP_OBJCXX_STANDARD")); + if (defaultObjCxxStandard < 11) { + Log.warn('Increasing default Obj-C++ standard to Obj-C++11 instead of Obj-C++${defaultObjCxxStandard}'); + defaultObjCxxStandard = 11; + } + } else { + defaultObjCxxStandard = 11; + } + group.mCStandard = inXML.has.c_standard ? Std.parseInt(substitute(inXML.att.c_standard)) : defaultCStandard; group.mObjCStandard = inXML.has.objc_standard ? Std.parseInt(substitute(inXML.att.objc_standard)) : defaultObjCStandard != null ? defaultObjCStandard : group.mCStandard; group.mCxxStandard = inXML.has.cxx_standard ? Std.parseInt(substitute(inXML.att.cxx_standard)) : defaultCxxStandard; From 4453b4ea3f8e10ae5f30ada26efb90602d969488 Mon Sep 17 00:00:00 2001 From: MAJigsaw77 <77043862+MAJigsaw77@users.noreply.github.com> Date: Mon, 9 Mar 2026 19:52:53 +0200 Subject: [PATCH 2/4] Fix language standards not being remembered from parent file groups. --- tools/hxcpp/BuildTool.hx | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tools/hxcpp/BuildTool.hx b/tools/hxcpp/BuildTool.hx index 454923df5..49ee8b9d1 100644 --- a/tools/hxcpp/BuildTool.hx +++ b/tools/hxcpp/BuildTool.hx @@ -1017,10 +1017,25 @@ class BuildTool defaultObjCxxStandard = 11; } - group.mCStandard = inXML.has.c_standard ? Std.parseInt(substitute(inXML.att.c_standard)) : defaultCStandard; - group.mObjCStandard = inXML.has.objc_standard ? Std.parseInt(substitute(inXML.att.objc_standard)) : defaultObjCStandard != null ? defaultObjCStandard : group.mCStandard; - group.mCxxStandard = inXML.has.cxx_standard ? Std.parseInt(substitute(inXML.att.cxx_standard)) : defaultCxxStandard; - group.mObjCxxStandard = inXML.has.objcxx_standard ? Std.parseInt(substitute(inXML.att.objcxx_standard)) : defaultObjCxxStandard != null ? defaultObjCxxStandard : group.mCxxStandard; + if (inXML.has.c_standard) + group.mCStandard = Std.parseInt(substitute(inXML.att.c_standard)); + else if (group.mCStandard == null) + group.mCStandard = defaultCStandard; + + if (inXML.has.objc_standard) + group.mObjCStandard = Std.parseInt(substitute(inXML.att.objc_standard)); + else if (group.mObjCStandard == null) + group.mObjCStandard = defaultObjCStandard != null ? defaultObjCStandard : group.mCStandard; + + if (inXML.has.cxx_standard) + group.mCxxStandard = Std.parseInt(substitute(inXML.att.cxx_standard)); + else if (group.mCxxStandard == null) + group.mCxxStandard = defaultCxxStandard; + + if (inXML.has.objcxx_standard) + group.mObjCxxStandard = Std.parseInt(substitute(inXML.att.objcxx_standard)); + else if (group.mObjCxxStandard == null) + group.mObjCxxStandard = defaultObjCxxStandard != null ? defaultObjCxxStandard : group.mCxxStandard; for(el in inXML.elements) { From 4f89fbc74456661dd4e23d9fd569c30328065e24 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Wed, 11 Mar 2026 19:59:41 +0000 Subject: [PATCH 3/4] [tests] Add tests for c/cpp standard regressions --- .github/workflows/test.yml | 6 +++++- test/cxx_standard/Build_legacy.xml | 12 ++++++++++++ test/cxx_standard/Build_section.xml | 12 ++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 test/cxx_standard/Build_legacy.xml create mode 100644 test/cxx_standard/Build_section.xml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 75a212984..6f6d811ba 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -233,4 +233,8 @@ jobs: haxe: ${{ inputs.haxe }} - name: test c/cxx_standard attributes working-directory: test/cxx_standard - run: haxelib run hxcpp Build.xml + run: | + for xml in *.xml; do + haxelib run hxcpp $xml + haxelib run hxcpp $xml clean + done diff --git a/test/cxx_standard/Build_legacy.xml b/test/cxx_standard/Build_legacy.xml new file mode 100644 index 000000000..e9c4efa99 --- /dev/null +++ b/test/cxx_standard/Build_legacy.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/test/cxx_standard/Build_section.xml b/test/cxx_standard/Build_section.xml new file mode 100644 index 000000000..af4ab0cdb --- /dev/null +++ b/test/cxx_standard/Build_section.xml @@ -0,0 +1,12 @@ + + + +
+ +
+
+ + + + +
From 1bc692ba32fcef19062d4fc0fb3b5d1943497969 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Fri, 13 Mar 2026 01:16:06 +0000 Subject: [PATCH 4/4] [ci] Use bash for cxx standard for loop --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6f6d811ba..315c0842a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -233,6 +233,7 @@ jobs: haxe: ${{ inputs.haxe }} - name: test c/cxx_standard attributes working-directory: test/cxx_standard + shell: bash run: | for xml in *.xml; do haxelib run hxcpp $xml