From cbadeda314284c22889020ef0bc5b32ddc3a65e8 Mon Sep 17 00:00:00 2001 From: jmgomez Date: Thu, 18 Jul 2024 15:29:27 +0100 Subject: [PATCH 1/6] Adds a fallback to `build_all` when `csources` fails --- src/nimblepkg/nimenv.nim | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/nimblepkg/nimenv.nim b/src/nimblepkg/nimenv.nim index 0cd61a132..8a0df824d 100644 --- a/src/nimblepkg/nimenv.nim +++ b/src/nimblepkg/nimenv.nim @@ -51,23 +51,34 @@ proc compileNim*(options: Options, nimDest: string, v: VersionRange) = else: "csources_v1" cd workspace: - echo "Entering CSOURCES", csourcesVersion, " exists ", dirExists(csourcesVersion) if not dirExists(csourcesVersion): exec "git clone https://github.com/nim-lang/" & csourcesVersion + var csourcesSucceed = false cd workspace / csourcesVersion: when defined(windows): - exec "build.bat" + let cmd = "build.bat" + csourcesSucceed = os.execShellCmd(cmd) != 0 else: let makeExe = findExe("make") if makeExe.len == 0: - exec "sh build.sh" + let cmd = "sh build.sh" + csourcesSucceed = os.execShellCmd(cmd) != 0 else: - exec "make" - let nimExe0 = ".." / csourcesVersion / "bin" / "nim".addFileExt(ExeExt) + let cmd = "make" + csourcesSucceed = os.execShellCmd(cmd) != 0 + cd nimDest: + #Sometimes building from csources fails and we cant do much about it. So we fallback to the slow build_all method + if not csourcesSucceed: + display("Warning", "Building nim from csources failed. Using `build_all`", Warning, HighPriority) + let cmd = + when defined(windows): "build_all.bat" + else: "sh build_all.sh" + exec cmd let nimExe = "bin" / "nim".addFileExt(ExeExt) - copyFileWithPermissions nimExe0, nimExe + when defined(nimExe0): + copyFileWithPermissions nimExe0, nimExe exec nimExe & " c --noNimblePath --skipUserCfg --skipParentCfg --hints:off koch" let kochExe = when defined(windows): "koch.exe" else: "./koch" exec kochExe & " boot -d:release --skipUserCfg --skipParentCfg --hints:off" From 55a7c9f857832e85130e4c3922a850fcf833a7c6 Mon Sep 17 00:00:00 2001 From: jmgomez Date: Fri, 5 Jul 2024 09:05:25 +0100 Subject: [PATCH 2/6] Adds a test that verifies that the required Nim is the one used by `nimble` when compiling and running the package --- tests/nimnimble/nim1.6.20/nim1620.nimble | 6 +++++- tests/nimnimble/nim1.6.20/src/nim1620.nim | 2 ++ tests/nimnimble/nim2.0.4/nim204.nimble | 7 +++++-- tests/nimnimble/nim2.0.4/src/nim204.nim | 3 +++ tests/nimnimble/nimdevel/nimdevel.nimble | 5 +++++ tests/nimnimble/nimdevel/src/nimdevel.nim | 2 ++ tests/tniminstall.nim | 3 +-- 7 files changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/nimnimble/nim1.6.20/nim1620.nimble b/tests/nimnimble/nim1.6.20/nim1620.nimble index 34993d94f..2386facd6 100644 --- a/tests/nimnimble/nim1.6.20/nim1620.nimble +++ b/tests/nimnimble/nim1.6.20/nim1620.nimble @@ -5,8 +5,12 @@ author = "jmgomez" description = "A new awesome nimble package" license = "MIT" srcDir = "src" - +bin = @["nim1620"] # Dependencies requires "nim == 1.6.20" + +after build: + let (output, _) = gorgeEx "./nim1620" + assert output == NimVersion \ No newline at end of file diff --git a/tests/nimnimble/nim1.6.20/src/nim1620.nim b/tests/nimnimble/nim1.6.20/src/nim1620.nim index b7a248036..3edc8eeca 100644 --- a/tests/nimnimble/nim1.6.20/src/nim1620.nim +++ b/tests/nimnimble/nim1.6.20/src/nim1620.nim @@ -5,3 +5,5 @@ proc add*(x, y: int): int = ## Adds two numbers together. return x + y + +echo NimVersion \ No newline at end of file diff --git a/tests/nimnimble/nim2.0.4/nim204.nimble b/tests/nimnimble/nim2.0.4/nim204.nimble index 32bebc1cc..589fbdf65 100644 --- a/tests/nimnimble/nim2.0.4/nim204.nimble +++ b/tests/nimnimble/nim2.0.4/nim204.nimble @@ -1,12 +1,15 @@ # Package - version = "0.1.0" author = "jmgomez" description = "A new awesome nimble package" license = "MIT" srcDir = "src" - +bin = @["nim204"] # Dependencies requires "nim == 2.0.4" + +after build: + let (output, _) = gorgeEx "./nim204" + assert output == NimVersion diff --git a/tests/nimnimble/nim2.0.4/src/nim204.nim b/tests/nimnimble/nim2.0.4/src/nim204.nim index b7a248036..8f7d9e315 100644 --- a/tests/nimnimble/nim2.0.4/src/nim204.nim +++ b/tests/nimnimble/nim2.0.4/src/nim204.nim @@ -5,3 +5,6 @@ proc add*(x, y: int): int = ## Adds two numbers together. return x + y + + +echo NimVersion \ No newline at end of file diff --git a/tests/nimnimble/nimdevel/nimdevel.nimble b/tests/nimnimble/nimdevel/nimdevel.nimble index 93bf2fa8b..aacc9f07a 100644 --- a/tests/nimnimble/nimdevel/nimdevel.nimble +++ b/tests/nimnimble/nimdevel/nimdevel.nimble @@ -5,8 +5,13 @@ author = "jmgomez" description = "A new awesome nimble package" license = "MIT" srcDir = "src" +bin = @["nimdevel"] # Dependencies requires "nim#devel" + +after build: + let (output, _) = gorgeEx "./nimdevel" + assert output == NimVersion \ No newline at end of file diff --git a/tests/nimnimble/nimdevel/src/nimdevel.nim b/tests/nimnimble/nimdevel/src/nimdevel.nim index b7a248036..3edc8eeca 100644 --- a/tests/nimnimble/nimdevel/src/nimdevel.nim +++ b/tests/nimnimble/nimdevel/src/nimdevel.nim @@ -5,3 +5,5 @@ proc add*(x, y: int): int = ## Adds two numbers together. return x + y + +echo NimVersion \ No newline at end of file diff --git a/tests/tniminstall.nim b/tests/tniminstall.nim index eb89bf5cc..a4d5c3a57 100644 --- a/tests/tniminstall.nim +++ b/tests/tniminstall.nim @@ -8,7 +8,6 @@ from nimblepkg/common import cd proc isNimPkgVer(folder: string, ver: string): bool = let name = folder.split("-") result = name.len == 3 and name[1].contains(ver) - echo "Checking ", folder, " for ", ver, " result: ", result if ver == "devel": #We know devel is bigger than 2.1 and it should be an odd number (notice what we test here is actually the #) var major, minor, patch: int @@ -26,7 +25,7 @@ suite "Nim install": cd nimVerDir: let nimVer = nimVerDir.replace("nim", "") echo "Checking version ", nimVer - let (_, exitCode) = execNimble("install", "-l") + let (_, exitCode) = execNimble("build", "-l") let pkgPath = getCurrentDir() / "nimbledeps" / "pkgs2" check exitCode == QuitSuccess check walkDir(pkgPath).toSeq.anyIt(it[1].isNimPkgVer(nimVer)) From cae23c50167f5bf620be024bac93a1023e6d2b15 Mon Sep 17 00:00:00 2001 From: jmgomez Date: Fri, 12 Jul 2024 13:58:27 +0100 Subject: [PATCH 3/6] fixes ci win --- tests/nimnimble/nim1.6.20/nim1620.nimble | 2 +- tests/nimnimble/nim2.0.4/nim204.nimble | 2 +- tests/nimnimble/nimdevel/nimdevel.nimble | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/nimnimble/nim1.6.20/nim1620.nimble b/tests/nimnimble/nim1.6.20/nim1620.nimble index 2386facd6..d5947eca1 100644 --- a/tests/nimnimble/nim1.6.20/nim1620.nimble +++ b/tests/nimnimble/nim1.6.20/nim1620.nimble @@ -13,4 +13,4 @@ requires "nim == 1.6.20" after build: let (output, _) = gorgeEx "./nim1620" - assert output == NimVersion \ No newline at end of file + assert output.strip == NimVersion \ No newline at end of file diff --git a/tests/nimnimble/nim2.0.4/nim204.nimble b/tests/nimnimble/nim2.0.4/nim204.nimble index 589fbdf65..1b2362fab 100644 --- a/tests/nimnimble/nim2.0.4/nim204.nimble +++ b/tests/nimnimble/nim2.0.4/nim204.nimble @@ -12,4 +12,4 @@ requires "nim == 2.0.4" after build: let (output, _) = gorgeEx "./nim204" - assert output == NimVersion + assert output.strip == NimVersion diff --git a/tests/nimnimble/nimdevel/nimdevel.nimble b/tests/nimnimble/nimdevel/nimdevel.nimble index aacc9f07a..136a5791d 100644 --- a/tests/nimnimble/nimdevel/nimdevel.nimble +++ b/tests/nimnimble/nimdevel/nimdevel.nimble @@ -14,4 +14,4 @@ requires "nim#devel" after build: let (output, _) = gorgeEx "./nimdevel" - assert output == NimVersion \ No newline at end of file + assert output.strip == NimVersion \ No newline at end of file From c82761a371db9bd80bd8f8fb17aa9bdee41d765c Mon Sep 17 00:00:00 2001 From: jmgomez Date: Fri, 19 Jul 2024 10:09:25 +0100 Subject: [PATCH 4/6] updates nim 2.0.4 constraint so it fails with csources --- tests/nimnimble/nim2.0.4/nim204.nimble | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/nimnimble/nim2.0.4/nim204.nimble b/tests/nimnimble/nim2.0.4/nim204.nimble index 1b2362fab..38876f7f5 100644 --- a/tests/nimnimble/nim2.0.4/nim204.nimble +++ b/tests/nimnimble/nim2.0.4/nim204.nimble @@ -8,7 +8,7 @@ bin = @["nim204"] # Dependencies -requires "nim == 2.0.4" +requires "nim >= 2.0.4 & < 2.1" after build: let (output, _) = gorgeEx "./nim204" From 963a32baae063a3637b7cc9ae6cd7f5e13e5d55c Mon Sep 17 00:00:00 2001 From: jmgomez Date: Fri, 19 Jul 2024 10:42:47 +0100 Subject: [PATCH 5/6] adds nim 2.0.10 which is the one that fails with csources --- tests/nimnimble/nim2.0.10/nim2010.nimble | 15 +++++++++++++++ tests/nimnimble/nim2.0.10/src/nim2010.nim | 10 ++++++++++ .../nimnimble/nim2.0.10/src/nim2010/submodule.nim | 12 ++++++++++++ tests/nimnimble/nim2.0.10/tests/test1.nim | 12 ++++++++++++ tests/nimnimble/nim2.0.4/nim204.nimble | 2 +- tests/tniminstall.nim | 2 +- 6 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 tests/nimnimble/nim2.0.10/nim2010.nimble create mode 100644 tests/nimnimble/nim2.0.10/src/nim2010.nim create mode 100644 tests/nimnimble/nim2.0.10/src/nim2010/submodule.nim create mode 100644 tests/nimnimble/nim2.0.10/tests/test1.nim diff --git a/tests/nimnimble/nim2.0.10/nim2010.nimble b/tests/nimnimble/nim2.0.10/nim2010.nimble new file mode 100644 index 000000000..0c9597164 --- /dev/null +++ b/tests/nimnimble/nim2.0.10/nim2010.nimble @@ -0,0 +1,15 @@ +# Package +version = "0.1.0" +author = "jmgomez" +description = "A new awesome nimble package" +license = "MIT" +srcDir = "src" +bin = @["nim2010"] + +# Dependencies + +requires "nim == 2.0.10" + +after build: + let (output, _) = gorgeEx "./nim2010" + assert output.strip == NimVersion diff --git a/tests/nimnimble/nim2.0.10/src/nim2010.nim b/tests/nimnimble/nim2.0.10/src/nim2010.nim new file mode 100644 index 000000000..8f7d9e315 --- /dev/null +++ b/tests/nimnimble/nim2.0.10/src/nim2010.nim @@ -0,0 +1,10 @@ +# This is just an example to get you started. A typical library package +# exports the main API in this file. Note that you cannot rename this file +# but you can remove it if you wish. + +proc add*(x, y: int): int = + ## Adds two numbers together. + return x + y + + +echo NimVersion \ No newline at end of file diff --git a/tests/nimnimble/nim2.0.10/src/nim2010/submodule.nim b/tests/nimnimble/nim2.0.10/src/nim2010/submodule.nim new file mode 100644 index 000000000..6c764a17e --- /dev/null +++ b/tests/nimnimble/nim2.0.10/src/nim2010/submodule.nim @@ -0,0 +1,12 @@ +# This is just an example to get you started. Users of your library will +# import this file by writing ``import nim204/submodule``. Feel free to rename or +# remove this file altogether. You may create additional modules alongside +# this file as required. + +type + Submodule* = object + name*: string + +proc initSubmodule*(): Submodule = + ## Initialises a new ``Submodule`` object. + Submodule(name: "Anonymous") diff --git a/tests/nimnimble/nim2.0.10/tests/test1.nim b/tests/nimnimble/nim2.0.10/tests/test1.nim new file mode 100644 index 000000000..c36a72c73 --- /dev/null +++ b/tests/nimnimble/nim2.0.10/tests/test1.nim @@ -0,0 +1,12 @@ +# This is just an example to get you started. You may wish to put all of your +# tests into a single file, or separate them into multiple `test1`, `test2` +# etc. files (better names are recommended, just make sure the name starts with +# the letter 't'). +# +# To run these tests, simply execute `nimble test`. + +import unittest + +import nim204 +test "can add": + check add(5, 5) == 10 diff --git a/tests/nimnimble/nim2.0.4/nim204.nimble b/tests/nimnimble/nim2.0.4/nim204.nimble index 38876f7f5..1b2362fab 100644 --- a/tests/nimnimble/nim2.0.4/nim204.nimble +++ b/tests/nimnimble/nim2.0.4/nim204.nimble @@ -8,7 +8,7 @@ bin = @["nim204"] # Dependencies -requires "nim >= 2.0.4 & < 2.1" +requires "nim == 2.0.4" after build: let (output, _) = gorgeEx "./nim204" diff --git a/tests/tniminstall.nim b/tests/tniminstall.nim index a4d5c3a57..00e742ee6 100644 --- a/tests/tniminstall.nim +++ b/tests/tniminstall.nim @@ -21,7 +21,7 @@ proc isNimPkgVer(folder: string, ver: string): bool = suite "Nim install": test "Should be able to install different Nim versions": cd "nimnimble": - for nimVerDir in ["nim1.6.20", "nim2.0.4", "nimdevel"]: + for nimVerDir in ["nim1.6.20", "nim2.0.4", "nim2.0.10", "nimdevel"]: cd nimVerDir: let nimVer = nimVerDir.replace("nim", "") echo "Checking version ", nimVer From 2523af26768dd363a64aceb2f2fb6b116b2bdc85 Mon Sep 17 00:00:00 2001 From: jmgomez Date: Fri, 19 Jul 2024 11:38:11 +0100 Subject: [PATCH 6/6] removes 2.0.10 check as the version doesnt exist yet and the tag was introduced by mistake --- tests/tniminstall.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tniminstall.nim b/tests/tniminstall.nim index 00e742ee6..a4d5c3a57 100644 --- a/tests/tniminstall.nim +++ b/tests/tniminstall.nim @@ -21,7 +21,7 @@ proc isNimPkgVer(folder: string, ver: string): bool = suite "Nim install": test "Should be able to install different Nim versions": cd "nimnimble": - for nimVerDir in ["nim1.6.20", "nim2.0.4", "nim2.0.10", "nimdevel"]: + for nimVerDir in ["nim1.6.20", "nim2.0.4", "nimdevel"]: cd nimVerDir: let nimVer = nimVerDir.replace("nim", "") echo "Checking version ", nimVer