summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xDebian/readme.md146
-rw-r--r--README.md17
-rwxr-xr-xUbuntu/README.md32
-rw-r--r--Ubuntu/eSim.spec (renamed from Debian/eSim.spec)0
-rw-r--r--Ubuntu/executable.md101
-rwxr-xr-xUbuntu/install-eSim.sh (renamed from Debian/install-eSim.sh)148
-rw-r--r--Version_Change.md36
-rw-r--r--Windows/README.md (renamed from Windows/readme.md)25
-rw-r--r--Windows/esim-setup-script.nsi78
9 files changed, 335 insertions, 248 deletions
diff --git a/Debian/readme.md b/Debian/readme.md
deleted file mode 100755
index 8b635e4a..00000000
--- a/Debian/readme.md
+++ /dev/null
@@ -1,146 +0,0 @@
-eSim Installer (Ubuntu OS)
-====
-
-
-It contains all the documenation for making eSim executable (using PyInstaller), eSim Installation Script and packaging eSim with and without eSim executable (through source) on Ubuntu 16.04 and above.
-
-
-## eSim Executable:
-
-> Note: pip tool corresponds to Python-3.5.2 on Ubuntu 16.04 and Python-3.6.9 on Ubuntu 18.04
-
-1. Download `virtualenv` package and create virtual environment as:
-
- $ pip install virtualenv
- $ virtualenv -p /usr/bin/python3 eSim
-
- OR
-
- $ sudo apt install -y python3-venv
- $ python3 -m venv eSim
-
-2. Activate the virtual environment as:
-
- $ source eSim/bin/activate
-
-3. Install all Python dependencies for eSim within the virtual environment as:
-
- $ pip install wheel
- $ pip install pyinstaller
- $ pip install --upgrade 'matplotlib==3.0.3'
- $ pip install tornado
- $ pip install --upgrade 'setuptools<45.0.0'
- $ sudo apt install build-essential python3-dev libqt4-dev qt4-dev-tools
- $ mkdir eSim/build
- $ cd eSim/build/
- $ wget http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12.3/PyQt4_gpl_x11-4.12.3.tar.gz
- $ wget https://www.riverbankcomputing.com/static/Downloads/sip/4.19.21/sip-4.19.21.tar.gz
- $ tar -xzvf sip-4.19.21.tar.gz
- $ tar -xvzf PyQt4_gpl_x11-4.12.3.tar.gz
- $ cd sip-4.19.21/
- $ python configure.py --sip-module PyQt4.sip
- $ make
- $ make install
- $ cd ../PyQt4_gpl_x11-4.12.3/
- $ python configure.py
- $ make
- $ make install
-
-4. Test whether only eSim dependencies are available or not:
-
- $ pip freeze
-
-> Note : Following dependencies should be available -
-> - PyQt4
-> - matplotlib
-> - numpy
-> - dateutil
-> - pyparsing
-> - six
-> - cycler.py
-
-5. Download eSim Manual from eSim website, add it to `library/browser/User-Manual/` and update the file name of Manual in `src/browser/UserManual.py` accordingly.
-
-6. Create spec file as:
-
- $ pyi-makespec --onefile -n eSim <path_to_eSim>/src/frontEnd/Application.py
-
-7. Add `PyQt4.sip` as hiddenimports in the generated spec file.
-
-8. Create onefile executable using pyinstaller as:
-
- $ pyinstaller -F --clean eSim.spec
-
-9. Verify whether all eSim `src` files (`*.py`) have been included in `Analysis-00.toc` file under the build folder generated by PyInstaller.
-
-
-## Fully-Static Bundling of eSim Executable:
-
-1. To create a [fully-static bundled version](https://github.com/pyinstaller/pyinstaller/wiki/FAQ#GNULinux) of eSim (through PyInstaller), use a tool like [StaticX](https://github.com/JonathonReinhart/staticx/).
-
-2. To create fully-static eSim :
-
- - Activate the virtual environment as:
-
- $ source eSim/bin/activate
-
- - Install StaticX as:
-
- $ pip install staticx
- $ pip install patchelf-wrapper
-
- - Create static eSim as:
-
- $ staticx /path/to/executable/eSim /path/to/output/executable/eSim
-
-3. To verify if all dynamic libraries are removed :
-
- - Type following command in a terminal :
-
- $ ldd path/to/output/executable/eSim
-
- - Output of above command should be similar to ` not a dynamic executable`
-
-
-## Without eSim Executable (through source):
-
-Update following files by changing the relative paths before packaging the `src` folder with the release.
-
- - `browser\UserManual.py` --> path to manual
- - `browser\Welcome.py` --> path to library
- - `configuration\Appconfig.py` --> path to library
- - `frontEnd\Application.py` --> path to library, pathmagic and images
- - `frontEnd\ProjectExplorer.py` --> path to images
- - `frontEnd\Workspace.py` --> path to images
- - `kicadtoNgspice\DeviceModel.py` --> path to library
- - `kicadtoNgspice\Processing.py` --> path to library
- - `kicadtoNgspice\SubcircuitTab.py` --> path to library
- - `modelEditor\ModelEditor.py` --> path to library
- - `subcircuit\newSub.py` --> path to library
- - `subcircuit\openSub.py` --> path to library
- - `subcircuit\uploadSub.py` --> path to library
-
-
-## How to package eSim?
-
-1. Update `VERSION` file to this release number.
-
-2. Add the installer file in `eSim-<version>` folder.
-
-3. Add the eSim executable file in `eSim-<version>` folder (only if it is made available). Also, remove following files from the folder:
- - `.git` folder
- - `code` folder
- - `src` folder (Applicable only if eSim executable is made)
- - conf.py
- - setup.py
- - index.rst
- - requirement.txt
- - .gitignore
- - .travis.yml
-
-4. Add the zip file of `NGHDL` (`nghdl-master.zip`) in the eSim folder.
-
-5. Compress `kicadLibrary` folder to a `tar.xz` format.
-
-6. Compress `eSim-<version>` to a zip format for distribution.
-
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..8d49b116
--- /dev/null
+++ b/README.md
@@ -0,0 +1,17 @@
+eSim Packaging
+====
+
+It contains all the documentation for packaging eSim for distribution.
+
+
+# Packaging eSim for Distribution:
+
+1. eSim is currently packaged and distributed for Ubuntu OS (Linux) and MS Windows OS.
+
+2. Refer the [documentation](Version_Change.md) for the changes to be done when a new release is to be made.
+
+> Note: These changes have to be made `first` before proceeding with the packaging on either platform.
+
+3. Refer the [documentation](Ubuntu/README.md) to package eSim for Ubuntu OS.
+
+4. Refer the [documentation](Windows/README.md) to package eSim for Windows OS.
diff --git a/Ubuntu/README.md b/Ubuntu/README.md
new file mode 100755
index 00000000..5c7c65d4
--- /dev/null
+++ b/Ubuntu/README.md
@@ -0,0 +1,32 @@
+eSim Installer (Ubuntu OS)
+====
+
+It contains the documentation to package eSim for Ubuntu OS.
+
+> Note: If planning to freeze the eSim source code for a target platform (Ubuntu OS), then refer this [documentation](executable.md). Remember to update the installer script to work with this executable!
+
+
+## How to package eSim for Ubuntu OS?
+
+1. Take the `master` branch containing the source code. Rename the folder to `eSim-<version>`.
+
+2. Add the installer script `install-eSim.sh` in `eSim-<version>` folder.
+
+3. Add the eSim executable (if available) in `eSim-<version>` folder. Also, remove following files from this folder:
+ - `.git` folder
+ - `code` folder
+ - `src` folder (Applicable only if eSim executable is used)
+ - conf.py
+ - setup.py
+ - index.rst
+ - requirement.txt
+ - .gitignore
+ - .travis.yml
+
+4. Add the zip file of `NGHDL` (`nghdl.zip`) in the eSim folder.
+
+> Note: Refer this [documentation](https://github.com/fossee/nghdl/tree/installers/Ubuntu/README.md) on packaging of NGHDL for Ubuntu OS.
+
+5. Compress `kicadLibrary` folder to a `tar.xz` format.
+
+6. Compress `eSim-<version>` to a zip format for distribution.
diff --git a/Debian/eSim.spec b/Ubuntu/eSim.spec
index 15061f6b..15061f6b 100644
--- a/Debian/eSim.spec
+++ b/Ubuntu/eSim.spec
diff --git a/Ubuntu/executable.md b/Ubuntu/executable.md
new file mode 100644
index 00000000..435ed88a
--- /dev/null
+++ b/Ubuntu/executable.md
@@ -0,0 +1,101 @@
+eSim Executable (Ubuntu OS)
+====
+
+> Note: It is not updated for the recently ported GUI to PyQt5 and Ubuntu 20.04 LTS. Currently, packaging for Ubuntu OS is done directly with the source code and not the executable.
+
+It contains the documentation for making eSim executable using PyInstaller on Ubuntu 16.04 and above.
+
+
+## Freeze eSim source code:
+
+> Note: pip tool corresponds to Python-3.5.2 on Ubuntu 16.04 and Python-3.6.9 on Ubuntu 18.04
+
+1. Download `virtualenv` package and create virtual environment as:
+
+ $ pip install virtualenv
+ $ virtualenv -p /usr/bin/python3 eSim
+
+ OR
+
+ $ sudo apt install -y python3-venv
+ $ python3 -m venv eSim
+
+2. Activate the virtual environment as:
+
+ $ source eSim/bin/activate
+
+3. Install all Python dependencies for eSim within the virtual environment as:
+
+ $ pip install wheel
+ $ pip install pyinstaller
+ $ pip install --upgrade 'matplotlib==3.0.3'
+ $ pip install tornado
+ $ pip install --upgrade 'setuptools<45.0.0'
+ $ sudo apt install build-essential python3-dev libqt4-dev qt4-dev-tools
+ $ mkdir eSim/build
+ $ cd eSim/build/
+ $ wget http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12.3/PyQt4_gpl_x11-4.12.3.tar.gz
+ $ wget https://www.riverbankcomputing.com/static/Downloads/sip/4.19.21/sip-4.19.21.tar.gz
+ $ tar -xzvf sip-4.19.21.tar.gz
+ $ tar -xvzf PyQt4_gpl_x11-4.12.3.tar.gz
+ $ cd sip-4.19.21/
+ $ python configure.py --sip-module PyQt4.sip
+ $ make
+ $ make install
+ $ cd ../PyQt4_gpl_x11-4.12.3/
+ $ python configure.py
+ $ make
+ $ make install
+
+4. Test whether only eSim dependencies are available or not:
+
+ $ pip freeze
+
+> Note : Following dependencies should be available -
+> - PyQt4
+> - matplotlib
+> - numpy
+> - dateutil
+> - pyparsing
+> - six
+> - cycler.py
+
+5. Create spec file as:
+
+ $ pyi-makespec --onefile -n eSim <path_to_eSim>/src/frontEnd/Application.py
+
+6. Add `PyQt4.sip` as hiddenimports in the generated spec file.
+
+7. Create onefile executable using pyinstaller as:
+
+ $ pyinstaller -F --clean eSim.spec
+
+8. Verify whether all eSim `src` files (`*.py`) have been included in `Analysis-00.toc` file under the build folder generated by PyInstaller.
+
+
+## Fully-Static Bundling of eSim Executable:
+
+1. To create a [fully-static bundled version](https://github.com/pyinstaller/pyinstaller/wiki/FAQ#GNULinux) of eSim (through PyInstaller), use a tool like [StaticX](https://github.com/JonathonReinhart/staticx/).
+
+2. To create fully-static eSim :
+
+ - Activate the virtual environment as:
+
+ $ source eSim/bin/activate
+
+ - Install StaticX as:
+
+ $ pip install staticx
+ $ pip install patchelf-wrapper
+
+ - Create static eSim as:
+
+ $ staticx /path/to/executable/eSim /path/to/output/executable/eSim
+
+3. To verify if all dynamic libraries are removed :
+
+ - Type following command in a terminal :
+
+ $ ldd path/to/output/executable/eSim
+
+ - Output of above command should be similar to ` not a dynamic executable`
diff --git a/Debian/install-eSim.sh b/Ubuntu/install-eSim.sh
index 53a265c1..74d59992 100755
--- a/Debian/install-eSim.sh
+++ b/Ubuntu/install-eSim.sh
@@ -1,22 +1,34 @@
-# !/bin/bash
-# ===============================================================================
+#!/bin/bash
+#===============================================================================
# FILE: install-eSim.sh
#
# USAGE: ./install-eSim.sh --install
# OR
# ./install-eSim.sh --uninstall
#
-# DESCRIPTION: This is installation/uninstallation script for eSim
+# DESCRIPTION: Installation script for eSim EDA Suite
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Fahim Khan, Rahul Paknikar, Saurabh Bansode
-# ORGANIZATION: FOSSEE at IIT Bombay.
-# CREATED: Wednesday 01 April 2020 16:14
-# REVISION: ---
-# ===============================================================================
+# ORGANIZATION: eSim Team, FOSSEE, IIT Bombay
+# CREATED: Wednesday 15 July 2015 15:26
+# REVISION: Sunday 02 August 2020 01:26
+#===============================================================================
+
+set -e # Set exit option immediately on error
+set -E # inherit ERR trap by shell functions
+
+error_exit() {
+ echo -e "\n\nError! Kindly resolve above error(s) and try again."
+ echo -e "\nAborting Installation...\n"
+}
+
+# Trap on function error_exit before exiting on error
+trap error_exit ERR
+
# All variables goes here
config_dir="$HOME/.esim"
@@ -52,19 +64,20 @@ function installNghdl
{
echo "Installing NGHDL..........................."
- unzip nghdl-master.zip
- mv nghdl-master nghdl
+ unzip -o nghdl.zip
cd nghdl/
chmod +x install-nghdl.sh
- ./install-nghdl.sh --install
+
+ # Do not trap on error of any command. Let NGHDL script handle its own errors.
+ trap "" ERR
+
+ ./install-nghdl.sh --install # Install NGHDL
- if [ $? -ne 0 ];then
- echo -e "\n\nERROR: cannot install NGHDL\n\n"
- exit 0
- else
- ngspiceFlag=1
- cd ..
- fi
+ # Set trap again to error_exit function to exit on errors
+ trap error_exit ERR
+
+ ngspiceFlag=1
+ cd ..
}
@@ -74,11 +87,19 @@ function addKicadPPA
#sudo add-apt-repository ppa:js-reynaud/ppa-kicad
kicadppa="reynaud/kicad-4"
- grep -h "^deb.*$kicadppa*" /etc/apt/sources.list.d/* > /dev/null 2>&1
- if [ $? -ne 0 ]
- then
+ findppa=$(grep -h -r "^deb.*$kicadppa*" /etc/apt/sources.list* > /dev/null 2>&1 || test $? = 1)
+ if [ -z "$findppa" ]; then
echo "Adding KiCad-4 PPA to local apt-repository"
- sudo add-apt-repository --yes ppa:js-reynaud/kicad-4
+ if [[ $(lsb_release -rs) == 20.* ]]; then
+ sudo add-apt-repository --yes "deb http://ppa.launchpad.net/js-reynaud/kicad-4/ubuntu bionic main"
+ sudo touch /etc/apt/preferences.d/preferences
+ echo "Package: kicad" | sudo tee -a /etc/apt/preferences.d/preferences > /dev/null
+ echo "Pin: version 4.0.7*" | sudo tee -a /etc/apt/preferences.d/preferences > /dev/null
+ echo "Pin-Priority: 501" | sudo tee -a /etc/apt/preferences.d/preferences > /dev/null
+ sudo add-apt-repository --yes "deb http://in.archive.ubuntu.com/ubuntu/ bionic main universe"
+ else
+ sudo add-apt-repository --yes ppa:js-reynaud/kicad-4
+ fi
else
echo "KiCad-4 is available in synaptic"
fi
@@ -95,37 +116,22 @@ function installDependency
echo "Installing Xterm..........................."
sudo apt-get install -y xterm
- if [ $? -ne 0 ]; then
- echo -e "\n\n\"Xterm\" dependency couldn't be installed.\nKindly resolve above errors and try again."
- exit 1
- fi
- echo "Installing PyQt4..........................."
- sudo apt-get install -y python3-pyqt4
- if [ $? -ne 0 ]; then
- echo -e "\n\n\"PyQt4\" dependency couldn't be installed.\nKindly resolve above errors and try again."
- exit 1
- fi
+ echo "Installing PyQt5..........................."
+ sudo apt-get install -y python3-pyqt5
echo "Installing Matplotlib......................"
sudo apt-get install -y python3-matplotlib
- if [ $? -ne 0 ]; then
- echo -e "\n\n\"Matplotlib\" dependency couldn't be installed.\nKindly resolve above errors and try again."
- exit 1
- fi
- echo "Installing Xpdf............................"
- sudo apt-get install -y xpdf
- if [ $? -ne 0 ]; then
- echo -e "\n\n\"Xpdf\" dependency couldn't be installed.\nKindly resolve above errors and try again."
- exit 1
- fi
+ if [[ $(lsb_release -rs) != 16.* ]]; then
+ echo "Installing Distutils......................."
+ sudo apt-get install python3-distutils
+ fi
echo "Installing KiCad..........................."
- sudo apt install -y --no-install-recommends kicad
- if [ $? -ne 0 ]; then
- echo -e "\n\n\"KiCad\" dependency couldn't be installed.\nKindly resolve above errors and try again."
- exit 1
+ sudo apt-get install -y --no-install-recommends kicad
+ if [[ $(lsb_release -rs) == 20.* ]]; then
+ sudo add-apt-repository -r "deb http://in.archive.ubuntu.com/ubuntu/ bionic main universe"
fi
}
@@ -134,11 +140,11 @@ function installDependency
function copyKicadLibrary
{
- if [ -f ~/.config/kicad ];then
- echo "kicad folder already exists"
+ if [ -d ~/.config/kicad ];then
+ echo "kicad folder already exists"
else
- echo ".config/kicad does not exist"
- mkdir ~/.config/kicad
+ echo ".config/kicad does not exist"
+ mkdir ~/.config/kicad
fi
# Dump KiCad config path
@@ -175,9 +181,15 @@ function copyKicadLibrary
sudo cp -rv kicadLibrary/template/kicad.pro ${KICAD_PRO}
fi
- #remove extracted KiCad Library - not needed anymore
+ set +e # Temporary disable exit on error
+ trap "" ERR # Do not trap on error of any command
+
+ # Remove extracted KiCad Library - not needed anymore
rm -rf kicadLibrary
+ set -e # Re-enable exit on error
+ trap error_exit ERR
+
#Change ownership from Root to the User
sudo chown -R $USER:$USER /usr/share/kicad/library/
@@ -200,10 +212,9 @@ function createDesktopStartScript
# Generating esim.desktop file
echo "[Desktop Entry]" > esim.desktop
- getVersion=`tail -1 VERSION`
- echo "Version=$getVersion" >> esim.desktop
+ echo "Version=1.0" >> esim.desktop
echo "Name=eSim" >> esim.desktop
- echo "Comment=EDA Tools" >> esim.desktop
+ echo "Comment=EDA Tool" >> esim.desktop
echo "GenericName=eSim" >> esim.desktop
echo "Keywords=eda-tools" >> esim.desktop
echo "Exec=esim %u" >> esim.desktop
@@ -215,23 +226,31 @@ function createDesktopStartScript
echo "Categories=Development;" >> esim.desktop
echo "MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;" >> esim.desktop
echo "StartupNotify=true" >> esim.desktop
- echo "Actions=NewWindow;NewPrivateWindow;" >> esim.desktop
# Make esim.desktop file executable
sudo chmod 755 esim.desktop
+ # Copy desktop icon file to share applications
+ sudo cp -vp esim.desktop /usr/share/applications/
# Copy desktop icon file to Desktop
cp -vp esim.desktop $HOME/Desktop/
+ set +e # Temporary disable exit on error
+ trap "" ERR # Do not trap on error of any command
+
# Check if the target OS is Ubuntu 18 or not
- if [[ $(lsb_release -rs) == 18.* ]]; then
+ if [[ $(lsb_release -rs) == 18.* || $(lsb_release -rs) == 20.* ]]; then
# Make esim.desktop file as trusted application
- gio set $HOME/Desktop/esim.desktop "metadata::trusted" yes
- # Restart nautilus-desktop, so that the changes take effect
- killall nautilus-desktop && nautilus-desktop &
+ gio set $HOME/Desktop/esim.desktop "metadata::trusted" true
+ # Set Permission and Execution bit
+ chmod a+x $HOME/Desktop/esim.desktop
fi
# Remove local copy of esim.desktop file
rm esim.desktop
+
+ set -e # Re-enable exit on error
+ trap error_exit ERR
+
# Copying logo.png to .esim directory to access as icon
cp -vp images/logo.png $config_dir
@@ -324,16 +343,21 @@ if [ $option == "--install" ];then
elif [ $option == "--uninstall" ];then
- echo -n "Are you sure? It will remove complete eSim including KiCad, Ngspice and NGHDL models and libraries (y/n):"
+ echo -n "Are you sure? It will remove eSim completely including KiCad, Ngspice and NGHDL along with their models and libraries (y/n):"
read getConfirmation
if [ $getConfirmation == "y" -o $getConfirmation == "Y" ];then
echo "Removing eSim............................"
- sudo rm -rf $HOME/.esim $HOME/Desktop/esim.desktop /usr/bin/esim
+ sudo rm -rf $HOME/.esim $HOME/Desktop/esim.desktop /usr/bin/esim /usr/share/applications/esim.desktop
echo "Removing KiCad..........................."
sudo apt purge -y kicad
sudo rm -rf /usr/share/kicad
sudo rm -rf $HOME/.config/kicad
- rm -f $eSim_Home/library/supportFiles/kicad_config_path.txt
+ rm -f $eSim_Home/library/supportFiles/kicad_config_path.txt
+
+ if [[ $(lsb_release -rs) == 20.* ]]; then
+ sudo sed -i '/Package: kicad/{:label;N;/Pin-Priority: 501/!blabel};/Pin: version 4.0.7*/d' /etc/apt/preferences.d/preferences
+ fi
+
echo "Removing NGHDL..........................."
rm -rf library/modelParamXML/Nghdl/*
cd nghdl/
@@ -353,7 +377,7 @@ elif [ $option == "--uninstall" ];then
elif [ $getConfirmation == "n" -o $getConfirmation == "N" ];then
exit 0
else
- echo "Please select the right option"
+ echo "Please select the right option."
exit 0
fi
diff --git a/Version_Change.md b/Version_Change.md
new file mode 100644
index 00000000..bd308cb6
--- /dev/null
+++ b/Version_Change.md
@@ -0,0 +1,36 @@
+eSim Version Change
+====
+
+It contains the documentation for the changes to be done when a new release is to be made.
+
+
+# Changes for eSim version Update:
+
+1. `master/VERSION` - Change the version number
+
+2. `master/conf.py` - Update `release` variable
+
+3. `master/setup.py` - Update `version` field in `setup` function
+
+4. User Manual
+ - Download eSim Manual from eSim website and add it to `library/browser/User-Manual/`.
+ - Remove `figures` folder and `eSim.html` file from `library/browser/User-Manual/`.
+ - Update user manual filename as `eSim_Manual_y.x.pdf` where y.x is the updated version.
+ - Update path in the following line at `master/src/browser/UserManual.py` with the updated manual name:
+ ```python
+ file = os.path.realpath('library/browser/User-Manual/eSim_Manual_2.0.pdf')
+ ```
+
+5. `master/src/configuration/Appconfig.py` - In function `def __init__ (self)` , update the variable `self._VERSION`
+
+6. `master/INSTALL` - Update the installer file names according to the latest version.
+
+7. `installers/Windows/esim-setup-script.nsi` - Update the following lines in this script:
+ ```nsi
+ !define PRODUCT_VERSION "y.x"
+ !define VERSION "a.b.c.d"
+
+ OutFile "eSim-y.x_install.exe"
+ ```
+
+8. `master/README.md` - Update new features, OS support and other changes that were made in the new version.
diff --git a/Windows/readme.md b/Windows/README.md
index cd8ff979..8dae6dc1 100644
--- a/Windows/readme.md
+++ b/Windows/README.md
@@ -7,6 +7,7 @@ It contains all the documenation for making eSim executable (using PyInstaller)
> Note : Do not develop eSim on Windows OS. Work only with `installers` branch on Windows OS and do development on Linux OS.
> Reference : https://stackoverflow.com/questions/37672886/cannot-get-rid-of-unstaged-files-in-git-on-my-local
+
## eSim Executable:
1. Download and install "Python-3.5.2", "Git For Windows". Use "Git Bash" for all following shell commands.
@@ -88,27 +89,24 @@ It contains all the documenation for making eSim executable (using PyInstaller)
> - six
> - cycler.py
-8. Download eSim Manual from eSim website, add it to `library/browser/User-Manual/` and update the file name of Manual in `src/browser/UserManual.py` accordingly.
-
-9. Create spec file as:
+8. Create spec file as:
$ pyi-makespec --onefile -n eSim <path_to_eSim>/src/frontEnd/Application.py --icon=<path_to_eSim_logo>
-10. Create onefile executable using pyinstaller as:
+9. Create onefile executable using pyinstaller as:
$ pyinstaller -F --clean eSim.spec
-11. Verify whether all eSim `src` files (`*.py`) have been included in `Analysis-00.toc` file under the build folder generated by PyInstaller.
-
+10. Verify whether all eSim `src` files (`*.py`) have been included in `Analysis-00.toc` file under the build folder generated by PyInstaller.
## How to package eSim?
-1. Update `VERSION` file to this release number. Also, update version number in NSI script and `Installation.txt` file.
+1. Take the `master` branch of eSim. Rename the folder to `eSim`.
2. Compress `spice` folder in zip format (Make sure that there is folder named `spice` inside this compressed file).
-3. Add eSim executable file to the eSim source folder. Also, remove following files from the eSim source folder:
+3. Add eSim executable to the `eSim` folder. Also, remove following files from that folder:
- `.git` folder
- `code` folder
- `src` folder
@@ -118,15 +116,12 @@ It contains all the documenation for making eSim executable (using PyInstaller)
- requirement.txt
- .gitignore
- .travis.yml
- - `Examples\NGHDL_Examples\` folder
-
-4. Remove `eSim_Nghdl.lib` file from `eSim\library\kicadLibrary\kicad_eSim-Library\`. Also, remove `library` folder, duplicate files from `template` and `modules` folders under `eSim\library\kicadLibary\`.
-5. Now, compress `eSim\library\kicadLibrary` in zip format, place it at `eSim\library` and delete that folder.
+4. Now, compress `eSim\library\kicadLibrary` in zip format, place it at `eSim\library` and delete that folder.
-6. Compress `eSim` folder in zip format (Make sure that there is folder named `eSim` inside this compressed file).
+5. Compress `eSim` folder in zip format (Make sure that there is folder named `eSim` inside this compressed file).
-7. Add following files/folder to the installer folder:
+6. Add following files/folder to the installer folder:
- KiCad installer.
- License file (`rtf` format).
- Logo (`ico` format).
@@ -134,4 +129,4 @@ It contains all the documenation for making eSim executable (using PyInstaller)
- eSim (compressed file in `zip` format) containing eSim folder.
- `esim-setup-script` file.
-8. Compile the NSI script (`esim-setup-script` file). Now only use the generated installer for distribution.
+7. Compile the NSI script (`esim-setup-script` file). Now only use the generated installer for distribution.
diff --git a/Windows/esim-setup-script.nsi b/Windows/esim-setup-script.nsi
index 87f54bee..daaf4cc1 100644
--- a/Windows/esim-setup-script.nsi
+++ b/Windows/esim-setup-script.nsi
@@ -8,7 +8,6 @@
!include "MUI2.nsh"
!include "ZipDLL.nsh"
- !include "EnvVarUpdate.nsh"
!include "x64.nsh"
;--------------------------------
@@ -169,18 +168,14 @@ Section -NgspiceSim
SetOutPath "$EXEDIR"
- File "spice.zip"
- File "eSim.zip"
+ File "eSim.7z"
File "logo.ico"
SetOutPath "$INSTDIR"
- ;ADD YOUR OWN FILES HERE...
- ZipDLL::extractall "$EXEDIR\spice.zip" "$INSTDIR\"
- ZipDLL::extractall "$EXEDIR\eSim.zip" "$INSTDIR\"
+ ;ADD YOUR OWN FILES HERE...
+ Nsis7z::ExtractWithDetails "$EXEDIR\eSim.7z" "Extracting eSim %s..."
- ;Setting Env Variable for Ngspice
- ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\spice\bin"
;Copying Folder to install directory
SetOutPath "$INSTDIR\eSim"
@@ -208,12 +203,13 @@ Section -NgspiceSim
;create desktop shortcut
CreateShortCut "$PROFILE\..\Public\Desktop\eSim.lnk" "$INSTDIR\eSim\eSim" "" "$PROFILE\.esim\logo.ico" "" SW_SHOWMINIMIZED
+ !insertmacro MUI_STARTMENU_WRITE_END
+
;Remove not required files
- Delete "$EXEDIR\spice.zip"
- Delete "$EXEDIR\eSim.zip"
+ Delete "$EXEDIR\eSim.7z"
Delete "$EXEDIR\logo.ico"
- !insertmacro MUI_STARTMENU_WRITE_END
+
SectionEnd
@@ -233,11 +229,14 @@ Section -InstallKiCad
Goto endActiveSync
endActiveSync:
- ;Remove not required files
- Delete "$EXEDIR\kicad-4.0.7-i686.exe"
- Delete "$PROFILE\..\Public\Desktop\KiCad.lnk"
+ ;Remove not required files
+ Delete "$EXEDIR\kicad-4.0.7-i686.exe"
+ Delete "$PROFILE\..\Public\Desktop\KiCad.lnk"
- ${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\KiCad\bin"
+ EnVar::SetHKLM
+ EnVar::AddValue "Path" "$INSTDIR\KiCad\bin"
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
ZipDLL::extractall "$INSTDIR\eSim\library\kicadLibrary.zip" "$INSTDIR\eSim\library\"
@@ -266,7 +265,7 @@ Section -InstallKiCad
RMDir /r "$INSTDIR\eSim\library\kicadLibrary"
SectionEnd
-
+
Section -AdditionalIcons
@@ -276,6 +275,7 @@ Section -AdditionalIcons
SectionEnd
+!include "installnghdl.nsi"
Section -Post
@@ -300,14 +300,48 @@ FunctionEnd
Section Uninstall
+ ; Set to HKLM
+ EnVar::SetHKLM
+
+ GetFullPathName $1 $INSTDIR\..\eSim\nghdl\src
+ EnVar::DeleteValue "Path" $1
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+
+ GetFullPathName $1 $INSTDIR\..\mingw64\bin
+ EnVar::DeleteValue "Path" $1
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+
+ GetFullPathName $1 $INSTDIR\..\mingw64\msys\bin
+ EnVar::DeleteValue "Path" $1
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+
+ GetFullPathName $1 $INSTDIR\..\mingw64\GHDL\bin
+ EnVar::DeleteValue "Path" $1
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+
+ GetFullPathName $1 $INSTDIR\..\ngspice-nghdl\install_dir\bin
+ EnVar::DeleteValue "Path" $1
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
+
+ RMDir /r "$INSTDIR\..\mingw64"
+ RMDir /r "$INSTDIR\..\ngspice-nghdl"
+ RMDir /r "$INSTDIR\..\eSim\nghdl"
+
;Note that in uninstaller code, $INSTDIR contains the directory where the uninstaller lies
Delete "$INSTDIR\uninst-eSim.exe"
Delete "$SMPROGRAMS\eSim\Uninstall.lnk"
;Removing Env Variable for KiCad
- GetFullPathName $0 $INSTDIR\..\KiCad\bin
- ${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" $0
+ GetFullPathName $1 $INSTDIR\..\KiCad\bin
+ EnVar::DeleteValue "Path" $1
+ Pop $0
+ DetailPrint "EnVar::AddValue returned=|$0|"
;Remove KiCad config
RMDir /r "$PROFILE\AppData\Roaming\kicad"
@@ -318,17 +352,11 @@ Section Uninstall
Goto endActiveSync
endActiveSync:
- ;Removing Env Variable for Ngspice
- GetFullPathName $0 $INSTDIR\..\spice\bin
- ${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" $0
-
- ;Removing Ngspice
- RMDir /r "$INSTDIR\..\spice"
-
;Removing eSim
RMDir /r "$PROFILE\.esim"
RMDir "$SMPROGRAMS\eSim"
RMDir /r "$INSTDIR\..\eSim"
+ RMDir /r "$INSTDIR\..\KiCad"
Delete "$PROFILE\..\Public\Desktop\eSim.lnk"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"