diff --git a/.gitignore b/.gitignore index 52d76a47..a2a18869 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,9 @@ -# Setup +# Setup/Install MANIFEST dist/ +build/ deploy/ +*.spec # Documentation docs/build/ diff --git a/install.py b/install.py new file mode 100755 index 00000000..00d6ac00 --- /dev/null +++ b/install.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import sys +import getopt +import subprocess + +# Defaults +buildWindowed = True + +# Parse Options +shortOpt = "hd" +longOpt = [ + "help", + "debug", +] +helpMsg = ( + "\n" + "novelWriter Install Script\n" + "\n" + "Usage:\n" + " -h, --help Print this message.\n" + " -d, --debug Build novelWriter for debugging. To debug novelwriter after build,\n" + " run it from command line with the debug options. Please check the\n" + " novelWriter --help output for details.\n" +) + +try: + inOpts, inArgs = getopt.getopt(sys.argv[1:],shortOpt,longOpt) +except getopt.GetoptError: + print(helpMsg) + sys.exit(2) + +for inOpt, inArg in inOpts: + if inOpt in ("-h","--help"): + print(helpMsg) + sys.exit() + elif inOpt in ("-d", "--debug"): + buildWindowed = False + +# Run pip +packList = ["pyinstaller"] +with open("requirements.txt",mode="r") as reqFile: + for reqPack in reqFile: + if len(reqPack.strip()) > 0: + packList.append(reqPack) + +for packName in packList: + print("Installing package dependency: %s" % packName) + try: + subprocess.call([sys.executable, "-m", "pip", "install", packName]) + except Exception as e: + print("Failed with error:") + print(str(e)) + +# Run pyinstaller +if sys.platform.startswith("win32"): + dotDot = ";" +else: + dotDot = ":" + +instOpt = [ + "--name=novelWriter", + "--onefile", + "--add-data=%s%s%s" % (os.path.join("nw", "themes"), dotDot,"themes"), + "--add-data=%s%s%s" % (os.path.join("nw", "graphics"),dotDot,"graphics"), + "--icon=%s" % os.path.join("nw", "graphics", "novelWriter.ico"), +] +if buildWindowed: + instOpt.append("--windowed") + +instOpt.append("novelWriter.py") + +import PyInstaller.__main__ +PyInstaller.__main__.run(instOpt) + +print("") +print("##################") +print(" Build Finished") +print("##################") +print("") +print("If everything went well, the novelWriter executable should be in the folder named 'dist'") +print("") + diff --git a/nw/__init__.py b/nw/__init__.py index 5dbaab41..91348d7e 100644 --- a/nw/__init__.py +++ b/nw/__init__.py @@ -127,15 +127,15 @@ def main(sysArgs): inOpts, inArgs = getopt.getopt(sysArgs,shortOpt,longOpt) except getopt.GetoptError: print(helpMsg) - exit(2) + sys.exit(2) for inOpt, inArg in inOpts: - if inOpt in ("-h","--help"): + if inOpt in ("-h","--help"): print(helpMsg) - exit() + sys.exit() elif inOpt in ("-v", "--version"): print("%s %s Version %s" % (__package__,__status__,__version__)) - exit() + sys.exit() elif inOpt in ("-d", "--debug"): debugLevel = logging.DEBUG debugStr = "{name:>22}:{lineno:<4d} {levelname:8} {message:}"