1

Why can't I use a wildcard for this?

[CustomMessages]

; ==================================================================
; Inno Download Plugin custom messages

#include ".\idplang\Arabic.iss"
#include ".\idplang\Bulgarian.iss"
#include ".\idplang\ChineseSimplified.iss"
#include ".\idplang\Croatian.iss"
#include ".\idplang\Czech.iss"
#include ".\idplang\Danish.iss"
#include ".\idplang\Finnish.iss"
#include ".\idplang\French.iss"
#include ".\idplang\German.iss"
#include ".\idplang\Hungarian.iss"
#include ".\idplang\Italian.iss"
#include ".\idplang\Japanese.iss"
#include ".\idplang\Polish.iss"
#include ".\idplang\PortugueseBrazil.iss"
#include ".\idplang\PortuguesePortugal.iss"
#include ".\idplang\Romanian.iss"
#include ".\idplang\Russian.iss"
#include ".\idplang\Spanish.iss"
#include ".\idplang\Turkish.iss"

I tried:

#include ".\idplang\*.iss"

It does not like it:

D:\My Programs\2019\MeetSchedAssist\Inno\MeetSchedAssist2019_v6.iss(660,1): error : Error on line 660: [ISPP] File not found: "D:\My Programs\2019\MeetSchedAssist\Inno\.\idplang\*.iss".

Here is another example in my installer (and I have another in the [Registry] section):

#include AddBackslash(SourcePath) + ".\l.afk\CustomMessagesAfrikaans.txt"
#include AddBackslash(SourcePath) + ".\l.sqi\CustomMessagesAlbanian.txt"
#include AddBackslash(SourcePath) + ".\l.ara\CustomMessagesArabic.txt"
#include AddBackslash(SourcePath) + ".\l.hye\CustomMessagesArmenian.txt"
#include AddBackslash(SourcePath) + ".\l.bgr\CustomMessagesBulgarian.txt"
#include AddBackslash(SourcePath) + ".\l.chs\CustomMessagesChineseSimplified.txt"
#include AddBackslash(SourcePath) + ".\l.hrv\CustomMessagesCroatian.txt"
#include AddBackslash(SourcePath) + ".\l.csy\CustomMessagesCzech.txt"
#include AddBackslash(SourcePath) + ".\l.dan\CustomMessagesDanish.txt"
#include AddBackslash(SourcePath) + ".\l.nld\CustomMessagesDutch.txt"
#include AddBackslash(SourcePath) + ".\l.eti\CustomMessagesEstonian.txt"
#include AddBackslash(SourcePath) + ".\l.fin\CustomMessagesFinnish.txt"
#include AddBackslash(SourcePath) + ".\l.fra\CustomMessagesFrench.txt"
#include AddBackslash(SourcePath) + ".\l.deu\CustomMessagesGerman.txt"
#include AddBackslash(SourcePath) + ".\l.ell\CustomMessagesGreek.txt"
#include AddBackslash(SourcePath) + ".\l.hin\CustomMessagesHindi.txt"
#include AddBackslash(SourcePath) + ".\l.hun\CustomMessagesHungarian.txt"
#include AddBackslash(SourcePath) + ".\l.ind\CustomMessagesIndonesian.txt"
#include AddBackslash(SourcePath) + ".\l.ita\CustomMessagesItalian.txt"
#include AddBackslash(SourcePath) + ".\l.jpn\CustomMessagesJapanese.txt"
#include AddBackslash(SourcePath) + ".\l.plk\CustomMessagesPolish.txt"
#include AddBackslash(SourcePath) + ".\l.ptb\CustomMessagesPortuguese.txt"
#include AddBackslash(SourcePath) + ".\l.ptg\CustomMessagesPortuguesePortugal.txt"
#include AddBackslash(SourcePath) + ".\l.rom\CustomMessagesRomanian.txt"
#include AddBackslash(SourcePath) + ".\l.rus\CustomMessagesRussian.txt"
#include AddBackslash(SourcePath) + ".\l.slv\CustomMessagesSlovenian.txt"
#include AddBackslash(SourcePath) + ".\l.esp\CustomMessagesSpanish.txt"
#include AddBackslash(SourcePath) + ".\l.sve\CustomMessagesSwedish.txt"
#include AddBackslash(SourcePath) + ".\l.trk\CustomMessagesTurkish.txt"
#include AddBackslash(SourcePath) + ".\l.ukr\CustomMessagesUkrainian.txt"
Martin Prikryl
  • 188,800
  • 56
  • 490
  • 992
Andrew Truckle
  • 17,769
  • 16
  • 66
  • 164

1 Answers1

2

You cannot use wildcard in the #include directive.

But you can use a preprocessor code like this:

#define IncludeFolder ".\idplang\"

#define FindHandle
#define FindResult

#sub IncludeFoundFile
  #include IncludeFolder + FindGetFileName(FindHandle)
#endsub

#for {FindHandle = FindResult = FindFirst(IncludeFolder + "*.iss", faAnyFile); \
      FindResult; FindResult = FindNext(FindHandle)} IncludeFoundFile
#expr FindClose(FindHandle)

Another option is implementing a recursive preprocessor function. It has size limitations though. But on the other hand, it can be reused, if you need to include another set of files elsewhere. And it makes it easier to implement a recursive include:

#define IncludeFileLine(Handle) \
    !FileEof(Handle) ? FileRead(Handle) + NewLine + IncludeFileLine(Handle) : ""

#define IncludeFile(Source) \
    Local[0] = FileOpen(Source), \
    Local[1] = IncludeFileLine(Local[0]), \
    FileClose(Local[0]), \
    Local[1]

#define IncludeFileInFolder(Source, FindResult, FindHandle) \
    FindResult \
        ? \
            Local[0] = FindGetFileName(FindHandle), \
            Local[1] = Source + "\\" + Local[0], \
            (Local[0] != "." && Local[0] != ".." \
                ? (DirExists(Local[1]) ? \
                      IncludeFilesInFolder(Local[1]) : IncludeFile(Local[1])) \
                : "") + \
            IncludeFileInFolder(Source, FindNext(FindHandle), FindHandle) \
        : \
            ""

#define IncludeFilesInFolder(Source) \
    Local[0] = FindFirst(Source + "\\*", faAnyFile), \
    Local[1] = IncludeFileInFolder(Source, Local[0], Local[0]), \
    FindClose(Local[0]), \
    Local[1]

Use it like:

#emit IncludeFilesInFolder(AddBackslash(SourcePath) + "idplang")
Martin Prikryl
  • 188,800
  • 56
  • 490
  • 992