Windows XP compatibility with Juce 6.0.7

Should Juce 6.0.7 still allow targeting Windows XP?

From what I’ve read on the forum, it should, I think.
I searched for ‘Windows XP’ in this forum and found the following two topics (one very new, another not too old)

Also the Juce 6.0.7 Projucer still gives me the possibility to select ‘v141_xp’ as Platform Toolset - which also makes me believe it still should support targeting Windows XP (SP 3).

I upgraded an old project of mine from Juce 3.2.0 to newest Juce 6.0.7.
Now it looks quite good, but on Windows XP (which this project still wants to support) I now get
'The procedure entry point CreateSymbolicLinkW could not be located in the dynamic link library ‘KERNEL32.dll’.

So I created an absolutely new mini VST project with the 6.0.7 Projucer just to see how that goes,
but it gives me the exactly same error on Windows XP.

In my upgraded project I tried what would happen if I out-comment the related code in juce_File.cpp and then I do not anymore get the aforementioned error, but instead I get a similar error for function ‘InitializeSRWLock’.
Also the ‘new’ code in the native Windows FileChooser looks to me as it wouldn’t be compatible with Windows XP.

Would I need to tweak something in the header files (e.g. in ‘juce_BasicNativeHeaders.h’) to make this work - or is there no more Windows XP compatibility with Juce 6.0.7?

I’m not even sure Microsoft supports this…

Not sure if it’s still possible with 6.0.7, but back when I still supported XP on Juce 5, it required some extra settings found by @kunz:

Thanks!
I already have these settings (/MT and that extra compiler switch /Zc:threadSafeInit-) and my project runs fine on Windows XP when built with Juce 3.2.0. But when built with Juce 6.0.7 with those same settings, then it doesn’t anymore, because Juce uses some Windows API functions in its newer code which are not available on XP. I thought that maybe there is a Juce flag or something so that it would not use that code - something like an additional ‘Windows XP compatibility’ define - but I couldn’t find so far.

@matthieu-brucher
In my opinion it does, because it still allows to use the ‘v141_xp’ toolset in Visual Studio 2019 for this purpose.
It’s more about Juce here.
It also allows to use this toolset in it’s newest Projucer, thus I thought it should still support Windows XP.
Also I nowhere read (e.g. in the ‘BREAKING-CHANGES.txt’ file), that Juce wouldn’t support XP anymore (I read thru his file before I decided to give upgrading to Juce 6.0.7 for my project a try).

Requirements are not hard to find (but TBH are not as easy as it should):

@nicolasdanet
Ooops, I guess I should have found them…
It might be that I didn’t look hard enough, because of this ‘v141_xp’ toolset, which is offered in the ProJucer.
Is this also required for Vista for some reason, or could it just be removed in future versions of Juce to avoid confusion?
And I also looked at the Breaking Changes text files and would have expected to find something about Juce not anymore supporting XP in there, since for me such a change would qualify for a breaking change - but I need to admit, that that Breaking Changes files ‘only’ starts from 4.2.1, thus it could well be that this change happened somewhere between 3.2.0 and 4.2.1.

Anyway - thanks for the links, which give the required information!

By the way, I completely understand that support for XP isn’t there anymore and I think it’s a great effort from the Juce team to still support as old systems as Vista on the Windows line!

In the past, end of support for a platform was not always very well defined with JUCE. Sometimes it was not officially supported but changes could be made to make it works. Depending to an arbitrary work/audience ratio. It was a bit annoying in my case when i was stucked to a MacOS 10.6 platform without a C++11 compiler. JUCE was broken all the time (for me), and i had to moan every week. Frankly it was a bit tedious (for me) and also i guess for the JUCE team (and also for other users that dislike the energy lost by the JUCE devs in such specific tasks). :smile:

Thanks again @nicolasdanet !
Oh, I thought you might be from the Juce team…
If I remember correctly I think I already did some (really small) tweaks in the Juce 3.2.0 project variant some years ago in the Juce modules to make it work on Windows XP, but this time I guess there will be too many places to change the original Juce code to accomplish this - and I will probably just decide to drop XP support now too.

@ Someone from the Juce team.

Does it still make sense to keep the v141_xp ’ toolset in the ProJucer?
Or would it be less confusing to remove it and maybe document somewhere that if somebody really still would require to support XP, that they would need to change this manually and then expect to do some tweaking?

It just lists the toolset supported by the installed compiler. They would need extra code to filter those out.

Ah, okay, I see.
Thanks!