diff --git a/README.md b/README.md index 9a8118b..12b9a43 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,11 @@ some of them are for Arch Linux, some of them are for MSYS2, some of them work with both. heads up: these are likely to be out of date. -### mingw-w64-nim-git +### mingw-w64-nim -patches nim to compile with MSYS2, and use MSYS2 paths/DLLs. -a few things aren't working yet, but the core functionality is there. +patches nim 1.0.0 to compile with MSYS2, and use MSYS2 paths/DLLs. +a few things might not work, but the core functionality +(including nimble) is working. ### mingw-w64-tbox diff --git a/mingw-w64-nim-git/.gitignore b/mingw-w64-nim-git/.gitignore deleted file mode 100644 index 878d00d..0000000 --- a/mingw-w64-nim-git/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -Nim -nimble -nimsuggest -csources diff --git a/mingw-w64-nim-git/0002-Always-look-in-unix-paths.patch b/mingw-w64-nim-git/0002-Always-look-in-unix-paths.patch deleted file mode 100644 index d9ad604..0000000 --- a/mingw-w64-nim-git/0002-Always-look-in-unix-paths.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/compiler/nimconf.nim b/compiler/nimconf.nim -index 808159b..12e0b49 100644 ---- a/compiler/nimconf.nim -+++ b/compiler/nimconf.nim -@@ -221,7 +221,7 @@ proc getSystemConfigPath(filename: string): string = - # the UNIX way) - let p = getPrefixDir() - result = joinPath([p, "config", filename]) -- when defined(unix): -+ when true: - if not existsFile(result): result = joinPath([p, "etc", filename]) - if not existsFile(result): result = "/etc/" & filename - diff --git a/mingw-w64-nim-git/0003-Check-lib-nim-subdirectory.patch b/mingw-w64-nim-git/0003-Check-lib-nim-subdirectory.patch deleted file mode 100644 index 72ec204..0000000 --- a/mingw-w64-nim-git/0003-Check-lib-nim-subdirectory.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/compiler/options.nim b/compiler/options.nim -index 6372cdd..1354da0 100644 ---- a/compiler/options.nim -+++ b/compiler/options.nim -@@ -229,6 +229,10 @@ proc setDefaultLibpath*() = - else: libpath = joinPath(prefix, "lib") - else: libpath = joinPath(prefix, "lib") - -+ if not fileExists(libpath / "system.nim") and -+ fileExists(libpath / "nim" / "system.nim"): -+ libpath = libpath / "nim" -+ - # Special rule to support other tools (nimble) which import the compiler - # modules and make use of them. - let realNimPath = findExe("nim") diff --git a/mingw-w64-nim-git/0004-Use-nimOldDlls.patch b/mingw-w64-nim-git/0004-Use-nimOldDlls.patch deleted file mode 100644 index 981f612..0000000 --- a/mingw-w64-nim-git/0004-Use-nimOldDlls.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff --git a/lib/wrappers/openssl.nim b/lib/wrappers/openssl.nim -index 5521476..2453c16 100644 ---- a/lib/wrappers/openssl.nim -+++ b/lib/wrappers/openssl.nim -@@ -14,7 +14,7 @@ - const useWinVersion = defined(Windows) or defined(nimdoc) - - when useWinVersion: -- when not defined(nimOldDlls) and defined(cpu64): -+ when not true and defined(cpu64): - const - DLLSSLName = "(ssleay64|libssl64).dll" - DLLUtilName = "libeay64.dll" -diff --git a/lib/wrappers/pcre.nim b/lib/wrappers/pcre.nim -index 6c7088b..8b0e7f6 100644 ---- a/lib/wrappers/pcre.nim -+++ b/lib/wrappers/pcre.nim -@@ -310,7 +310,7 @@ type - - when not defined(usePcreHeader): - when hostOS == "windows": -- when defined(nimOldDlls): -+ when true: - const pcreDll = "pcre.dll" - elif defined(cpu64): - const pcreDll = "pcre64.dll" -diff --git a/lib/wrappers/sqlite3.nim b/lib/wrappers/sqlite3.nim -index a129458..5e84a9b 100644 ---- a/lib/wrappers/sqlite3.nim -+++ b/lib/wrappers/sqlite3.nim -@@ -9,7 +9,7 @@ - - {.deadCodeElim: on.} - when defined(windows): -- when defined(nimOldDlls): -+ when true: - const Lib = "sqlite3.dll" - elif defined(cpu64): - const Lib = "sqlite3_64.dll" diff --git a/mingw-w64-nim-git/PKGBUILD b/mingw-w64-nim-git/PKGBUILD deleted file mode 100644 index a6deb1a..0000000 --- a/mingw-w64-nim-git/PKGBUILD +++ /dev/null @@ -1,131 +0,0 @@ -pkgbase=mingw-w64-nim-git -pkgname=("${MINGW_PACKAGE_PREFIX}-nim-git") -pkgver=20180209 -pkgrel=1 -arch=('i686' 'x86_64') -groups=('nim') -depends=("${MINGW_PACKAGE_PREFIX}-openssl") -makedepends=('git') -source=(git+https://github.com/nim-lang/Nim - git+https://github.com/nim-lang/csources - git+https://github.com/nim-lang/nimble - git+https://github.com/nim-lang/nimsuggest - "0001-Use-unixy-filenames-even-on-Windows.patch" - "0002-Always-look-in-unix-paths.patch" - "0003-Check-lib-nim-subdirectory.patch" - "0004-Use-nimOldDlls.patch") -sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' - '3010acbe7769ea214dd51f5889e3a26b44925001905deb04b060beaede2578f4' - 'fac04c8caa29a545275cd19a0fac597649c8ad9e7556fe65802e28c88c8905ac' - '3cfe161bd1e19f621e2ff824a59362e4f3d4d2a4d27a2653bae1d83ba23ab9b1' - '5e97d3ad36f8c4fd29ba69f4a8c613d9a57006da35109c616f4a288f5955a276') - -pkgver() { - cd "$srcdir/Nim" - git log -1 --format="%cd" --date=short | sed "s|-||g" -} - -prepare() { - cd "$srcdir/Nim" - - msg2 'Cloning csources...' - [ -d csources ] && rm -rf csources - git clone --local "$srcdir/csources" - - patch -p1 -i "${srcdir}/0001-Use-unixy-filenames-even-on-Windows.patch" - patch -p1 -i "${srcdir}/0002-Always-look-in-unix-paths.patch" - patch -p1 -i "${srcdir}/0003-Check-lib-nim-subdirectory.patch" - patch -p1 -i "${srcdir}/0004-Use-nimOldDlls.patch" -} - -build() { - cd "$srcdir/Nim" - - msg2 'Building csources...' - pushd csources - sh build.sh - popd - - msg2 'Building Nim...' - ./bin/nim c -d:release koch - ./koch boot -d:release -d:nativeStacktrace -d:useGnuReadline - - msg2 'Building Nimble...' - ./koch nimble - - msg2 'Building nimgrep and nimsuggest...' - ./koch tools - - msg2 'Building libnimrtl...' - pushd lib - ../bin/nim c --app:lib -d:createNimRtl -d:release nimrtl.nim - popd -} - -package() { - pkgdesc="Compiled, garbage-collected systems programming language which has an excellent productivity/performance ratio" - url="https://github.com/nim-lang/Nim" - license=('MIT') - options=('!emptydirs') - provides=('nim' 'nimble') - conflicts=('nim' 'nimble') - - cd "$srcdir/Nim" - - msg2 'Installing Nim license...' - install -Dm 644 "copying.txt" -t "$pkgdir$MINGW_PREFIX/share/licenses/nim" - - msg2 'Installing Nim documentation...' - install -dm 755 "$pkgdir$MINGW_PREFIX/share/doc/nim" - cp -dpr --no-preserve=ownership examples web doc/* "$pkgdir$MINGW_PREFIX/share/doc/nim" - - msg2 'Installing Nim...' - ./koch install "$pkgdir" - install -Dm 755 bin/{nim,nimgrep} -t "$pkgdir$MINGW_PREFIX/bin" - - cd "$pkgdir/nim" - install -dm 755 "$pkgdir$MINGW_PREFIX/etc" "$pkgdir$MINGW_PREFIX/lib/nim" - find lib -mindepth 1 -maxdepth 1 -exec \ - cp -dpr --no-preserve=ownership '{}' "$pkgdir$MINGW_PREFIX/lib/nim" \; - find config -mindepth 1 -maxdepth 1 -exec \ - cp -dpr --no-preserve=ownership '{}' "$pkgdir$MINGW_PREFIX/etc/" \; - cp -dpr --no-preserve=ownership "$srcdir/Nim/lib/packages" \ - "$pkgdir$MINGW_PREFIX/lib/nim" - - # https://bugs.archlinux.org/task/50252 - msg2 'Fixing unusual placement of header files...' - install -dm 755 "$pkgdir$MINGW_PREFIX/include" - for _header in cycle nimbase; do - cp "$pkgdir$MINGW_PREFIX/lib/nim/${_header}.h" "$pkgdir$MINGW_PREFIX/include/${_header}.h" - done - - msg2 'Fixing unusual placement of shared object files...' - cp "$pkgdir$MINGW_PREFIX/lib/nim/libnimrtl.dll" "$pkgdir$MINGW_PREFIX/lib/libnimrtl.dll" - - msg2 'Cleaning up pkgdir...' - find "$pkgdir" -type d -name .git -exec rm -r '{}' + - find "$pkgdir" -type f -name .gitignore -exec rm -r '{}' + - rm -rf "$pkgdir/nim" - - # nimble - - cd "$srcdir/nimble" - - msg2 'Installing Nimble license...' - install -Dm 644 license.txt -t "$pkgdir$MINGW_PREFIX/share/licenses/nimble" - - msg2 'Installing Nimble documentation...' - install -Dm 644 *.markdown -t "$pkgdir$MINGW_PREFIX/share/doc/nimble" - - msg2 'Installing Nimble...' - install -Dm 755 "$srcdir/Nim/bin/nimble" -t "$pkgdir$MINGW_PREFIX/bin" - - # Nimble looks for nimscriptapi.nim in /usr/bin/nimblepkg/, of all places. - install -dm 755 "$pkgdir$MINGW_PREFIX/share/nimble" - cp -dpr --no-preserve=ownership src/nimblepkg "$pkgdir$MINGW_PREFIX/share/nimble" - cp -dpr --no-preserve=ownership "$pkgdir$MINGW_PREFIX/share/nimble" "$pkgdir$MINGW_PREFIX/bin/nimblepkg" - - msg2 'Installing Nimble bash completion...' - install -Dm 644 nimble.bash-completion \ - "$pkgdir$MINGW_PREFIX/share/bash-completion/completions/nimble" -} diff --git a/mingw-w64-nim-git/0001-Use-unixy-filenames-even-on-Windows.patch b/mingw-w64-nim/0001-Use-unixy-filenames-even-on-Windows.patch similarity index 100% rename from mingw-w64-nim-git/0001-Use-unixy-filenames-even-on-Windows.patch rename to mingw-w64-nim/0001-Use-unixy-filenames-even-on-Windows.patch diff --git a/mingw-w64-nim/0002-Always-look-in-unix-paths.patch b/mingw-w64-nim/0002-Always-look-in-unix-paths.patch new file mode 100644 index 0000000..dc58526 --- /dev/null +++ b/mingw-w64-nim/0002-Always-look-in-unix-paths.patch @@ -0,0 +1,11 @@ +--- a/compiler/nimconf.nim ++++ b/compiler/nimconf.nim +@@ -227,7 +227,7 @@ + # the UNIX way) + let p = getPrefixDir(conf) + result = p / RelativeDir"config" / filename +- when defined(unix): ++ when true: + if not fileExists(result): result = p / RelativeDir"etc/nim" / filename + if not fileExists(result): result = AbsoluteDir"/etc/nim" / filename + diff --git a/mingw-w64-nim/0003-Check-lib-nim-subdirectory.patch b/mingw-w64-nim/0003-Check-lib-nim-subdirectory.patch new file mode 100644 index 0000000..daa3e4d --- /dev/null +++ b/mingw-w64-nim/0003-Check-lib-nim-subdirectory.patch @@ -0,0 +1,13 @@ +--- a/compiler/options.nim ++++ b/compiler/options.nim +@@ -507,6 +507,10 @@ + else: + conf.libpath = prefix / RelativeDir"lib" + ++ if not fileExists(conf.libpath.string / "system.nim") and ++ fileExists(conf.libpath.string / "nim" / "system.nim"): ++ conf.libpath = conf.libpath / RelativeDir"nim" ++ + # Special rule to support other tools (nimble) which import the compiler + # modules and make use of them. + let realNimPath = findExe("nim") diff --git a/mingw-w64-nim/0004-Use-mingw64-dlls.patch b/mingw-w64-nim/0004-Use-mingw64-dlls.patch new file mode 100644 index 0000000..c58987b --- /dev/null +++ b/mingw-w64-nim/0004-Use-mingw64-dlls.patch @@ -0,0 +1,43 @@ +--- a/lib/wrappers/openssl.nim ++++ b/lib/wrappers/openssl.nim +@@ -53,7 +53,7 @@ + from posix import SocketHandle + + elif useWinVersion: +- when not defined(nimOldDlls) and defined(cpu64): ++ when defined(cpu64): + const + DLLSSLName* = "(libssl-1_1-x64|ssleay64|libssl64).dll" + DLLUtilName* = "(libcrypto-1_1-x64|libeay64).dll" +--- a/lib/wrappers/pcre.nim ++++ b/lib/wrappers/pcre.nim +@@ -314,12 +314,7 @@ + + when not defined(usePcreHeader): + when hostOS == "windows": +- when defined(nimOldDlls): +- const pcreDll = "pcre.dll" +- elif defined(cpu64): +- const pcreDll = "pcre64.dll" +- else: +- const pcreDll = "pcre32.dll" ++ const pcreDll = "libpcre-1.dll" + elif hostOS == "macosx": + const pcreDll = "libpcre(.3|.1|).dylib" + else: +--- a/lib/wrappers/sqlite3.nim ++++ b/lib/wrappers/sqlite3.nim +@@ -13,12 +13,7 @@ + {.push styleChecks: off.} + + when defined(windows): +- when defined(nimOldDlls): +- const Lib = "sqlite3.dll" +- elif defined(cpu64): +- const Lib = "sqlite3_64.dll" +- else: +- const Lib = "sqlite3_32.dll" ++ const Lib = "libsqlite3-0.dll" + elif defined(macosx): + const + Lib = "libsqlite3(|.0).dylib" diff --git a/mingw-w64-nim/PKGBUILD b/mingw-w64-nim/PKGBUILD new file mode 100644 index 0000000..1565683 --- /dev/null +++ b/mingw-w64-nim/PKGBUILD @@ -0,0 +1,104 @@ +pkgbase=mingw-w64-nim +pkgname=("${MINGW_PACKAGE_PREFIX}-nim") +pkgdesc='Imperative, multi-paradigm, compiled programming language' +url='https://github.com/nim-lang/Nim' +license=('MIT') +options=('!emptydirs') +provides=('nim' 'nimble') +conflicts=('nim' 'nimble') +pkgver=1.0.0 +_csources=0.20.0 +_nimble=0.11.0 +pkgrel=1 +arch=('i686' 'x86_64') +depends=("${MINGW_PACKAGE_PREFIX}-openssl") +source=(nim-${pkgver}.tar.gz::https://github.com/nim-lang/Nim/archive/v${pkgver}.tar.gz + csources-${_csources}.tar.gz::https://github.com/nim-lang/csources/archive/v${_csources}.tar.gz + nimble-${_nimble}.tar.gz::https://github.com/nim-lang/nimble/archive/v${_nimble}.tar.gz + '0001-Use-unixy-filenames-even-on-Windows.patch' + '0002-Always-look-in-unix-paths.patch' + '0003-Check-lib-nim-subdirectory.patch' + '0004-Use-mingw64-dlls.patch') +sha256sums=('6d93d25da6b5ef4e0223acb1f1abadf06be1019a8137491ddc7c6fa030e638c3' + '5e6fd15d90df1a8cb7614c4ffc70aa8c4198cd854d7742016202b96dd0228d3c' + 'a31d06128f3d1014d68297aa5cd264023d202cae74746d78ba84e335af3399d2' + '3010acbe7769ea214dd51f5889e3a26b44925001905deb04b060beaede2578f4' + '1861121215c183de721cfed2ebbbcc9323a40a7cacb2389d89cc21339b5bf026' + '5011e96e3dd7e695ad8996b54e75612a892ed1d54d50506e733196a62bbaf10f' + 'b15c1ed3e8cb31d3b8eda925684abbc8a0e6883ea3e911f57cc8dd6003d12ce2') + +prepare() { + cd "${srcdir}/nim-${pkgver}" + + rm -rf csources nimble + mv ../csources-${_csources} csources + mv ../nimble-${_nimble} nimble + rm bin/empty.txt + + for nimcfg in {compiler,config}/nim.cfg; do + echo "gcc.options.always %= \"\${gcc.options.always} ${CFLAGS:-} ${CPPFLAGS}\"" >> "${nimcfg}" + echo "gcc.options.linker %= \"\${gcc.options.linker} ${LDFLAGS:-}\"" >> "${nimcfg}" + done + + patch -p1 -i "${srcdir}/0001-Use-unixy-filenames-even-on-Windows.patch" + patch -p1 -i "${srcdir}/0002-Always-look-in-unix-paths.patch" + patch -p1 -i "${srcdir}/0003-Check-lib-nim-subdirectory.patch" + patch -p1 -i "${srcdir}/0004-Use-nimOldDlls.patch" +} + +build() { + cd "${srcdir}/nim-${pkgver}" + + msg2 "Building nim" + (cd csources; sh build.sh) + + msg2 "Building koch" + ./bin/nim c -d:release koch + ./koch boot -d:release -d:nativeStacktrace -d:useGnuReadline + + msg2 "Building libs" + (cd lib; ../bin/nim c --app:lib -d:createNimRtl -d:release nimrtl.nim) + msg2 "Building tools" + (cd tools; ../bin/nim c -d:release nimgrep.nim) + msg2 "Building nimsuggest" + ./bin/nim c -d:release nimsuggest/nimsuggest.nim + + msg2 "Building Nimble" + (cd nimble; ../bin/nim c -d:release src/nimble) +} + +package() { + cd "${srcdir}/nim-${pkgver}" + export PATH="${srcdir}/nim-${pkgver}/bin:${PATH}" + + ./koch install "${pkgdir}" + + install -Dm 755 bin/nim -t "$pkgdir$MINGW_PREFIX/bin" + install -Dm 755 nimble/src/nimble -t "$pkgdir$MINGW_PREFIX/bin" + + install -d "${pkgdir}${MINGW_PREFIX}/lib" + cp -a lib "${pkgdir}${MINGW_PREFIX}/lib/nim" + cp -a compiler "${pkgdir}${MINGW_PREFIX}/lib/nim" + install -Dm 644 compiler.nimble "${pkgdir}${MINGW_PREFIX}/lib/nim/compiler" + install -m 755 lib/libnimrtl.dll "${pkgdir}${MINGW_PREFIX}/lib/libnimrtl.dll" + + # Fix FS#48118, related to the doc2 command +# ln -s ${MINGW_PREFIX}/share/nim/doc "${pkgdir}${MINGW_PREFIX}/lib/nim/doc" + + install -Dm 644 config/* -t "${pkgdir}${MINGW_PREFIX}/etc/nim" + install -Dm 755 bin/* tools/nimgrep nimsuggest/nimsuggest -t "${pkgdir}${MINGW_PREFIX}/bin" + + # Fix FS#50252, unusual placement of header files + install -d "${pkgdir}${MINGW_PREFIX}/include" + cp -a "${pkgdir}${MINGW_PREFIX}/lib/nim/"*.h "${pkgdir}${MINGW_PREFIX}/include" + + install -d "${pkgdir}${MINGW_PREFIX}/share/nim/doc" + cp -a examples doc/* "${pkgdir}${MINGW_PREFIX}/share/nim/doc" + + install -Dm 644 copying.txt -t "${pkgdir}${MINGW_PREFIX}/share/licenses/${pkgname}" + rm -r "${pkgdir}/nim" + + # Nimble looks for nimscriptapi.nim in /usr/bin/nimblepkg/, of all places. + cp -r nimble/src/nimblepkg "${pkgdir}${MINGW_PREFIX}/share/nimble" + cp -r "${pkgdir}${MINGW_PREFIX}/share/nimble" "${pkgdir}${MINGW_PREFIX}/bin/nimblepkg" +}