I recently packaged botan for Windows using InnoSetup, an open source installation creator. Overall I was pretty pleased with it - it seems to do everything I need it to do without much of a hassle, and I'll probably use it in the future if I need to package other programs or tools for Windows.
After I got the basic package working, a nit I wanted to deal with was converting the line endings of all the header files and plain-text documentation (readme, license file, etc) to use Windows line endings. While many Windows programs, including Wordpad and Visual Studio, can deal with files with Unix line endings, not all do, and it seemed like it would be a nice touch if the files were not completely unreadable if opened in Notepad.
There is no built in support for this, but InnoSetup includes a scripting facility (using Pascal!), including hooks that can be called at various points in the installation process, including immediately after a file is installed, which handles this sort of problem perfectly. So all that was required was to learn enough Pascal to write the function. I've included it below to help anyone who might be searching for a similar facility:
[Code] const LF = #10; CR = #13; CRLF = CR + LF; procedure ConvertLineEndings(); var FilePath : String; FileContents : String; begin FilePath := ExpandConstant(CurrentFileName) LoadStringFromFile(FilePath, FileContents); StringChangeEx(FileContents, LF, CRLF, False); SaveStringToFile(FilePath, FileContents, False); end;
Adding the hook with AfterInstall: ConvertLineEndings caused this function to run on each of my text and include files.