summary refs log tree commit diff stats
path: root/tools/niminst
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@gmail.com>2016-06-06 00:04:07 +0100
committerDominik Picheta <dominikpicheta@gmail.com>2016-06-06 00:04:50 +0100
commitcb76f266faadfbae54016b43d67b244f0217a7e4 (patch)
tree6508813c98e3e78bd799881b5f727cb4d222d400 /tools/niminst
parent07d7d35d995262830f86cc02f3c663eae5714d2f (diff)
downloadNim-cb76f266faadfbae54016b43d67b244f0217a7e4.tar.gz
Niminst now bundles the `compiler` dir when packaging.
Diffstat (limited to 'tools/niminst')
-rw-r--r--tools/niminst/install.tmpl45
-rw-r--r--tools/niminst/niminst.nim33
2 files changed, 62 insertions, 16 deletions
diff --git a/tools/niminst/install.tmpl b/tools/niminst/install.tmpl
index 14d88e07d..21768a88f 100644
--- a/tools/niminst/install.tmpl
+++ b/tools/niminst/install.tmpl
@@ -1,5 +1,5 @@
 #? stdtmpl(subsChar = '?') | standard
-#proc generateInstallScript(c: ConfigData): string = 
+#proc generateInstallScript(c: ConfigData): string =
 #  result = "#! /bin/sh\n# Generated by niminst\n"
 #  var proj = c.name.toLower
 
@@ -8,7 +8,7 @@ set -e
 if [ $# -eq 1 ] ; then
 # if c.cat[fcUnixBin].len > 0:
   if test -f ?{c.cat[fcUnixBin][0].toUnix}
-  then 
+  then
     echo "?c.displayName build detected"
   else
     echo "Please build ?c.displayName before installing it"
@@ -34,6 +34,7 @@ if [ $# -eq 1 ] ; then
       libdir=/usr/lib/?proj
       docdir=/usr/share/?proj/doc
       datadir=/usr/share/?proj/data
+      nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version/"
       ;;
     "/usr/local/bin")
       bindir=/usr/local/bin
@@ -41,6 +42,18 @@ if [ $# -eq 1 ] ; then
       libdir=/usr/local/lib/?proj
       docdir=/usr/local/share/?proj/doc
       datadir=/usr/local/share/?proj/data
+      nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version"
+      ;;
+    "/opt")
+      bindir="/opt/?proj/bin"
+      configdir="/opt/?proj/config"
+      libdir="/opt/?proj/lib"
+      docdir="/opt/?proj/doc"
+      datadir="/opt/?proj/data"
+      nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version"
+      mkdir -p /opt/?proj
+      mkdir -p $bindir
+      mkdir -p $configdir
       ;;
     *)
       bindir="$1/?proj/bin"
@@ -48,25 +61,29 @@ if [ $# -eq 1 ] ; then
       libdir="$1/?proj/lib"
       docdir="$1/?proj/doc"
       datadir="$1/?proj/data"
-      
+      nimbleDir="$1/?proj"
       mkdir -p $1/?proj
       mkdir -p $bindir
       mkdir -p $configdir
       ;;
   esac
+
   mkdir -p $libdir
   mkdir -p $docdir
+  mkdir -p $nimbleDir/
   echo "copying files..."
 #var createdDirs = newStringTable()
-#for cat in fcConfig..fcLib:
+#for cat in {fcConfig..fcLib, fcNimble}:
 #  for f in items(c.cat[cat]):
 #    var mk = splitFile(f.skipRoot).dir
-#    if mk.len > 0:
+#    if cat != fcNimble:
 #      mk = unixDirVars[cat] & "/" & mk
-#      if not createdDirs.hasKey(mk):
-#        createdDirs[mk] = "true"
+#    else:
+#      mk = "$nimbleDir" / splitFile(f).dir
+#    end if
+#    if mk.len > 0 and not createdDirs.hasKey(mk):
+#      createdDirs[mk] = "true"
   mkdir -p ?{mk.toUnix}
-#      end if
 #    end if
 #  end for
 #end for
@@ -75,11 +92,11 @@ if [ $# -eq 1 ] ; then
   cp ?f.toUnix $bindir/?f.skipRoot.toUnix
   chmod 755 $bindir/?f.skipRoot.toUnix
 #end for
-#for f in items(c.cat[fcConfig]): 
+#for f in items(c.cat[fcConfig]):
   cp ?f.toUnix $configdir/?f.skipRoot.toUnix
   chmod 644 $configdir/?f.skipRoot.toUnix
 #end for
-#for f in items(c.cat[fcData]): 
+#for f in items(c.cat[fcData]):
   if [ -f ?f.toUnix ]; then
     cp ?f.toUnix $datadir/?f.skipRoot.toUnix
     chmod 644 $datadir/?f.skipRoot.toUnix
@@ -95,7 +112,13 @@ if [ $# -eq 1 ] ; then
   cp ?f.toUnix $libdir/?f.skipRoot.toUnix
   chmod 644 $libdir/?f.skipRoot.toUnix
 #end for
-  
+#for f in items(c.cat[fcNimble]):
+  cp ?f.toUnix $nimbleDir/?f.toUnix
+  chmod 644 $nimbleDir/?f.toUnix
+#end for
+cp ?{c.nimblePkgName}.nimble $nimbleDir/?{c.nimblePkgName}.nimble
+chmod 644 $nimbleDir/?{c.nimblePkgName}.nimble
+
   echo "installation successful"
 else
   echo "?c.displayName installation script"
diff --git a/tools/niminst/niminst.nim b/tools/niminst/niminst.nim
index d1216701f..991789a08 100644
--- a/tools/niminst/niminst.nim
+++ b/tools/niminst/niminst.nim
@@ -48,7 +48,8 @@ type
     fcWindows,    # files only for Windows
     fcUnix,       # files only for Unix; must be after ``fcWindows``
     fcUnixBin,    # binaries for Unix
-    fcDocStart    # links to documentation for Windows installer
+    fcDocStart,   # links to documentation for Windows installer
+    fcNimble      # nimble package files to copy to /opt/nimble/pkgs/pkg-ver
 
   ConfigData = object of RootObj
     actions: set[Action]
@@ -65,6 +66,7 @@ type
     app: AppType
     nimArgs: string
     debOpts: TDebOptions
+    nimblePkgName: string
 
 const
   unixDirVars: array[fcConfig..fcLib, string] = [
@@ -214,8 +216,11 @@ proc addFiles(s: var seq[string], patterns: seq[string]) =
     else:
       var i = 0
       for f in walkFiles(p):
-        add(s, unixToNativePath(f))
-        inc(i)
+        if existsDir(f):
+          walkDirRecursively(s, f)
+        else:
+          add(s, unixToNativePath(f))
+          inc(i)
       if i == 0: echo("[Warning] No file found that matches: " & p)
 
 proc pathFlags(p: var CfgParser, k, v: string,
@@ -362,6 +367,14 @@ proc parseIniFile(c: var ConfigData) =
                 else: file.add(v[i])
               inc(i)
           else: quit(errorStr(p, "unknown variable: " & k.key))
+        of "nimble":
+          case normalize(k.key)
+          of "pkgname":
+            c.nimblePkgName = v
+          of "pkgfiles":
+            addFiles(c.cat[fcNimble], split(v, {';'}))
+          else:
+            quit(errorStr(p, "invalid key: " & k.key))
         else: quit(errorStr(p, "invalid section: " & section))
 
       of cfgOption: quit(errorStr(p, "syntax error"))
@@ -554,8 +567,13 @@ when haveZipLib:
           for k, f in walkDir("build" / dir):
             if k == pcFile: addFile(z, proj / dir / extractFilename(f), f)
 
-      for cat in items({fcConfig..fcOther, fcUnix}):
+      for cat in items({fcConfig..fcOther, fcUnix, fcNimble}):
         for f in items(c.cat[cat]): addFile(z, proj / f, f)
+
+      # Copy the .nimble file over
+      let nimbleFile = c.nimblePkgName & ".nimble"
+      processFile(z, proj / nimbleFile, nimbleFile)
+
       close(z)
     else:
       quit("Cannot open for writing: " & n)
@@ -587,9 +605,14 @@ proc xzDist(c: var ConfigData) =
       for k, f in walkDir("build" / dir):
         if k == pcFile: processFile(z, proj / dir / extractFilename(f), f)
 
-  for cat in items({fcConfig..fcOther, fcUnix}):
+  for cat in items({fcConfig..fcOther, fcUnix, fcNimble}):
+    echo("Current category: ", cat)
     for f in items(c.cat[cat]): processFile(z, proj / f, f)
 
+  # Copy the .nimble file over
+  let nimbleFile = c.nimblePkgName & ".nimble"
+  processFile(z, proj / nimbleFile, nimbleFile)
+
   let oldDir = getCurrentDir()
   setCurrentDir(tmpDir)
   try: