Skip to content

Commit

Permalink
Fix windows setup build
Browse files Browse the repository at this point in the history
  • Loading branch information
tpeulen committed Sep 20, 2024
1 parent 48b6a85 commit 259150f
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 67 deletions.
41 changes: 32 additions & 9 deletions build_tools/win/build-setup.bat
Original file line number Diff line number Diff line change
@@ -1,24 +1,47 @@
@echo off
set "CONDA_ENVIRONMENT_YAML=..\..\environment.yml"
set "DIST_PATH=..\..\dist"
set "SCRIPT_PATH=%~dp0"
set "APP_PATH=..\..\dist\win"
set "SOURCE_PATH=..\..\"
set "SOURCE_PATH=..\.."
set "CONDA_RECIPE_FOLDER=..\..\conda-recipe"

rem Assume that conda-build jinja2 pysftp are already installed
rem call conda install -y conda-build jinja2 pysftp
rem call conda build %CONDA_RECIPE_FOLDER%
rem Default behavior: Do not build conda package
set "BUILD_CONDA_PACKAGE=0"

rem Check for command-line arguments
if /I "%1"=="/build" (
set "BUILD_CONDA_PACKAGE=1"
)

rem If /build flag is passed, build the Conda package
if %BUILD_CONDA_PACKAGE%==1 (
echo Building Conda package...
call conda mambabuild %CONDA_RECIPE_FOLDER%
) else (
echo Skipping Conda package build...
)

rem Create necessary directories
md %DIST_PATH%
md %APP_PATH%

rem Create the conda environment
call mamba create -y --prefix %APP_PATH% chisurf -c local -c tpeulen --force
rem call conda activate %APP_PATH%

REM write setup.iss
rem call conda activate %APP_PATH%
rem Generate Inno Setup script
python make_inno_setup.py

rem Optionally deactivate conda environment
rem call conda deactivate
rem call conda activate base

REM Create an Installer with Inno Setup
"C:\Program Files (x86)\Inno Setup 5\Compil32.exe" /cc setup.iss
rem Create an installer with Inno Setup
"C:\Program Files (x86)\Inno Setup 6\Compil32.exe" /cc setup.iss

rem Cleaning step: Purge the APP_PATH folder
echo Cleaning up APP_PATH: %APP_PATH%...
rmdir /s /q %APP_PATH%

echo Script finished.

58 changes: 32 additions & 26 deletions build_tools/win/make_inno_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,45 +4,50 @@
import jinja2
import pathlib

module_path = pathlib.Path("../../chisurf").absolute().resolve()
setup_path = pathlib.Path("../..").absolute().resolve()
sys.path.append(str(module_path.resolve()))
sys.path.append(str(setup_path.resolve()))
path = pathlib.Path(module_path)

import info
from setup import gui_scripts

# append the relative location you want to import from
# import your module stored in '../common'
module_path = pathlib.Path("../../")
source_dir = pathlib.Path("../../dist/win/").absolute()
output_dir = pathlib.Path("../../dist/").absolute()
license_file = str((module_path / "LICENSE").absolute())
source_dir = pathlib.Path("../../").resolve()
output_dir = pathlib.Path("../../dist/").resolve()
license_file = str((source_dir / "LICENSE").resolve())
icon_file = str(path) + info.setup_icon

print("module_path:", module_path.resolve())
print("source_dir:", source_dir.resolve())
print("output_dir:", output_dir.resolve())
print("license_file:", license_file)
print("icon_file:", icon_file)

vc_runtime_path = "VC++ runtimes/"
vc_runtimes = [os.path.basename(f) for f in glob.glob(vc_runtime_path+"/*.exe")]

sys.path.append(str(module_path.absolute()))
path = pathlib.Path(module_path)
print(sys.path)

setup_file = module_path / "setup.py"
ns = dict()
with open(setup_file) as f:
lines = f.readlines()
# omit last line so that setup() is not called
s = "".join(lines[:-2])
code = compile(s, '<string>', 'exec')
exec(code)

# the parameters come from the setup.py
parameters = {
"AppId": __app_id__,
"AppName": __name__,
"AppVersion": __version__,
"AppPublisher": __author__,
"AppPublisherURL": __url__,
"AppSupportURL": __url__,
"AppUpdatesURL": __url__,
"DefaultGroupName": __name__,
"AppId": info.__app_id__,
"AppName": info.__name__,
"AppVersion": info.__version__,
"AppPublisher": info.__author__,
"AppURL": info.__url__,
"AppPublisherURL": info.__url__,
"AppSupportURL": info.__url__,
"AppUpdatesURL": info.__url__,
"DefaultGroupName": info.__name__,
"SourceDir": source_dir,
"Output_dir": output_dir,
"gui_entry_points": gui_scripts,
"LicenseFile": license_file,
"vc_runtime_path": vc_runtime_path,
"vc_runtimes": vc_runtimes
"vc_runtimes": vc_runtimes,
"SetupIconFile": icon_file,
"gui_entry_points": gui_scripts
}


Expand All @@ -51,6 +56,7 @@
inno_template += fp.read()
t = jinja2.Template(inno_template)
inno_script = t.render(**parameters)

print("------ BEGIN INNO SETUP FILE ------")
print(inno_script)
print("------ END INNO SETUP FILE ------")
Expand Down
24 changes: 11 additions & 13 deletions build_tools/win/setup_template.iss
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,23 @@ UsePreviousAppDir=no
DefaultGroupName={{ AppName }}
LicenseFile={{ LicenseFile }}
OutputDir={{ Output_dir }}
OutputBaseFilename=setup_{{ AppVersion }}
SetupIconFile=icons\icon.ico
OutputBaseFilename=setup-{{ AppVersion }}
SetupIconFile={{ SetupIconFile }}
Compression=lzma2/ultra64
;Compression=lzma2/fast
;Compression=none
SolidCompression=yes
CompressionThreads=4
CompressionThreads=8
UninstallLogMode=overwrite
DirExistsWarning=yes
UninstallDisplayIcon={app}\{{ AppName }}
UninstallDisplayIcon="{app}\{{ AppName }}"
DisableProgramGroupPage=no
ArchitecturesAllowed=x64 and not arm64

;DiskSliceSize=1073741824
;DiskSpanning=true


[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

Expand All @@ -34,26 +37,21 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
[Files]
; Icon files must be explicitely included
Source: ".\icons\*.ico"; DestDir: "{app}\icons"
Source: "chisurf.cmd"; DestDir: "{app}"
Source: "{{ SourceDir }}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
;Source: "chisurf.exe"; DestDir: "{app}"
Source: "{{ SourceDir }}\dist\win\**"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

;uncomment below to add VC Runtimes
;Source: "{{ vc_runtime_path }}\*"; DestDir: {tmp}; Flags: deleteafterinstall
Source: "fix_shebangs.py"; DestDir: "{app}";

[Icons]
Name: "{group}\{cm:UninstallProgram,{{ AppName }}}"; Filename: "{uninstallexe}"
{% for entry_point in gui_entry_points %}Name: "{group}\{{ entry_point.lower() }}";Filename: "{app}\chisurf.cmd"; Parameters: {{ entry_point }}.exe;IconFilename: "{app}\icons\icon.ico";
{% for entry_point in gui_entry_points %}Name: "{group}\{{ entry_point.lower() }}";Filename: {app}\Scripts\{{entry_point}}.exe; IconFilename: "{app}\icons\icon.ico";
{% endfor %}

[UninstallDelete]
Type: files; Name: {app}\install.log
Type: files; Name: "{app}\install.log"

[Run]
;uncomment below to add VC Runtimes
;{% for vc_runtime in vc_runtimes %}Filename: {tmp}\{{ vc_runtime }}; Parameters: /q
;{% endfor %}

; We do not want the user to have the option of avoiding this script, so no 'postinstall; flag
{% for entry_point in gui_entry_points %} Filename:{app}\python.exe; WorkingDir:{app}; Parameters: "fix_shebangs.py {{ entry_point }}"; Flags: runascurrentuser runmaximized
{% endfor %}
8 changes: 7 additions & 1 deletion chisurf/info.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import pathlib
from datetime import date
today = date.today()




__name__ = "chisurf"
__author__ = "Thomas-Otavio Peulen"
__version__ = str(today.strftime("%y.%m.%d"))
Expand All @@ -12,7 +16,9 @@
__license__ = 'GPL2.1'
__status__ = "Dev"
__description__ = """ChiSurf: an interactive global analysis platform for fluorescence data."""
__app_id__ = "F25DCFFA-1234-4643-BC4F-2C3A20495937"
__app_id__ = "{{ F25DCFFA-1234-4643-BC4F-2C3A20495937 }}"
LONG_DESCRIPTION = """ChiSurf: an interactive global analysis platform for fluorescence data."""
help_url = 'https://github.com/Fluorescence-Tools/chisurf/wiki'
update_url = 'https://github.com/Fluorescence-Tools/chisurf/releases'
setup_icon = "/gui/resources/icons/cs_logo.ico"

4 changes: 2 additions & 2 deletions conda-recipe/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ requirements:
- python
- setuptools
- pyopencl
- pocl >=0.14 # [linux or osx]
- pocl >=0.14 # [linux or osx]
- oclgrind # [win]
- typing_extensions <=4.5
- cython
Expand All @@ -38,7 +38,7 @@ requirements:
- setuptools
- cython
- pyopencl
- pocl >=0.14 # [linux or osx]
- pocl >=0.14 # [linux or osx]
- oclgrind # [win]
- typing_extensions <=4.5
- pyyaml
Expand Down
34 changes: 18 additions & 16 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/python
import platform
import pathlib
from setuptools import setup, find_packages, Extension
try:
from Cython.Distutils import build_ext
Expand All @@ -18,6 +19,19 @@
URL = info.__url__
EMAIL = info.__email__

def dict_from_txt(fn):
d = {}
with open(fn) as f:
for line in f:
(key, val) = line.split()
d[str(key)] = val
return d


script_directory = pathlib.Path(__file__).parent.absolute()
gui_scripts = dict_from_txt(script_directory / "chisurf/entry_points/gui.txt")
console_scripts = dict_from_txt(script_directory / "chisurf/entry_points/cmd.txt")


def get_extensions():

Expand Down Expand Up @@ -72,19 +86,6 @@ def make_extension(ext):
return list()


def dict_from_txt(fn):
d = {}
with open(fn) as f:
for line in f:
(key, val) = line.split()
d[str(key)] = val
return d


gui_scripts = dict_from_txt("./chisurf/entry_points/gui.txt")
console_scripts = dict_from_txt("./chisurf/entry_points/cmd.txt")


metadata = dict(
name=NAME,
version=VERSION,
Expand Down Expand Up @@ -143,12 +144,13 @@ def dict_from_txt(fn):
},
entry_points={
"console_scripts": [
"%s=%s" % (key, console_scripts[key]) for key in console_scripts
f"{key}={console_scripts[key]}" for key in console_scripts
],
"gui_scripts": [
"%s=%s" % (key, gui_scripts[key]) for key in gui_scripts
f"{key}={gui_scripts[key]}" for key in gui_scripts
]
}
)

setup(**metadata)
if __name__ == "__main__":
setup(**metadata)

0 comments on commit 259150f

Please sign in to comment.