summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2021-05-20 11:52:46 +0200
committerGitHub <noreply@github.com>2021-05-20 11:52:46 +0200
commitdf429fa28772e077faa30dd6e3a701abf48c7669 (patch)
tree7c4a7fa9f583d8bfcb8446c26d46ed93454c8dd6
parenta1c82c39af812b54cd3dd1e472c9088457fb7dc5 (diff)
downloadNim-df429fa28772e077faa30dd6e3a701abf48c7669.tar.gz
config system: special case -d:release and -d:danger [backport:1.4] (#18051)
-rw-r--r--changelog.md4
-rw-r--r--compiler/commands.nim19
-rw-r--r--compiler/main.nim3
-rw-r--r--config/nim.cfg2
-rw-r--r--tests/newconfig/tfoo.nim4
-rw-r--r--tests/newconfig/tfoo.nims2
6 files changed, 27 insertions, 7 deletions
diff --git a/changelog.md b/changelog.md
index 992cd89c0..4c30d67a7 100644
--- a/changelog.md
+++ b/changelog.md
@@ -75,6 +75,10 @@
 
 - `strformat` is now part of `include std/prelude`.
 
+- The configuration subsystem now allows for `-d:release` and `-d:danger` to work as expected.
+  The downside is that these defines now have custom logic that doesn't apply for
+  other defines.
+
 
 ## Standard library additions and changes
 - Added support for parenthesized expressions in `strformat`
diff --git a/compiler/commands.nim b/compiler/commands.nim
index b9c8e9eb3..605e2930c 100644
--- a/compiler/commands.nim
+++ b/compiler/commands.nim
@@ -482,6 +482,19 @@ proc setCommandEarly*(conf: ConfigRef, command: string) =
   else:
     conf.foreignPackageNotes = foreignPackageNotesDefault
 
+proc specialDefine(conf: ConfigRef, key: string) =
+  # Keep this syncronized with the default config/nim.cfg!
+  if cmpIgnoreStyle(key, "nimQuirky") == 0:
+    conf.exc = excQuirky
+  elif cmpIgnoreStyle(key, "release") == 0 or cmpIgnoreStyle(key, "danger") == 0:
+    conf.options.excl {optStackTrace, optLineTrace, optLineDir, optOptimizeSize}
+    conf.globalOptions.excl {optExcessiveStackTrace, optCDebug}
+    conf.options.incl optOptimizeSpeed
+  if cmpIgnoreStyle(key, "danger") == 0 or cmpIgnoreStyle(key, "quick") == 0:
+    conf.options.excl {optObjCheck, optFieldCheck, optRangeCheck, optBoundsCheck,
+      optOverflowCheck, optAssert, optStackTrace, optLineTrace, optLineDir}
+    conf.globalOptions.excl {optCDebug}
+
 proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo;
                     conf: ConfigRef) =
   var
@@ -548,12 +561,10 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo;
     expectArg(conf, switch, arg, pass, info)
     if {':', '='} in arg:
       splitSwitch(conf, arg, key, val, pass, info)
-      if cmpIgnoreStyle(key, "nimQuirky") == 0:
-        conf.exc = excQuirky
+      specialDefine(conf, key)
       defineSymbol(conf.symbols, key, val)
     else:
-      if cmpIgnoreStyle(arg, "nimQuirky") == 0:
-        conf.exc = excQuirky
+      specialDefine(conf, arg)
       defineSymbol(conf.symbols, arg)
   of "undef", "u":
     expectArg(conf, switch, arg, pass, info)
diff --git a/compiler/main.nim b/compiler/main.nim
index e2b5f4b67..71e549ab8 100644
--- a/compiler/main.nim
+++ b/compiler/main.nim
@@ -417,7 +417,8 @@ proc mainCommand*(graph: ModuleGraph) =
       "project", project,
       "output", output,
       ])
-    rawMessage(conf, hintBuildMode, build)
+    if conf.cmd in cmdBackends:
+      rawMessage(conf, hintBuildMode, build)
 
   when PrintRopeCacheStats:
     echo "rope cache stats: "
diff --git a/config/nim.cfg b/config/nim.cfg
index d3ab75825..3b964d124 100644
--- a/config/nim.cfg
+++ b/config/nim.cfg
@@ -50,6 +50,7 @@ path="$lib/pure"
 @end
 nimblepath="$home/.nimble/pkgs/"
 
+# Syncronize with compiler/commands.specialDefine
 @if danger or quick:
   obj_checks:off
   field_checks:off
@@ -63,6 +64,7 @@ nimblepath="$home/.nimble/pkgs/"
   line_dir:off
 @end
 
+# Syncronize with compiler/commands.specialDefine
 @if release or danger:
   stacktrace:off
   excessiveStackTrace:off
diff --git a/tests/newconfig/tfoo.nim b/tests/newconfig/tfoo.nim
index 6654202c5..0c6ded470 100644
--- a/tests/newconfig/tfoo.nim
+++ b/tests/newconfig/tfoo.nim
@@ -1,6 +1,6 @@
 discard """
   cmd: "nim default --hint:cc:off --hint:cc $file"
-  output: '''hello world! 0.5'''
+  output: '''hello world! 0.5 true'''
   nimout: '''[NimScript] exec: gcc -v'''
 """
 
@@ -10,4 +10,4 @@ when not defined(definedefine):
 import math, mfriends
 
 discard gen[int]()
-echo "hello world! ", ln 2.0
+echo "hello world! ", ln 2.0, " ", compileOption("opt", "speed")
diff --git a/tests/newconfig/tfoo.nims b/tests/newconfig/tfoo.nims
index 6f0048afb..0cb950227 100644
--- a/tests/newconfig/tfoo.nims
+++ b/tests/newconfig/tfoo.nims
@@ -3,6 +3,8 @@ mode = ScriptMode.Whatif
 
 exec "gcc -v"
 
+--define:release
+
 --forceBuild
 --path: "../friends"