diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 75a212984..315c0842a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -233,4 +233,9 @@ jobs: haxe: ${{ inputs.haxe }} - name: test c/cxx_standard attributes working-directory: test/cxx_standard - run: haxelib run hxcpp Build.xml + shell: bash + 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 @@ + + + +
+ +
+
+ + + + +
diff --git a/tools/hxcpp/BuildTool.hx b/tools/hxcpp/BuildTool.hx index 82a2b533e..49ee8b9d1 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,10 +984,58 @@ class BuildTool if (inTags!=null) group.mTags = inTags; - 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 (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; + } + + 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) {