Skip to content

Commit 2303c9c

Browse files
committed
NLWriter: CMake option NLW2_LIB_DMGAY_DTOA #30
1 parent e1ccbde commit 2303c9c

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

nl-writer2/CMakeLists.txt

+26-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
11
cmake_minimum_required(VERSION 3.10)
22

33

4-
# Minimum MacOS target to enable C++17 std::filesystem
5-
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15)
4+
option(NLW2_LIB_DMGAY_DTOA
5+
"NLW2_LIB: use David M. Gay's dtoa() implementation" OFF)
6+
if (NLW2_LIB_DMGAY_DTOA)
7+
message(STATUS
8+
" NLW2_LIB: using David M. Gay's dtoa() implementation."
9+
)
10+
# Minimum MacOS target to enable C++17 std::filesystem
11+
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15)
12+
else()
13+
message(STATUS
14+
" NLW2_LIB: using std::to_chars().\n"
15+
" On MacOS, requires OS 13.3 or higher."
16+
)
17+
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.3)
18+
endif()
619

720

21+
## project() after OSX_DEPLOYMENT_TARGET
822
project(NLWriter2)
923

1024

@@ -25,9 +39,14 @@ set(NLW2_EXAMPLE_PATH ${NLW2_DIR}/examples)
2539
set(NLW2_LIB_FILES
2640
${NLW2_SRC_PATH}/nl-writer2.cc
2741
${NLW2_SRC_PATH}/nl-utils.cc
28-
# ${NLW2_SRC_PATH}/dtoa.cc
2942
${NLW2_SRC_PATH}/nl-solver.cc
3043
)
44+
if (NLW2_LIB_DMGAY_DTOA)
45+
set(NLW2_LIB_FILES
46+
${NLW2_LIB_FILES}
47+
${NLW2_SRC_PATH}/dtoa.cc
48+
)
49+
endif()
3150
set(NLW2_INC_FILES
3251
${NLW2_INCLUDE_PATH}/mp/nl-solver-basics-c.h
3352
${NLW2_INCLUDE_PATH}/mp/nl-model.h
@@ -56,6 +75,10 @@ if (NLW2_LIB_ORIG_HDR)
5675
target_compile_definitions(
5776
${NLW2_LIB_NAME} PUBLIC NL_LIB2_ORIG_HDR)
5877
endif()
78+
if (NLW2_LIB_DMGAY_DTOA)
79+
target_compile_definitions(
80+
${NLW2_LIB_NAME} PUBLIC NLW2_LIB_DMGAY_DTOA)
81+
endif()
5982

6083
# C API sources
6184
set(NLW2_C_API_LIB_FILES

nl-writer2/src/nl-writer2.cc

+11-6
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ int TextFormatter::apr(File& f, const char *fmt, ...)
154154
while (*fmt++ != 'g');
155155
case 'g':
156156
x = va_arg(ap, double);
157-
#define NL_LIB_USE_TO_CHARS
158-
#ifdef NL_LIB_USE_TO_CHARS
157+
#ifndef NLW2_LIB_DMGAY_DTOA
158+
#ifndef NL_LIB_USE_OWN_GFMT
159159
std::to_chars_result res;
160160
if (output_prec <= 0) // shortest representation
161161
res = std::to_chars(s = buf, buf+sizeof(buf)-1, x);
@@ -168,9 +168,10 @@ int TextFormatter::apr(File& f, const char *fmt, ...)
168168
else
169169
Utils().myexit("aprintf / to_chars bug: " +
170170
std::make_error_code(res.ec).message());
171-
#elif NL_LIB_USE_OWN_GFMT
171+
#else // NL_LIB_USE_OWN_GFMT
172172
NL_LIB_GFMT::gfmt(s = buf, sizeof(buf), x, output_prec);
173-
#else
173+
#endif // NL_LIB_USE_OWN_GFMT
174+
#else // NLW2_LIB_DMGAY_DTOA
174175
s = DAVID_GAY_GFMT::gfmt(x, output_prec);
175176
#endif
176177
goto have_s;
@@ -319,7 +320,7 @@ apr(File& f, const char *fmt, ...)
319320
} // namespace mp
320321

321322

322-
#ifndef NL_LIB_USE_TO_CHARS
323+
#ifdef NLW2_LIB_DMGAY_DTOA
323324

324325
extern "C" {
325326
char *
@@ -417,6 +418,10 @@ gfmt(double x, int prec)
417418

418419
} // namespace DAVID_GAY_GFMT
419420

421+
#endif // NLW2_LIB_DMGAY_DTOA
422+
423+
424+
#ifdef NL_LIB_USE_OWN_GFMT
420425

421426
namespace NL_LIB_GFMT {
422427

@@ -475,4 +480,4 @@ void gfmt(char *b, size_t sz, double x, int prec) {
475480

476481
} // namespace NL_LIB_GFMT
477482

478-
#endif // NL_LIB_USE_TO_CHARS
483+
#endif // NL_LIB_USE_OWN_GFMT

0 commit comments

Comments
 (0)