Correct me if I'm wrong but here's what I've gathered so far:
- makensis should only call standard library (no win32 calls if possible).
- if win32/posix is needed, then we will need to do #ifdef for win32 and posix.
- makensis should be able to read various Unicode encoded files. NSI, NLF, NSH etc. These files may be UTF-8, UTF-16LE/BE, UTF-32LE/BE and we should ideally support them all.
- makensisw (Windows GUI) should be able to read outputs from makensis and display the output text to the user.
- exehead will only use win32 and will not link to any external libraries including C runtime to reduce size.
- plugins will need to handle Unicode strings.
I think point 3 is why I think we should consider linking to iconv or ICU. Point 4, I think we can deal with by using MultiByteToWideChar since we should only ever see UTF-8 coming out of makensis. And once we have iconv or ICU, I think we should convert the strings to UTF-16LE when storing them in the data section so that exehead will see UTF-16LE and not have to convert. This also means that for point 6, the plugin writers will only have to deal with the native Windows Unicode encoding.
Also, as a side note, I think we should throw out the possibility of building ANSI while doing this work. There really isn't a good argument for keeping ANSI support and it's a simplification that can help everyone conceptually get their heads around the problems.