I hate to do this, because I want to support platforms, but the impact of supporting Visual Studio is massively retarding the rate at which I write software *in general* for the library – that’s the real problem.
I am strongly motivated by finishing work. So for example right now I’m working on the benchmark app. It’ll be fantastic and unbelieveably useful and I can’t wait to get it done – that excites me, and so that motivates me.
Problem is, when I get it done, it’s *not done*. See, I need to release it. Now, for Linux, release and test is trivial. It takes minutes. Adjust the makefiles, build, run.
It could not be a more different story under Windows, when using Visual Studio.
See, there are two problems. First, I have Windows 7 – not licensed, but it doesn’t expire; but I only have a 90 day *trial* version of Windows 8. Every 90 days, when I want to use MSVC 2013, which requires Windows 8, I have to install Windows 8 from scratch, and install MSVC 2013 from scratch.
I then also need to install the kernel development kit from scratch.
Going back to Windows 7, it doesn’t expire, but I only have a trial version of MSVC 2012. That does expire, so I have to install that from scratch, and the kernel development kit from scratch – making VMs for each of these installs, since you can’t co-install these various versions of MSVC.
So; I want to make a release. Linux? run a batch file. Builds all builds, runs all test suites. One command, then wait for a bit. Done.
Windows? copy the Windws 7 VM twice (once for 2012 without WDK, once for with), make a new VM for Windows 8, install Windows 8 from scratch, install MSVC2013 from scratch, clone the VM, install the WDK on the clone.
That’s just the beginning, though. All I’ve done so far is get working tools.
At this point I need to make any new solution files which are required.
There are currently three solutions files per combination of MS tools. So that’s three for MSVC2012, three for MSVC2012+WDK, three for MSVC2013, three more for MSVC2013+WDK (Intel) and three more for MSVC2013+WDK (ARM).
I need to add another two, so that’s another two for each platform.
Setting up a new solution file is an ordeal. It takes hours and hours and hours – literally – of adjusting hundreds and hundreds of settings, click after click after click after click. The mouse is not a suitable interface for this kind of work.
It is unbelieveably tedius and fiddly and this itself makes it hard to get the solution files right. It’s like trying to line up a thousand different pins, all of which are inside a haystack.
It takes a minute, tops, under Linux, with a makefile. I just change the filenames in the makefile.
I *think* I have found a way to clone and rename solution files, but I’m not 100% sure it’s legit.
Furthermore, for the kernel solutions, I don’t actually know if I’ve set them up correctly. I can find no documentation on doing so – everything seems to rely on you following the wizards, but the wizards make no sense to me in what they come out with. I want a LIB Or DLL – I can’t see how to get it – but I know how to get it manually for non-kernel builds. I’ve tried to do the same for the kernel builds. Is it right? of course not.
So the problem is this – I am motivating by finishing. Right now, my motivation is ruined by knowing I have this appalling, awful, hideous lumphammer of work ahead of me. No matter what I do now, I’m not finished – I’m miles from finished.
Because of this, *I’m just not getting much done*.
So what I’m thinking to do is keep supporting MS, but only with the command line compilers under Windows 7 and gnumake. MS have stopped providing command line compilers, so I’ll be used old software – but liblfds is platform independent. All it really needs is threads, atomic ops and a bare C compiler – so that shouldn’t be an issue.
This also means I’ll keep supporting WDK 7.1, the obsolete WDK for Windows XP, as this is command line based. It’s crude as hell, but it basically has something like a makefile, so I configure it as I would under Linux – I adjust a file by typing, and it’s easy.
I am thinking that now and then I will construct the solutions files for MSVC and release them – i.e. port a build to MSVC by providing the build files – but I’m not going to do this as I have done till now for every release.