RobinSchmidt / RS-MET

Codebase for RS-MET products (Robin Schmidt's Music Engineering Tools)
Other
55 stars 6 forks source link

inno setup install script #142

Open elanhickler opened 6 years ago

elanhickler commented 6 years ago

Inno Script Studio: https://www.kymoto.org/products/inno-script-studio

Here's my script for Torus Generator. This needs improvement, currently there's two separate pages, one for putting in VST 32, one for putting in VST 64 directory. Other people have a single page for stuff like this. If you get into this, let me know if you figure out how to make the installer more convenient.

; Script generated by the Inno Script Studio Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define AppName "Torus Generator"
#define InstallerOutputFolder = "Soundemote_-_Torus_Generator"
#define AppVersion "1.0.0"
#define AppPublisher "Soundemote"
#define AppURL "http://www.soundemote.com/"

[Setup]
AppName={#AppName}
AppVersion={#AppVersion}
AppPublisher={#AppPublisher}
AppPublisherURL={#AppURL}
AppSupportURL={#AppURL}
AppUpdatesURL={#AppURL}
DefaultDirName={pf}\{#AppPublisher}\{#AppName}
DefaultGroupName={#AppName}
AllowNoIcons=yes
OutputDir=D:\Desktop\BUILDS\{#InstallerOutputFolder}
OutputBaseFilename={#AppName} Installer
Compression=lzma
SolidCompression=yes

InfoBeforeFile=intro.txt

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

[Types]
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Files]
Source: "Presets\*"; DestDir: "{commonappdata}\{#AppPublisher}\{#AppName}\Presets"; Flags: ignoreversion recursesubdirs createallsubdirs promptifolder; Components: Presets
Source: "..\Builds\VisualStudio2015\x64\Release\VST\{#AppName} (x64).dll"; DestDir: "{code:GetVST2Dir_64}"; Flags: ignoreversion 64bit; Components: VST2_64;
Source: "..\Builds\VisualStudio2015\Win32\Release\VST\{#AppName} (x86).dll"; DestDir: "{code:GetVST2Dir_32}"; Flags: ignoreversion 32bit; Components: VST2_32;

[Components]
Name: "Presets"; Description: "Check this to install Presets -> WARNING: This will overwrite all factory presets, have you saved custom presets over the factory presets?"; Types: custom; Flags: checkablealone
Name: "VST2_64"; Description: "64-bit VST2 Plugin (.dll)"; Types: custom; Flags: checkablealone
Name: "VST2_32"; Description: "32-bit VST2 Plugin (.dll)"; Types: custom; Flags: checkablealone

[Code]
var
  OkToCopyLog : Boolean;
  PresetsDirPage: TInputDirWizardPage;
  VST2DirPage_64: TInputDirWizardPage;
  VST2DirPage_32: TInputDirWizardPage;  

procedure InitializeWizard;
begin
  if IsWin64 then begin
    VST2DirPage_64 := CreateInputDirPage(wpSelectDir,
    'Confirm {#AppName} 64-Bit VST2 Plugin Directory', '',
    'Select the 64-bit VST2 Plugin folder.',
    False, '');
    VST2DirPage_64.Add('');
    VST2DirPage_64.Values[0] := ExpandConstant('{cf64}\VST2');

    VST2DirPage_32 := CreateInputDirPage(wpSelectDir,
      'Confirm {#AppName} 32-Bit VST2 Plugin Directory', '',
      'Select the 32-bit VST2 Plugin folder.',
      False, '');
    VST2DirPage_32.Add('');
    VST2DirPage_32.Values[0] := ExpandConstant('{cf32}\VST2\');
  end else begin
    VST2DirPage_32 := CreateInputDirPage(wpSelectDir,
      'Confirm {#AppName} 32-Bit VST2 Plugin Directory', '',
      'Select the 32-bit VST2 Plugin folder.',
      False, '');
    VST2DirPage_32.Add('');
    VST2DirPage_32.Values[0] := ExpandConstant('{cf32}\VST2\');
  end;
(*
  PresetsDirPage := CreateInputDirPage(wpSelectDir,
  'Confirm {#AppName} Factory Presets Directory', '',
  'Where should the Factory Presets be installed?',
  False, '');
PresetsDirPage.Add('');
PresetsDirPage.Values[0] := ExpandConstant('{commonappdata}\{#AppPublisher}\{#AppName}\Presets');
*)
end;

function GetVST2Dir_64(Param: String): String;
begin
  Result := VST2DirPage_64.Values[0]
end; 

function GetVST2Dir_32(Param: String): String;
begin
  Result := VST2DirPage_32.Values[0]
end;

(* 
function GetPresetsDir(Param: String): String;
 begin
  Result := PresetsDirPage.Values[0]
end;
*)
elanhickler commented 6 years ago

here's jim's original script which has a few more things in it

#define AppName "Radio"
#define CompanyName "Credland"
#define VisualStudioBaseBuilds ".\Builds\VisualStudio2015"

[Setup]
AppName={#AppName}
AppVersion={#VersionString}
DefaultDirName={pf}\{#CompanyName}\{#AppName}
DefaultGroupName={#AppName}
Compression=lzma2
SolidCompression=yes
OutputDir=.\installer\build\
ArchitecturesInstallIn64BitMode=x64
OutputBaseFilename={#AppName} Installer
LicenseFile=installer\license.txt
InfoAfterFile=installer\readme.rtf
InfoBeforeFile=installer\intro.txt
SetupLogging=yes
DisableDirPage=yes
SourceDir=..

[Types]
Name: "full"; Description: "Full installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "app"; Description: "Standalone application (.exe)"; Types: full custom;
Name: "vst2_32"; Description: "32-bit VST2 Plugin (.dll)"; Types: full custom;
Name: "vst2_64"; Description: "64-bit VST2 Plugin (.dll)"; Types: full custom; Check: Is64BitInstallMode;
;Name: "vst3_32"; Description: "32-bit VST3 Plugin (.vst3)"; Types: full custom;
;Name: "vst3_64"; Description: "64-bit VST3 Plugin (.vst3)"; Types: full custom; Check: Is64BitInstallMode;
;Name: "rtas_32"; Description: "32-bit RTAS Plugin (.dpm)"; Types: full custom;
;Name: "aax_32"; Description: "32-bit AAX Plugin (Protools 10.3.6+) (.aaxplugin)"; Types: full custom;
Name: "aax_64"; Description: "64-bit AAX Plugin (Protools 11+) (.aaxplugin)"; Types: full custom; Check: Is64BitInstallMode;
;Name: "manual"; Description: "User guide"; Types: full custom; Flags: fixed

[Tasks]
Name: desktopicon; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Components: app

[Files]
Source: "{#VisualStudioBaseBuilds}\Win32\32BitRelease\VST\{#AppName}32.dll"; DestDir: {code:GetVST2Dir_32}; Check: not Is64BitInstallMode; Components:vst2_32; Flags: ignoreversion;
Source: "{#VisualStudioBaseBuilds}\Win32\32BitRelease\VST\{#AppName}32.dll"; DestDir: {code:GetVST2Dir_32}; Check: Is64BitInstallMode; Components:vst2_32; Flags: ignoreversion;
Source: "{#VisualStudioBaseBuilds}\x64\64BitRelease\VST\{#AppName}.dll"; DestDir: {code:GetVST2Dir_64}; Check: Is64BitInstallMode; Components:vst2_64; Flags: ignoreversion;
Source: "{#VisualStudioBaseBuilds}\x64\64BitRelease\AAX\{#AppName}.aaxplugin\*.*"; DestDir: "{cf64}\Avid\Audio\Plug-Ins\{#AppName}.aaxplugin\"; Components:aax_64; Flags: ignoreversion recursesubdirs;

; application
Source: "{#VisualStudioBaseBuilds}\Win32\32BitRelease\Standalone Plugin\{#AppName}32.exe"; DestName: "Radio.exe"; DestDir: "{pf32}\Credland\Radio"; Flags: ignoreversion;

; libraries
Source: ".\libs.win\bass\32bit\*"; DestDir: {pf32}\Credland\Radio; 
Source: ".\libs.win\bass\64bit\*"; Check: IsWin64; DestDir: {pf64}\Credland\Radio;

Source: ".\installer\readme.rtf"; DestDir: "{app}"
Source: ".\installer\license.txt"; DestDir: "{app}"
Source: ".\installer\intro.txt"; DestDir: "{app}"
Source: ".\installer\windows.ico"; DestDir: "{app}"

Source: ".\common\{#CompanyName}\*"; DestDir: "{commonappdata}\{#CompanyName}\"; Flags: recursesubdirs

[Icons]
Name: "{group}\Radio"; Filename: "{pf32}\Credland\Radio\Radio.exe"; 
Name: "{userdesktop}\Radio"; Filename: "{pf32}\Credland\Radio\Radio.exe"; Tasks: desktopicon; 
;Name: "{group}\User guide"; Filename: "{app}\Radio_manual.pdf"
;Name: "{group}\Changelog"; Filename: "{app}\changelog.txt"
;Name: "{group}\readme"; Filename: "{app}\readme.rtf"
Name: "{group}\Uninstall Radio"; Filename: "{app}\unins000.exe"

;[Dirs] 
;Name: {cf}\Digidesign\DAE\Plugins\

[Code]
var
  OkToCopyLog : Boolean;
  VST2DirPage_32: TInputDirWizardPage;
  VST2DirPage_64: TInputDirWizardPage;

procedure InitializeWizard;
begin
  if IsWin64 then begin
    VST2DirPage_64 := CreateInputDirPage(wpSelectDir,
    'Confirm 64-Bit VST2 Plugin Directory', '',
    'Select the folder in which setup should install the 64-bit VST2 Plugin, then click Next.',
    False, '');
    VST2DirPage_64.Add('');
    VST2DirPage_64.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}\');

    VST2DirPage_32 := CreateInputDirPage(wpSelectDir,
      'Confirm 32-Bit VST2 Plugin Directory', '',
      'Select the folder in which setup should install the 32-bit VST2 Plugin, then click Next.',
      False, '');
    VST2DirPage_32.Add('');
    VST2DirPage_32.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432NODE\VST,VSTPluginsPath|{pf32}\Steinberg\VSTPlugins}\');
  end else begin
    VST2DirPage_32 := CreateInputDirPage(wpSelectDir,
      'Confirm 32-Bit VST2 Plugin Directory', '',
      'Select the folder in which setup should install the 32-bit VST2 Plugin, then click Next.',
      False, '');
    VST2DirPage_32.Add('');
    VST2DirPage_32.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}\');
  end;
end;

function GetVST2Dir_32(Param: String): String;
begin
  Result := VST2DirPage_32.Values[0]
end;

function GetVST2Dir_64(Param: String): String;
begin
  Result := VST2DirPage_64.Values[0]
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
    OkToCopyLog := True;
end;

procedure DeinitializeSetup();
begin
  if OkToCopyLog then
    FileCopy (ExpandConstant ('{log}'), ExpandConstant ('{app}\InstallationLogFile.log'), FALSE);
  RestartReplace (ExpandConstant ('{log}'), '');
end;

[UninstallDelete]
Type: files; Name: "{app}\InstallationLogFile.log"
RobinSchmidt commented 6 years ago

If you get into this, let me know if you figure out how to make the installer more convenient.

for the initial release of ToolChain (scheduled for sunday - i'm playing santa claus - haha :-)), i'll probably rely on manual installation. i'll have to learn this installer-building stuff myself from scratch. i once dabbled with it but that's long ago and i have forgotten everything. as i'm not planning to have several separate products but lump everything into ToolChain, it's actually a kind of of set-and-forget, do-once-and-for-all thing - so i'll probably do it at some point. but maybe not for the initial release - we'll see

elanhickler commented 6 years ago

so i'll probably do it at some point. but maybe not for the initial release

uhhhh... no.

give me your files, ill make a mac and win installer for you jeezmus. it's easy. let me just do it... oh but I need to know where your programs expect presets to be so I can put it there... well, I don't know how far you've gotten into being compatible with the rest of the world in terms of paths................ đŸ˜•

RobinSchmidt commented 6 years ago

oh - thank you! i've not yet decided, where to locate the support-folder (i think, on mac it's standardized? i'll have to look up our old threads. but on win ...maybe in the user's documents folder?). i'm just implementing the infrastructure to make these things easy to set up in AudioModule (maybe have a look at my recent additions)

my idea is to have a global "support-folder" which then can have subfolders "Presets", "Samples", etc. currently, that support-folder is assumed to be the dll-folder but i'm just making that adjustable.

elanhickler commented 6 years ago

Windows

VST:

Mac

VST


* After the company folder, you can do whatever you want, these are just generally used suggestions. There's no standard folder structures, only standard places to put the base folder or file.

RobinSchmidt commented 6 years ago

i guess, i may just go with whatever juce::File::getSpecialLocation(juce::File::userApplicationDataDirectory); returns, append "/RS-MET" and use that as root folder for all support files. you can then do the same using your company name (i may have to figure out how to make that switchable from client code side). i checked on windows - there it indeed returns that ....AppData/Roaming folder

RobinSchmidt commented 6 years ago

...hmm...thinking about it, do different versions of windows and/or mac-os use the same folder for this? ...or else, can we tell the installer to inquire this directory, too? otherwise, we may end up installing into a folder which is non-standard for the user's os

RobinSchmidt commented 6 years ago

i wonder, if i should have separate downloads (and installers) for the actual product (.dll, .so, .component) and the support files. maybe it's not really vital at the moment, but it may make more sense, when the support folder contains a lot of data (for example: samples - which i want to provide more at some point)

elanhickler commented 6 years ago

the user can disable installing certain components.

elanhickler commented 6 years ago

also, don't use userApplicationDirectory, use globalApplicationsDirectory if anything... don't put non-user-specific files in the user folder, that would be bad if the computer has multiple users and the program needs access to non-user-specific files.

RobinSchmidt commented 6 years ago

i'm using userApplicationDataDirectory

edit: do you think commonDocumentsDirectory would be better? that would make the presets available for all users on the machine

edit2: hmm, this commonDocumentsDirectory folder seems to be "C:\Users\Public\Public Documents" on my windows 8.1 machine (well, such a folder exists, at least), but the juce function returns "C:\Users\Public\Documents"

RobinSchmidt commented 6 years ago

somehow i really dislike the whole idea of storing user data on drive c. that's what we have drives d or e for (preferably a physically different drive). however, my former usage of the dll directory had the same problem anyway

RobinSchmidt commented 6 years ago

the user can disable installing certain components.

i see, but i think, in this case, it makes more sense, if s/he wouldn't have to download the not-needed components. i mean, if i provide the full set of possibilities vst2/3, x86/x64, standalone, etc. and the user wants only one of them, the download package size would be 6x as large as it would have to be....or does the compression reduce this factor significantly? i suppose, since it's all binary, maybe not - on the other hand, most of the code is the same, so it's inherently highly redundant.

although, i'm not sure, if i will support all formats...i actually think, vst2/x64 for pc and au/x64 for mac is enough, at least initially...and then maybe see, if other formats are actually requested

elanhickler commented 6 years ago

the download package size would be 6x as large as it would have to be

it would be silly to have 6 installers

edit: also there's compression

elanhickler commented 6 years ago

Are you going to send me all the release files before / on sunday?

RobinSchmidt commented 6 years ago

i will try to wrap it up on saturday. but maybe, if i need to fix some thing on sunday, i hope, i can then easily rebuild the installer myself? can you give me the script files along with some info how to use them?

elanhickler commented 6 years ago

yes, one click rebuild

RobinSchmidt commented 6 years ago

ok - i have put together everything needed for release. i created a new thread for this: https://github.com/RobinSchmidt/RS-MET/issues/146