Skip to content
Merged
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
12 changes: 12 additions & 0 deletions test/cxx_standard/Build_legacy.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<xml>
<set name="HXCPP_CPP17" value="1" />

<files id="test">
<compilerflag value="/Zc:__cplusplus" if="isMsvc" />
<file name="main.cpp" />
</files>

<target id="default" tool="linker" toolid="exe" output="main">
<files id="test"/>
</target>
</xml>
12 changes: 12 additions & 0 deletions test/cxx_standard/Build_section.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<xml>
<files id="test" cxx_standard="17">
<compilerflag value="/Zc:__cplusplus" if="isMsvc" />
<section>
<file name="main.cpp" />
</section>
</files>

<target id="default" tool="linker" toolid="exe" output="main">
<files id="test"/>
</target>
</xml>
93 changes: 52 additions & 41 deletions tools/hxcpp/BuildTool.hx
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
Expand Down Expand Up @@ -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)
{
Expand Down
Loading