On Thu, Mar 02, 2017 at 12:46:58AM +0100, Juan Francisco Cantero Hurtado wrote: > On Wed, Mar 01, 2017 at 11:36:52PM +0100, Juan Francisco Cantero Hurtado > wrote: > > On Wed, Mar 01, 2017 at 11:09:03PM +0100, Christian Weisgerber wrote: > > > Juan Francisco Cantero Hurtado: > > > > > > > They have a simple option to change the compilers but we need a variable > > > > with the realname of the compiler, i.e. clang or gcc. > > > > > > > > You can use "nim c -cc:clang" or "nim c -cc:gcc" (the default) or "nim c > > > > -cc:egcc". All of them are the name of the profile, not the compiler > > > > executable. > > > > > > > > Here is the patch. It includes some adittional changes. If someone has > > > > an better idea for the conditional... I'm listening :) > > > > > > CLANG_ARCHS was added incompletely, so you need arch-defines.mk > > > r1.32 for that: > > > > > > .include <bsd.port.arch.mk> > > > > > > # CC is always "cc". We need the real name. > > > .if ${PROPERTIES:Mclang} > > > CC = clang > > > .else > > > CC = gcc > > > .endif > > > > > > BTW, I think using CC for a variable with different semantics is a > > > bad idea. Pick a different name, please. > > > > Thanks. How about "COMPILER" or "C_COMP"? > > I changed the variable to NIM_CC. OK?
And now with "elif" -> "else" fixed. Index: Makefile =================================================================== RCS file: /cvs/ports/lang/nim/Makefile,v retrieving revision 1.6 diff -u -p -r1.6 Makefile --- Makefile 9 Jan 2017 10:32:33 -0000 1.6 +++ Makefile 1 Mar 2017 23:41:07 -0000 @@ -5,6 +5,7 @@ ONLY_FOR_ARCHS = i386 amd64 COMMENT = statically typed, imperative programming language VERSION = 0.16.0 +REVISION = 0 DISTNAME = nim-${VERSION} EXTRACT_SUFX = .tar.xz @@ -19,23 +20,28 @@ PERMIT_PACKAGE_CDROM = Yes WANTLIB = c m +SUBST_VARS += NIM_CC + post-patch: mkdir -p ${WRKSRC}/nimcache-port mkdir -p ${WRKSRC}/nimcache-port-test perl -i -pe "s#NIM_PORT_PATH#${PATH}#" ${WRKSRC}/koch.nim perl -i -pe "s#NIM_PORT_CACHE#${WRKSRC}/nimcache-port-test#" \ ${WRKSRC}/koch.nim + ${SUBST_CMD} ${WRKSRC}/koch.nim ${WRKSRC}/tests/testament/tester.nim \ + ${WRKSRC}/config/nim.cfg do-build: - cd ${WRKSRC} && ${SETENV} CC="${CC}" LINKER="${CC}" \ + cd ${WRKSRC} && ${SETENV} CC="${NIM_CC}" LINKER="${NIM_CC}" \ CFLAGS="${CFLAGS}" sh build.sh # slow machines can get a head of themselves and fail to link - cd ${WRKSRC} && bin/nim c -d:release --parallelBuild:1 \ - --nimcache:"${WRKSRC}/nimcache-port" --listFullPaths \ - --listCmd --putenv:"PATH=${PATH}" koch - cd ${WRKSRC} && ./koch boot -d:release --parallelBuild:1 \ - --nimcache:"${WRKSRC}/nimcache-port" --listFullPaths \ - --listCmd --putenv:"PATH=${PATH}" + cd ${WRKSRC} && bin/nim c -d:release --cc:${NIM_CC} --parallelBuild:1 \ + --nimcache:"${WRKSRC}/nimcache-port" --listFullPaths --listCmd \ + --putenv:"PATH=${PATH} CC=${NIM_CC} LINKER=${NIM_CC}" \ + koch + cd ${WRKSRC} && ./koch boot -d:release --cc:${NIM_CC} --parallelBuild:1 \ + --nimcache:"${WRKSRC}/nimcache-port" --listFullPaths --listCmd \ + --putenv:"PATH=${PATH} CC=${NIM_CC} LINKER=${NIM_CC}" do-install: ${INSTALL_PROGRAM_DIR} ${PREFIX}/bin @@ -49,9 +55,17 @@ do-install: ${INSTALL_DATA} ${WRKSRC}/config/*.cfg ${PREFIX}/share/examples/nim do-test: - cd ${WRKSRC} && ${SETENV} ./koch test all -d:release \ - --parallelBuild:1 --listFullPaths --listCmd \ - --nimcache:"${WRKSRC}/nimcache-port-test" \ - --putenv:"PATH=${PATH}" + cd ${WRKSRC} && ${SETENV} ./koch test all -d:release --threads:on \ + --cc:${NIM_CC} --parallelBuild:1 --listFullPaths --listCmd \ + --passL:"-pthread -Wl,-rpath=.:/usr/local/lib:${WRKSRC}/nimcache-port-test/" \ + --putenv:"PATH=${PATH} CC=${NIM_CC} LINKER=${NIM_CC}" + +.include <bsd.port.arch.mk> + +.if ${PROPERTIES:Mclang} +NIM_CC = clang +.else +NIM_CC = gcc +.endif .include <bsd.port.mk> Index: patches/patch-config_nim_cfg =================================================================== RCS file: /cvs/ports/lang/nim/patches/patch-config_nim_cfg,v retrieving revision 1.3 diff -u -p -r1.3 patch-config_nim_cfg --- patches/patch-config_nim_cfg 9 Jan 2017 10:32:33 -0000 1.3 +++ patches/patch-config_nim_cfg 1 Mar 2017 23:41:07 -0000 @@ -1,6 +1,15 @@ $OpenBSD: patch-config_nim_cfg,v 1.3 2017/01/09 10:32:33 juanfra Exp $ --- config/nim.cfg.orig Sun Jan 8 21:33:42 2017 -+++ config/nim.cfg Mon Jan 9 02:28:32 2017 ++++ config/nim.cfg Wed Mar 1 00:00:37 2017 +@@ -8,7 +8,7 @@ + # Environment variables can be accessed like so: + # gcc.path %= "$CC_PATH" + +-cc = gcc ++cc = ${NIM_CC} + + # additional options always passed to the compiler: + --parallel_build: "0" # 0 to auto-detect number of processors @@ -76,7 +76,7 @@ path="$lib/pure" @end @if bsd or haiku: @@ -19,7 +28,16 @@ $OpenBSD: patch-config_nim_cfg,v 1.3 201 @end # Configuration for Objective-C compiler: -@@ -155,18 +157,23 @@ clang.objc.options.linker = "-lobjc -lgnustep-base" +@@ -135,6 +137,8 @@ clang.objc.options.linker = "-lobjc -lgnustep-base" + @if freebsd or openbsd or netbsd: + gcc.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" + gcc.cpp.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" ++ egcc.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" ++ egcc.cpp.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" + llvm_gcc.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" + llvm_gcc.cpp.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" + clang.options.linker = "-Wl,-rpath=.:/usr/local/lib:/usr/pkg/lib:/usr/X11R6/lib" +@@ -155,18 +159,23 @@ clang.objc.options.linker = "-lobjc -lgnustep-base" gcc.options.linker %= "-L $WIND_BASE/target/lib/usr/lib/ppc/PPC32/common -mrtp -fno-strict-aliasing -D_C99 -D_HAS_C9X -std=c99 -fasm -Wall -Wno-write-strings" @end @@ -45,7 +63,7 @@ $OpenBSD: patch-config_nim_cfg,v 1.3 201 # Configuration for the LLVM GCC compiler: llvm_gcc.options.debug = "-g" llvm_gcc.options.always = "-w" -@@ -176,7 +183,7 @@ llvm_gcc.options.size = "-Os" +@@ -176,7 +185,7 @@ llvm_gcc.options.size = "-Os" # Configuration for the LLVM CLang compiler: clang.options.debug = "-g" clang.options.always = "-w" Index: patches/patch-koch_nim =================================================================== RCS file: /cvs/ports/lang/nim/patches/patch-koch_nim,v retrieving revision 1.2 diff -u -p -r1.2 patch-koch_nim --- patches/patch-koch_nim 9 Jan 2017 10:32:33 -0000 1.2 +++ patches/patch-koch_nim 1 Mar 2017 23:41:07 -0000 @@ -1,12 +1,19 @@ $OpenBSD: patch-koch_nim,v 1.2 2017/01/09 10:32:33 juanfra Exp $ --- koch.nim.orig Sun Jan 8 21:33:42 2017 -+++ koch.nim Mon Jan 9 03:15:50 2017 -@@ -393,7 +393,7 @@ proc tests(args: string) = - nimexec "cc --taintMode:on tests/testament/tester" ++++ koch.nim Tue Feb 28 23:20:42 2017 +@@ -390,12 +390,12 @@ template `|`(a, b): string = (if a.len > 0: a else: b) + proc tests(args: string) = + # we compile the tester with taintMode:on to have a basic + # taint mode test :-) +- nimexec "cc --taintMode:on tests/testament/tester" ++ nimexec "cc --taintMode:on --cc:${NIM_CC} tests/testament/tester" # Since tests take a long time (on my machine), and we want to defy Murhpys # law - lets make sure the compiler really is freshly compiled! - nimexec "c --lib:lib -d:release --opt:speed compiler/nim.nim" -+ nimexec "c --lib:lib -d:release --opt:speed --listFullPaths --listCmd --putenv:PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:: --nimcache:/usr/write-ports/pobj/nim-0.16.0/nim-0.16.0/nimcache-port-test compiler/nim.nim" ++ nimexec "c --lib:lib -d:release --cc:${NIM_CC} --opt:speed --listFullPaths --listCmd --putenv:PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:: --nimcache:/usr/write-ports/pobj/nim-0.16.0/nim-0.16.0/nimcache-port-test compiler/nim.nim" let tester = quoteShell(getCurrentDir() / "tests/testament/tester".exe) - let success = tryExec tester & " " & (args|"all") +- let success = tryExec tester & " " & (args|"all") ++ let success = tryExec tester & " --targets:c " & " " & (args|"all") if not existsEnv("TRAVIS") and not existsEnv("APPVEYOR"): + exec tester & " html" + if not success: Index: patches/patch-tests_testament_tester_nim =================================================================== RCS file: /cvs/ports/lang/nim/patches/patch-tests_testament_tester_nim,v retrieving revision 1.3 diff -u -p -r1.3 patch-tests_testament_tester_nim --- patches/patch-tests_testament_tester_nim 9 Jan 2017 10:32:33 -0000 1.3 +++ patches/patch-tests_testament_tester_nim 1 Mar 2017 23:41:07 -0000 @@ -8,7 +8,7 @@ FAILURE Error 1 in . (Makefile:42 'do-test')" --- tests/testament/tester.nim.orig Sun Jan 8 21:33:43 2017 -+++ tests/testament/tester.nim Mon Jan 9 02:33:36 2017 ++++ tests/testament/tester.nim Tue Feb 28 23:20:42 2017 @@ -12,7 +12,7 @@ import parseutils, strutils, pegs, os, osproc, streams, parsecfg, json, @@ -18,6 +18,15 @@ Error 1 in . (Makefile:42 'do-test')" const resultsFile = "testresults.html" +@@ -118,7 +118,7 @@ proc callCCompiler(cmdTemplate, filename, options: str + target: TTarget): TSpec = + let c = parseCmdLine(cmdTemplate % ["target", targetToCmd[target], + "options", options, "file", filename.quoteShell]) +- var p = startProcess(command="gcc", args=c[5.. ^1], ++ var p = startProcess(command="${NIM_CC}", args=c[5.. ^1], + options={poStdErrToStdOut, poUsePath}) + let outp = p.outputStream + var x = newStringOfCap(120) @@ -326,7 +326,7 @@ proc testSpec(r: var TResults, test: TTest) = r.addResult(test, expected.outp, "executable not found", reExeNotFound) return