summary refs log tree commit diff stats
path: root/doc/niminst.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/niminst.md')
-rw-r--r--doc/niminst.md197
1 files changed, 197 insertions, 0 deletions
diff --git a/doc/niminst.md b/doc/niminst.md
new file mode 100644
index 000000000..cc399c57a
--- /dev/null
+++ b/doc/niminst.md
@@ -0,0 +1,197 @@
+=========================
+  niminst User's manual
+=========================
+
+:Author: Andreas Rumpf
+:Version: |nimversion|
+
+.. default-role:: code
+.. include:: rstcommon.rst
+.. contents::
+
+Introduction
+============
+
+niminst is a tool to generate an installer for a Nim program. Currently
+it can create an installer for Windows
+via [Inno Setup](http://www.jrsoftware.org/isinfo.php) as well as
+installation/deinstallation scripts for UNIX. Later versions will support
+Linux' package management systems.
+
+niminst works by reading a configuration file that contains all the
+information that it needs to generate an installer for the different operating
+systems.
+
+
+Configuration file
+==================
+
+niminst uses the Nim [parsecfg](parsecfg.html) module to parse the
+configuration file. Here's an example of how the syntax looks like:
+
+.. include:: mytest.cfg
+     :literal:
+
+The value of a key-value pair can reference user-defined variables via
+the `$variable` notation: They can be defined in the command line with the
+`--var:name=value`:option: switch. This is useful to not hard-coding the
+program's version number into the configuration file, for instance.
+
+It follows a description of each possible section and how it affects the
+generated installers.
+
+
+Project section
+---------------
+The project section gathers general information about your project. It must
+contain the following key-value pairs:
+
+====================   =======================================================
+Key                    description
+====================   =======================================================
+`Name`                 the project's name; this needs to be a single word
+`DisplayName`          the project's long name; this can contain spaces. If
+                       not specified, this is the same as `Name`.
+`Version`              the project's version
+`OS`                   the OSes to generate C code for; for example:
+                       `"windows;linux;macosx"`
+`CPU`                  the CPUs to generate C code for; for example:
+                       `"i386;amd64;powerpc"`
+`Authors`              the project's authors
+`Description`          the project's description
+`App`                  the application's type: "Console" or "GUI". If
+                       "Console", niminst generates a special batch file
+                       for Windows to open up the command-line shell.
+`License`              the filename of the application's license
+====================   =======================================================
+
+
+`files` key
+-------------
+
+Many sections support the `files` key. Listed filenames
+can be separated by semicolon or the `files` key can be repeated. Wildcards
+in filenames are supported. If it is a directory name, all files in the
+directory are used:
+
+    [Config]
+    Files: "configDir"
+    Files: "otherconfig/*.conf;otherconfig/*.cfg"
+
+
+Config section
+--------------
+
+The `config` section currently only supports the `files` key. Listed files
+will be installed into the OS's configuration directory.
+
+
+Documentation section
+---------------------
+
+The `documentation` section supports the `files` key.
+Listed files will be installed into the OS's native documentation directory
+(which might be ``$appdir/doc``).
+
+There is a `start` key which determines whether the Windows installer
+generates a link to e.g. the ``index.html`` of your documentation.
+
+
+Other section
+-------------
+
+The `other` section currently only supports the `files` key.
+Listed files will be installed into the application installation directory
+(`$appdir`).
+
+
+Lib section
+-----------
+
+The `lib` section currently only supports the `files` key.
+Listed files will be installed into the OS's native library directory
+(which might be `$appdir/lib`).
+
+
+Windows section
+---------------
+
+The `windows` section supports the `files` key for Windows-specific files.
+Listed files will be installed into the application installation directory
+(`$appdir`).
+
+Other possible options are:
+
+====================   =======================================================
+Key                    description
+====================   =======================================================
+`BinPath`              paths to add to the Windows `%PATH%` environment
+                       variable. Example: ``BinPath: r"bin;dist\mingw\bin"``
+`InnoSetup`            boolean flag whether an Inno Setup installer should be
+                       generated for Windows. Example: `InnoSetup: "Yes"`
+====================   =======================================================
+
+
+UnixBin section
+---------------
+
+The `UnixBin` section currently only supports the `files` key.
+Listed files will be installed into the OS's native bin directory
+(e.g. ``/usr/local/bin``). The exact location depends on the
+installation path the user specifies when running the `install.sh` script.
+
+
+Unix section
+------------
+
+Possible options are:
+
+====================   =======================================================
+Key                    description
+====================   =======================================================
+`InstallScript`        boolean flag whether an installation shell script
+                       should be generated. Example: `InstallScript: "Yes"`
+`UninstallScript`      boolean flag whether a de-installation shell script
+                       should be generated.
+                       Example: `UninstallScript: "Yes"`
+====================   =======================================================
+
+
+InnoSetup section
+-----------------
+
+Possible options are:
+
+====================   =======================================================
+Key                    description
+====================   =======================================================
+`path`                 Path to Inno Setup.
+                       Example: ``path = r"c:\inno setup 5\iscc.exe"``
+`flags`                Flags to pass to Inno Setup.
+                       Example: `flags = "/Q"`
+====================   =======================================================
+
+
+C_Compiler section
+------------------
+
+Possible options are:
+
+====================   =======================================================
+Key                    description
+====================   =======================================================
+`path`                 Path to the C compiler.
+`flags`                Flags to pass to the C Compiler.
+                       Example: `flags = "-w"`
+====================   =======================================================
+
+
+Real-world example
+==================
+
+The installers for the Nim compiler itself are generated by niminst. Have a
+look at its configuration file:
+
+.. include:: ../compiler/installer.ini
+     :literal:
+