summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/osinfo_posix.nim42
-rw-r--r--lib/pure/osinfo_win.nim390
-rwxr-xr-xlib/pure/strutils.nim3
-rwxr-xr-xtests/reject/spec.csv6
-rwxr-xr-xtests/tester.nim5
5 files changed, 437 insertions, 9 deletions
diff --git a/lib/pure/osinfo_posix.nim b/lib/pure/osinfo_posix.nim
new file mode 100644
index 000000000..bfbd55488
--- /dev/null
+++ b/lib/pure/osinfo_posix.nim
@@ -0,0 +1,42 @@
+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2010 Andreas Rumpf, Dominik Picheta
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+import posix, strutils, os
+
+proc getSystemVersion*(): string =
+  ## retrieves the system name ("Linux", "Mac OS X") & the system version.
+  ## The implementation uses ``posix.uname``.
+  var info: TUtsname
+  if uname(info) < 0'i32: OSError()
+  case $info.sysname
+  of "Linux":
+    result = "Linux " & $info.release & " " & $info.machine
+  of "Darwin":
+    result = "Mac OS X "
+    if "10" in $info.release:
+      result.add("v10.6 Snow Leopard")
+    elif "0" in $info.release:
+      result.add("Server 1.0 Hera")
+    elif "1.3" in $info.release:
+      result.add("v10.0 Cheetah")
+    elif "1.4" in $info.release:
+      result.add("v10.1 Puma")
+    elif "6" in $info.release:
+      result.add("v10.2 Jaguar")
+    elif "7" in $info.release:
+      result.add("v10.3 Panther")
+    elif "8" in $info.release:
+      result.add("v10.4 Tiger")
+    elif "9" in $info.release:
+      result.add("v10.5 Leopard")
+  else:
+    result = $info.sysname & " " & $info.release
+    
+when isMainModule:
+  echo(getSystemVersion())
\ No newline at end of file
diff --git a/lib/pure/osinfo_win.nim b/lib/pure/osinfo_win.nim
new file mode 100644
index 000000000..b547f73c4
--- /dev/null
+++ b/lib/pure/osinfo_win.nim
@@ -0,0 +1,390 @@
+#
+#
+#            Nimrod's Runtime Library
+#        (c) Copyright 2010 Dominik Picheta
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+import winlean
+
+const
+  INVALID_HANDLE_VALUE = int(- 1) # GetStockObject
+
+type
+  TMEMORYSTATUSEX {.final, pure.} = object
+    dwLength: int32
+    dwMemoryLoad: int32
+    ullTotalPhys: int64
+    ullAvailPhys: int64
+    ullTotalPageFile: int64
+    ullAvailPageFile: int64
+    ullTotalVirtual: int64
+    ullAvailVirtual: int64
+    ullAvailExtendedVirtual: int64
+    
+  SYSTEM_INFO {.final, pure.} = object
+    wProcessorArchitecture*: int16
+    wReserved*: int16
+    dwPageSize*: int32
+    lpMinimumApplicationAddress*: pointer
+    lpMaximumApplicationAddress*: pointer
+    dwActiveProcessorMask*: int32
+    dwNumberOfProcessors*: int32
+    dwProcessorType*: int32
+    dwAllocationGranularity*: int32
+    wProcessorLevel*: int16
+    wProcessorRevision*: int16
+
+  LPSYSTEM_INFO = ptr SYSTEM_INFO
+
+  TMemoryInfo* = object
+    MemoryLoad*: int ## occupied memory, in percent
+    TotalPhysMem*: int64 ## Total Physical memory, in bytes
+    AvailablePhysMem*: int64 ## Available physical memory, in bytes
+    TotalPageFile*: int64 ## The current committed memory limit 
+                          ## for the system or the current process, whichever is smaller, in bytes.
+    AvailablePageFile*: int64 ## The maximum amount of memory the current process can commit, in bytes.
+    TotalVirtualMem*: int64 ## Total virtual memory, in bytes
+    AvailableVirtualMem*: int64 ## Available virtual memory, in bytes
+    
+  TOSVERSIONINFOEX {.final, pure.} = object
+    dwOSVersionInfoSize: int32
+    dwMajorVersion: int32
+    dwMinorVersion: int32
+    dwBuildNumber: int32
+    dwPlatformId: int32
+    szCSDVersion: array[0..127, char]
+    wServicePackMajor: int16
+    wServicePackMinor: int16
+    wSuiteMask: int16
+    wProductType: int8
+    wReserved: char
+    
+  TVersionInfo* = object
+    majorVersion*: int
+    minorVersion*: int
+    buildNumber*: int
+    platformID*: int
+    SPVersion*: string ## Full Service pack version string
+    SPMajor*: int ## Major service pack version
+    SPMinor*: int ## Minor service pack version
+    SuiteMask*: int
+    ProductType*: int
+    
+  TPartitionInfo* = tuple[FreeSpace, TotalSpace: biggestInt]
+  
+# All Windows editions...
+const
+  # SuiteMask - VersionInfo.SuiteMask
+  VER_SUITE_BACKOFFICE* = 0x00000004
+  VER_SUITE_BLADE* = 0x00000400
+  VER_SUITE_COMPUTE_SERVER* = 0x00004000
+  VER_SUITE_DATACENTER* = 0x00000080
+  VER_SUITE_ENTERPRISE* = 0x00000002
+  VER_SUITE_EMBEDDEDNT* = 0x00000040
+  VER_SUITE_PERSONAL* = 0x00000200
+  VER_SUITE_SINGLEUSERTS* = 0x00000100
+  VER_SUITE_SMALLBUSINESS* = 0x00000001
+  VER_SUITE_SMALLBUSINESS_RESTRICTED* = 0x00000020
+  VER_SUITE_STORAGE_SERVER* = 0x00002000
+  VER_SUITE_TERMINAL* = 0x00000010
+  VER_SUITE_WH_SERVER* = 0x00008000
+
+  # ProductType - VersionInfo.ProductType
+  VER_NT_DOMAIN_CONTROLLER* = 0x0000002
+  VER_NT_SERVER* = 0x0000003
+  VER_NT_WORKSTATION* = 0x0000001
+  
+  VER_PLATFORM_WIN32_NT* = 2
+  
+  # Product Info - getProductInfo() - (Remove unused ones ?)
+  PRODUCT_BUSINESS* = 0x00000006
+  PRODUCT_BUSINESS_N* = 0x00000010
+  PRODUCT_CLUSTER_SERVER* = 0x00000012
+  PRODUCT_DATACENTER_SERVER* = 0x00000008
+  PRODUCT_DATACENTER_SERVER_CORE* = 0x0000000C
+  PRODUCT_DATACENTER_SERVER_CORE_V* = 0x00000027
+  PRODUCT_DATACENTER_SERVER_V* = 0x00000025
+  PRODUCT_ENTERPRISE* = 0x00000004
+  PRODUCT_ENTERPRISE_E* = 0x00000046
+  PRODUCT_ENTERPRISE_N* = 0x0000001B
+  PRODUCT_ENTERPRISE_SERVER* = 0x0000000A
+  PRODUCT_ENTERPRISE_SERVER_CORE* = 0x0000000E
+  PRODUCT_ENTERPRISE_SERVER_CORE_V* = 0x00000029
+  PRODUCT_ENTERPRISE_SERVER_IA64* = 0x0000000F
+  PRODUCT_ENTERPRISE_SERVER_V* = 0x00000026
+  PRODUCT_HOME_BASIC* = 0x00000002
+  PRODUCT_HOME_BASIC_E* = 0x00000043
+  PRODUCT_HOME_BASIC_N* = 0x00000005
+  PRODUCT_HOME_PREMIUM* = 0x00000003
+  PRODUCT_HOME_PREMIUM_E* = 0x00000044
+  PRODUCT_HOME_PREMIUM_N* = 0x0000001A
+  PRODUCT_HYPERV* = 0x0000002A
+  PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT* = 0x0000001E
+  PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING* = 0x00000020
+  PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY* = 0x0000001F
+  PRODUCT_PROFESSIONAL* = 0x00000030
+  PRODUCT_PROFESSIONAL_E* = 0x00000045
+  PRODUCT_PROFESSIONAL_N* = 0x00000031
+  PRODUCT_SERVER_FOR_SMALLBUSINESS* = 0x00000018
+  PRODUCT_SERVER_FOR_SMALLBUSINESS_V* = 0x00000023
+  PRODUCT_SERVER_FOUNDATION* = 0x00000021
+  PRODUCT_SMALLBUSINESS_SERVER* = 0x00000009
+  PRODUCT_STANDARD_SERVER* = 0x00000007
+  PRODUCT_STANDARD_SERVER_CORE * = 0x0000000D
+  PRODUCT_STANDARD_SERVER_CORE_V* = 0x00000028
+  PRODUCT_STANDARD_SERVER_V* = 0x00000024
+  PRODUCT_STARTER* = 0x0000000B
+  PRODUCT_STARTER_E* = 0x00000042
+  PRODUCT_STARTER_N* = 0x0000002F
+  PRODUCT_STORAGE_ENTERPRISE_SERVER* = 0x00000017
+  PRODUCT_STORAGE_EXPRESS_SERVER* = 0x00000014
+  PRODUCT_STORAGE_STANDARD_SERVER* = 0x00000015
+  PRODUCT_STORAGE_WORKGROUP_SERVER* = 0x00000016
+  PRODUCT_UNDEFINED* = 0x00000000
+  PRODUCT_ULTIMATE* = 0x00000001
+  PRODUCT_ULTIMATE_E* = 0x00000047
+  PRODUCT_ULTIMATE_N* = 0x0000001C
+  PRODUCT_WEB_SERVER* = 0x00000011
+  PRODUCT_WEB_SERVER_CORE* = 0x0000001D
+  
+  PROCESSOR_ARCHITECTURE_AMD64* = 9 ## x64 (AMD or Intel)
+  PROCESSOR_ARCHITECTURE_IA64* = 6 ## Intel Itanium Processor Family (IPF)
+  PROCESSOR_ARCHITECTURE_INTEL* = 0 ## x86
+  PROCESSOR_ARCHITECTURE_UNKNOWN* = 0xffff ## Unknown architecture.
+  
+  # GetSystemMetrics
+  SM_SERVERR2 = 89 
+  
+proc GlobalMemoryStatusEx(lpBuffer: var TMEMORYSTATUSEX){.stdcall, dynlib: "kernel32",
+    importc: "GlobalMemoryStatusEx".}
+    
+proc getMemoryInfo*(): TMemoryInfo =
+  ## Retrieves memory info
+  var statex: TMEMORYSTATUSEX
+  statex.dwLength = sizeof(statex)
+
+  GlobalMemoryStatusEx(statex)
+  result.MemoryLoad = statex.dwMemoryLoad
+  result.TotalPhysMem = statex.ullTotalPhys
+  result.AvailablePhysMem = statex.ullAvailPhys
+  result.TotalPageFile = statex.ullTotalPageFile
+  result.AvailablePageFile = statex.ullAvailPageFile
+  result.TotalVirtualMem = statex.ullTotalVirtual
+  result.AvailableVirtualMem = statex.ullAvailExtendedVirtual
+
+proc GetVersionEx(lpVersionInformation: var TOSVERSIONINFOEX): WINBOOL{.stdcall,
+    dynlib: "kernel32", importc: "GetVersionExA".}
+
+proc GetProcAddress(hModule: int, lpProcName: cstring): pointer{.stdcall,
+    dynlib: "kernel32", importc: "GetProcAddress".}
+
+proc GetModuleHandleA(lpModuleName: cstring): int{.stdcall,
+     dynlib: "kernel32", importc.}
+
+proc getVersionInfo*(): TVersionInfo =
+  ## Retrieves operating system info
+  var osvi: TOSVERSIONINFOEX
+  osvi.dwOSVersionInfoSize = sizeof(osvi)
+  discard GetVersionEx(osvi)
+  result.majorVersion = osvi.dwMajorVersion
+  result.minorVersion = osvi.dwMinorVersion
+  result.buildNumber = osvi.dwBuildNumber
+  result.platformID = osvi.dwPlatformId
+  result.SPVersion = $osvi.szCSDVersion
+  result.SPMajor = osvi.wServicePackMajor
+  result.SPMinor = osvi.wServicePackMinor
+  result.SuiteMask = osvi.wSuiteMask
+  result.ProductType = osvi.wProductType
+
+proc getProductInfo*(majorVersion, minorVersion, SPMajorVersion, SPMinorVersion: int): int =
+  ## Retrieves Windows' ProductInfo, this function only works in Vista and 7
+
+  var pGPI = cast[proc (dwOSMajorVersion, dwOSMinorVersion, 
+              dwSpMajorVersion, dwSpMinorVersion: int32, outValue: Pint32)](GetProcAddress(
+                GetModuleHandleA("kernel32.dll"), "GetProductInfo"))
+                
+  if pGPI != nil:
+    var dwType: int32
+    pGPI(int32(majorVersion), int32(minorVersion), int32(SPMajorVersion), int32(SPMinorVersion), addr(dwType))
+    result = int(dwType)
+  else:
+    return PRODUCT_UNDEFINED
+
+proc GetSystemInfo(lpSystemInfo: ptr SYSTEM_INFO){.stdcall, dynlib: "kernel32",
+    importc: "GetSystemInfo".}
+    
+proc getSystemInfo*(): TSYSTEM_INFO =
+  ## Returns the SystemInfo
+
+  # Use GetNativeSystemInfo if it's available
+  var pGNSI = cast[proc (lpSystemInfo: LPSYSTEM_INFO)](GetProcAddress(
+                GetModuleHandleA("kernel32.dll"), "GetNativeSystemInfo"))
+                
+  var systemi: TSYSTEM_INFO              
+  if pGNSI != nil:
+    pGNSI(addr(systemi))
+  else:
+    GetSystemInfo(addr(systemi))
+
+  return systemi
+
+proc GetSystemMetrics(nIndex: int32): int32{.stdcall, dynlib: "user32",
+    importc: "GetSystemMetrics".}
+
+proc `$`*(osvi: TVersionInfo): string =
+  ## Turns a VersionInfo object, into a string
+
+  if osvi.platformID == VER_PLATFORM_WIN32_NT and osvi.majorVersion > 4:
+    result = "Microsoft "
+    
+    var si = getSystemInfo()
+    # Test for the specific product
+    if osvi.majorVersion == 6:
+      if osvi.minorVersion == 0:
+        if osvi.ProductType == VER_NT_WORKSTATION:
+          result.add("Windows Vista ")
+        else: result.add("Windows Server 2008 ")
+      elif osvi.minorVersion == 1:
+        if osvi.ProductType == VER_NT_WORKSTATION:
+          result.add("Windows 7 ")
+        else: result.add("Windows Server 2008 R2 ")
+    
+      var dwType = getProductInfo(osvi.majorVersion, osvi.minorVersion, 0, 0)
+      case dwType
+      of PRODUCT_ULTIMATE:
+        result.add("Ultimate Edition")
+      of PRODUCT_PROFESSIONAL:
+        result.add("Professional")
+      of PRODUCT_HOME_PREMIUM:
+        result.add("Home Premium Edition")
+      of PRODUCT_HOME_BASIC:
+        result.add("Home Basic Edition")
+      of PRODUCT_ENTERPRISE:
+        result.add("Enterprise Edition")
+      of PRODUCT_BUSINESS:
+        result.add("Business Edition")
+      of PRODUCT_STARTER:
+        result.add("Starter Edition")
+      of PRODUCT_CLUSTER_SERVER:
+        result.add("Cluster Server Edition")
+      of PRODUCT_DATACENTER_SERVER:
+        result.add("Datacenter Edition")
+      of PRODUCT_DATACENTER_SERVER_CORE:
+        result.add("Datacenter Edition (core installation)")
+      of PRODUCT_ENTERPRISE_SERVER:
+        result.add("Enterprise Edition")
+      of PRODUCT_ENTERPRISE_SERVER_CORE:
+        result.add("Enterprise Edition (core installation)")
+      of PRODUCT_ENTERPRISE_SERVER_IA64:
+        result.add("Enterprise Edition for Itanium-based Systems")
+      of PRODUCT_SMALLBUSINESS_SERVER:
+        result.add("Small Business Server")
+      of PRODUCT_STANDARD_SERVER:
+        result.add("Standard Edition")
+      of PRODUCT_STANDARD_SERVER_CORE:
+        result.add("Standard Edition (core installation)")
+      of PRODUCT_WEB_SERVER:
+        result.add("Web Server Edition")
+      else:
+        nil
+    # End of Windows 6.*
+
+    if osvi.majorVersion == 5 and osvi.minorVersion == 2:
+      if GetSystemMetrics(SM_SERVERR2) != 0:
+        result.add("Windows Server 2003 R2, ")
+      elif (osvi.SuiteMask and VER_SUITE_PERSONAL) != 0: # Not sure if this will work
+        result.add("Windows Storage Server 2003")
+      elif (osvi.SuiteMask and VER_SUITE_WH_SERVER) != 0:
+        result.add("Windows Home Server")
+      elif osvi.ProductType == VER_NT_WORKSTATION and 
+          si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64:
+        result.add("Windows XP Professional x64 Edition")
+      else:
+        result.add("Windows Server 2003, ")
+      
+      # Test for the specific product
+      if osvi.ProductType != VER_NT_WORKSTATION:
+        if ze(si.wProcessorArchitecture) == PROCESSOR_ARCHITECTURE_IA64:
+          if (osvi.SuiteMask and VER_SUITE_DATACENTER) != 0:
+            result.add("Datacenter Edition for Itanium-based Systems")
+          elif (osvi.SuiteMask and VER_SUITE_ENTERPRISE) != 0:
+            result.add("Enterprise Edition for Itanium-based Systems")
+        elif ze(si.wProcessorArchitecture) == PROCESSOR_ARCHITECTURE_AMD64:
+          if (osvi.SuiteMask and VER_SUITE_DATACENTER) != 0:
+            result.add("Datacenter x64 Edition")
+          elif (osvi.SuiteMask and VER_SUITE_ENTERPRISE) != 0:
+            result.add("Enterprise x64 Edition")
+          else:
+            result.add("Standard x64 Edition")
+        else:
+          if (osvi.SuiteMask and VER_SUITE_COMPUTE_SERVER) != 0:
+            result.add("Compute Cluster Edition")
+          elif (osvi.SuiteMask and VER_SUITE_DATACENTER) != 0:
+            result.add("Datacenter Edition")
+          elif (osvi.SuiteMask and VER_SUITE_ENTERPRISE) != 0:
+            result.add("Enterprise Edition")
+          elif (osvi.SuiteMask and VER_SUITE_BLADE) != 0:
+            result.add("Web Edition")
+          else:
+            result.add("Standard Edition")
+    # End of 5.2
+    
+    if osvi.majorVersion == 5 and osvi.minorVersion == 1:
+      result.add("Windows XP ")
+      if (osvi.SuiteMask and VER_SUITE_PERSONAL) != 0:
+        result.add("Home Edition")
+      else:
+        result.add("Professional")
+    # End of 5.1
+    
+    if osvi.majorVersion == 5 and osvi.minorVersion == 0:
+      result.add("Windows 2000 ")
+      if osvi.ProductType == VER_NT_WORKSTATION:
+        result.add("Professional")
+      else:
+        if (osvi.SuiteMask and VER_SUITE_DATACENTER) != 0:
+          result.add("Datacenter Server")
+        elif (osvi.SuiteMask and VER_SUITE_ENTERPRISE) != 0:
+          result.add("Advanced Server")
+        else:
+          result.add("Server")
+    # End of 5.0
+    
+    # Include service pack (if any) and build number.
+    if len(osvi.SPVersion) > 0:
+      result.add(" ")
+      result.add(osvi.SPVersion)
+    
+    result.add(" (build " & $osvi.buildNumber & ")")
+    
+    if osvi.majorVersion >= 6:
+      if ze(si.wProcessorArchitecture) == PROCESSOR_ARCHITECTURE_AMD64:
+        result.add(", 64-bit")
+      elif ze(si.wProcessorArchitecture) == PROCESSOR_ARCHITECTURE_INTEL:
+        result.add(", 32-bit")
+    
+  else:
+    # Windows 98 etc...
+    result = "Unknown version of windows[Kernel version <= 4]"
+
+
+proc GetDiskFreeSpaceEx(lpDirectoryName: cstring, lpFreeBytesAvailableToCaller,
+    lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes: var filetime): WINBOOL{.
+    stdcall, dynlib: "kernel32", importc: "GetDiskFreeSpaceExA".}
+
+proc getPartitionInfo*(partition: string): TPartitionInfo =
+  ## Retrieves partition info, for example ``partition`` may be ``"C:\"``
+  var FreeBytes, TotalBytes, TotalFreeBytes: filetime 
+  var res = GetDiskFreeSpaceEx(r"C:\", FreeBytes, TotalBytes, TotalFreeBytes)
+  return (rdFileTime(FreeBytes), rdFileTime(TotalBytes))
+
+when isMainModule:
+  var r = getMemoryInfo()
+  echo("Memory load: ", r.MemoryLoad, "%")
+  var osvi = getVersionInfo()
+  
+  echo($osvi)
+  echo(getPartitionInfo(r"C:\")[0])
\ No newline at end of file
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim
index abca79933..724d00ee9 100755
--- a/lib/pure/strutils.nim
+++ b/lib/pure/strutils.nim
@@ -444,8 +444,7 @@ proc addf(s: var string, formatstr: string, a: openarray[string]) =
       case formatstr[i+1] # again we use the fact that strings
                           # are zero-terminated here
       of '#':
-        if not isNil(a[num]): 
-          add s, a[num]
+        add s, a[num]
         inc i, 2
         inc num
       of '$':
diff --git a/tests/reject/spec.csv b/tests/reject/spec.csv
index 8cd7f378d..b01844a59 100755
--- a/tests/reject/spec.csv
+++ b/tests/reject/spec.csv
@@ -14,15 +14,15 @@ tinout.nim;7;for a 'var' type a variable needs to be passed
 tinvalidnewseq.nim;10;type mismatch: got (array[0..6, string], int)
 tinvwhen.nim;6;invalid indentation
 titer4.nim;2;iterator within for loop context expected
-tnamspc.nim;5;Error: undeclared identifier: 'global'
+tnamspc.nim;5;undeclared identifier: 'global'
 tnoop.nim;6;expression 'a()' cannot be called
 tnot.nim;9;type mismatch
 topaque.nim;11;undeclared field: 'buffer'
 topena1.nim;4;invalid type
 toverl.nim;6;attempt to redefine 'TNone'
 trawstr.nim;5;closing " expected
-trecinca.nim;3;recursive dependency: 'tests/trecincb.nim'
-trecincb.nim;4;recursive dependency: 'tests/trecincb.nim'
+trecinca.nim;3;recursive dependency: 'tests/reject/trecincb.nim'
+trecincb.nim;4;recursive dependency: 'tests/reject/trecincb.nim'
 treciter.nim;4;recursive dependency: 'myrec'
 trectype.nim;20;internal error: cannot generate C type for: PA
 trefs.nim;15;type mismatch
diff --git a/tests/tester.nim b/tests/tester.nim
index 7c80a63c0..f29e1aeee 100755
--- a/tests/tester.nim
+++ b/tests/tester.nim
@@ -29,9 +29,7 @@ type
     data: string
 
 proc myExec(cmd: string): string =
-  #echo("Executing: " & cmd)
   result = osproc.execProcess(cmd)
-  #echo("Received: " & result)
 
 var
   pegLineError = peg"{[^(]*} '(' {\d+} ', ' \d+ ') Error:' \s* {.*}"
@@ -155,7 +153,6 @@ proc compile(r: var TResults, pattern, options: string) =
     var t = extractFilename(test)
     inc(r.total)
     var given = callCompiler(test, options)
-    echo given.msg, "##", given.err
     r.addResult(t, "", given.msg, not given.err)
     if not given.err: inc(r.passed)
   
@@ -187,7 +184,7 @@ for i in 1.. paramCount():
   add(options, " ")
   add(options, paramStr(i))
 
-#reject(rejectRes, "tests/reject", options)
+reject(rejectRes, "tests/reject", options)
 #compile(compileRes, "tests/accept/compile/t*.nim", options)
 compile(compileRes, "examples/*.nim", options)
 #compile(compileRes, "examples/gtk/*.nim", options)