[Vm-dev] The insanity of using make for development builds

Jakob Reschke forums.jakob at resfarm.de
Fri Nov 30 08:54:02 UTC 2018


Hi,

If you think the gcc call is hard to find in the verbose (!) log, you can
grep/search for it.

Assuming the include directories are incorrect, starting from the error
message you obtained from the non-verbose build already, you should look up
the places in the CMakeLists.txt where the include directories are defined.
That would be commands like target_include_directories or
include_directories. Search case-insensitively since they might be written
in uppercase as well.

If you think there are too many -I in the gcc call, then there is something
wrong with the build definition. Not cmake's fault.

The lengthy configure step of cmake is only required once per change to the
build definition and for the first build, of course. So that step does not
lengthen your testing cycle, unless you are working on the build definition
itself.

Best regards,
Jakob

Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com> schrieb am Fr., 30.
Nov. 2018, 08:33:

>
>
>
> Le ven. 30 nov. 2018 à 07:46, Norbert Hartl <norbert at hartl.name> a écrit :
>
>>
>>
>>
>> Am 30.11.2018 um 01:38 schrieb Eliot Miranda <eliot.miranda at gmail.com>:
>>
>>
>>
>> On Thu, Nov 29, 2018 at 4:32 PM Eliot Miranda <eliot.miranda at gmail.com>
>> wrote:
>>
>>> thanks Todd,
>>> On Thu, Nov 29, 2018 at 3:59 PM Todd Blanchard <tblanchard at mac.com>
>>> wrote:
>>>
>>>>
>>>> Don't know if this is helpful but maybe...
>>>>
>>>>
>>>> https://stackoverflow.com/questions/2670121/using-cmake-with-gnu-make-how-can-i-see-the-exact-commands
>>>>
>>>
>>> I can really see what's going on now:
>>>
>>
>> BTW, that's 9.6 kb of text per compile command :-)  One has to laugh,
>> otherwise...
>>
>>
>> I have trouble to figure out what you are saying. First you complain you
>> don‘t see enough. Then you complain there is too much? Is there a feasible
>> amount of information generally or does it need your personal one?
>>
>> Norbert
>>
>
> Hi Norbert,
> don't make it personal.
> it's like deugging a C code which would have been pre-processed with all
> include files and macros expanded.
> it is verbosity by repetition.
> it's not designed to be understandable.
> Definitely not the level of information fitting human capabilities.
>
> Nicolas
>
>>
>>> make -C debug all
>>> make[1]: Entering directory
>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>> /usr/bin/cmake.exe -H/cygdrive/z/oscogvm
>>> -B/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug
>>> --check-build-system CMakeFiles/Makefile.cmake 0
>>> /usr/bin/cmake.exe -E cmake_progress_start
>>> /cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug/CMakeFiles
>>> /cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug/CMakeFiles/progress.marks
>>> make -f CMakeFiles/Makefile2 all
>>> make[2]: Entering directory
>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>> make -f CMakeFiles/PharoVMCore.dir/build.make
>>> CMakeFiles/PharoVMCore.dir/depend
>>> make[3]: Entering directory
>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>> cd /cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug
>>> && /usr/bin/cmake.exe -E cmake_depends "Unix Makefiles" /cygdrive/z/oscogvm
>>> /cygdrive/z/oscogvm
>>> /cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug
>>> /cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug
>>> /cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug/CMakeFiles/PharoVMCore.dir/DependInfo.cmake
>>> --color=
>>> make[3]: Leaving directory
>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>> make -f CMakeFiles/PharoVMCore.dir/build.make
>>> CMakeFiles/PharoVMCore.dir/build
>>> make[3]: Entering directory
>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>> [  1%] Building C object
>>> CMakeFiles/PharoVMCore.dir/platforms/Cross/vm/sqExternalSemaphores.c.o
>>> /usr/bin/x86_64-w64-mingw32-gcc.exe  -DBUILD_SQUEAK_STATIC
>>> -DBUILD_VM_CORE -DIMMUTABILITY=1 -DNO_ISNAN=1 -DPharoVM=1
>>> -DSQUEAK_BUILTIN_PLUGIN -DUSE_GLOBAL_STRUCT=0 -DUSE_INLINE_MEMORY_ACCESSORS
>>> -DVM_NAME=\"Pharo\" -D_GNU_SOURCE -I/cygdrive/z/oscogvm/.
>>> -I/cygdrive/z/oscogvm/include -I/cygdrive/z/oscogvm/platforms/Cross/vm
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins
>>> -I/cygdrive/z/oscogvm/spur64src/vm -I/usr/include/SDL2
>>> -I/cygdrive/z/oscogvm/platforms/minheadless/common
>>> -I/cygdrive/z/oscogvm/platforms/minheadless/unix
>>> -I/cygdrive/z/oscogvm/src/plugins/SqueakFFIPrims
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SqueakFFIPrims
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SqueakFFIPrims
>>> -I/cygdrive/z/oscogvm/src/plugins/IA32ABI
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/IA32ABI
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/IA32ABI
>>> -I/cygdrive/z/oscogvm/src/plugins/FilePlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/FilePlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/FilePlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/FileAttributesPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/FileAttributesPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/FileAttributesPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/LargeIntegers
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/LargeIntegers
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/LargeIntegers
>>> -I/cygdrive/z/oscogvm/src/plugins/LocalePlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/LocalePlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/LocalePlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/MiscPrimitivePlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/MiscPrimitivePlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/MiscPrimitivePlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/SecurityPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SecurityPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SecurityPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/SocketPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SocketPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SocketPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/B2DPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/B2DPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/B2DPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/BitBltPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/BitBltPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/BitBltPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/FloatArrayPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/FloatArrayPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/FloatArrayPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/FloatMathPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/FloatMathPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/FloatMathPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/Matrix2x3Plugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/Matrix2x3Plugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/Matrix2x3Plugin
>>> -I/cygdrive/z/oscogvm/src/plugins/SurfacePlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SurfacePlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SurfacePlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/DropPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/DropPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/DropPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/ZipPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/ZipPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/ZipPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/ADPCMCodecPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/ADPCMCodecPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/ADPCMCodecPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/AsynchFilePlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/AsynchFilePlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/AsynchFilePlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/BMPReadWriterPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/BMPReadWriterPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/BMPReadWriterPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/DSAPrims
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/DSAPrims
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/DSAPrims
>>> -I/cygdrive/z/oscogvm/src/plugins/FFTPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/FFTPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/FFTPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/FileCopyPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/FileCopyPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/FileCopyPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/JoystickTabletPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/JoystickTabletPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/JoystickTabletPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/MIDIPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/MIDIPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/MIDIPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/SerialPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SerialPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SerialPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/SoundCodecPrims
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SoundCodecPrims
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SoundCodecPrims
>>> -I/cygdrive/z/oscogvm/src/plugins/SoundGenerationPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SoundGenerationPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SoundGenerationPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/StarSqueakPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/StarSqueakPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/StarSqueakPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/JPEGReaderPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/JPEGReaderPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/JPEGReaderPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/JPEGReadWriter2Plugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/JPEGReadWriter2Plugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/JPEGReadWriter2Plugin
>>> -I/cygdrive/z/oscogvm/src/plugins/RePlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/RePlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/RePlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/InternetConfigPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/InternetConfigPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/InternetConfigPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/SqueakSSL
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SqueakSSL
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SqueakSSL
>>> -I/cygdrive/z/oscogvm/src/plugins/AioPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/AioPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/AioPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/EventsHandlerPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/EventsHandlerPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/EventsHandlerPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/SDL2DisplayPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/SDL2DisplayPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/SDL2DisplayPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/Mpeg3Plugin/libmpeg
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/Mpeg3Plugin/libmpeg/audio
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/Mpeg3Plugin/libmpeg/video
>>> -I/cygdrive/z/oscogvm/src/plugins/Mpeg3Plugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/Mpeg3Plugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/Mpeg3Plugin
>>> -I/usr/include/freetype2 -I/cygdrive/z/oscogvm/src/plugins/FT2Plugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/FT2Plugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/FT2Plugin
>>> -I/cygdrive/z/oscogvm/src/plugins/VMProfileLinuxSupportPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/VMProfileLinuxSupportPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/VMProfileLinuxSupportPlugin
>>> -I/cygdrive/z/oscogvm/src/plugins/UnixOSProcessPlugin
>>> -I/cygdrive/z/oscogvm/platforms/unix/plugins/UnixOSProcessPlugin
>>> -I/cygdrive/z/oscogvm/platforms/Cross/plugins/UnixOSProcessPlugin
>>> -I/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug
>>>  -pthread -g  -DDEBUGVM=1   -o
>>> CMakeFiles/PharoVMCore.dir/platforms/Cross/vm/sqExternalSemaphores.c.o   -c
>>> /cygdrive/z/oscogvm/platforms/Cross/vm/sqExternalSemaphores.c
>>> make[3]: Leaving directory
>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>> make[2]: Leaving directory
>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>> make[1]: Leaving directory
>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>>
>>> No wonder cmake hides the output by default ;-)
>>>
>>> Still no information on where the configurations lie, and since they're
>>> all computed in a pre-build step one has to essentially decompile the
>>> makefiles to get back to the config files that are where the configuration
>>> variables are really hiding.
>>>
>>>
>>>>
>>>>
>>>> On Nov 29, 2018, at 3:36 PM, Eliot Miranda <eliot.miranda at gmail.com>
>>>> wrote:
>>>>
>>>> and then  there's this.  Having spotted the apparent error (a case
>>>> difference for sqPlatformSpecific-Win32.h in
>>>> platforms/minheadless/common/sqPlatformSpecific.h) I rerun the build and
>>>> see the following output, essentially unchanged:
>>>>
>>>> -- Build files have been written to:
>>>> /cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/release
>>>> make -C debug all
>>>> make[1]: Entering directory
>>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>>> make[2]: Entering directory
>>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>>> make[3]: Entering directory
>>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>>> Scanning dependencies of target PharoVMCore
>>>> make[3]: Leaving directory
>>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/phar
>>>> o.cog.spur/debug'
>>>> make[3]: Entering directory
>>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>>> [  1%] Building C object
>>>> CMakeFiles/PharoVMCore.dir/platforms/Cross/vm/sqExternalSemaphores.c.o
>>>> In file included from /cygdrive/z/oscogvm/platforms/Cross/vm/sq.h:212:0,
>>>>                  from
>>>> /cygdrive/z/oscogvm/platforms/Cross/vm/sqExternalSemaphores.c:31:
>>>> /cygdrive/z/oscogvm/platforms/minheadless/common/sqPlatformSpecific.h:36:39:
>>>> fatal error: sqPlatformSpecific-Win32.h: No such file or directory
>>>> compilation terminated.
>>>> make[3]: *** [CMakeFiles/PharoVMCore.dir/build.make:63:
>>>> CMakeFiles/PharoVMCore.dir/platforms/Cross/vm/sqExternalSemaphores.c.o]
>>>> Error 1
>>>> make[3]: Leaving directory
>>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>>> make[2]: *** [CMakeFiles/Makefile2:216: CMakeFiles/PharoVMCore.dir/all]
>>>> Error 2
>>>> make[2]: Leaving directory
>>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>>> make[1]: *** [Makefile:84: all] Error 2
>>>> make[1]: Leaving directory
>>>> '/cygdrive/z/oscogvm/build.minheadless.cmake/x64/pharo.cog.spur/debug'
>>>> make: *** [Makefile:2: all] Error 2
>>>>
>>>> What's missing?
>>>> - no mention of a LOG file name to go look for the command line for the
>>>> compiler which is likely missing an include path to pick up
>>>> platforms/minheadless/windows/sqPlatformSpecific-Win32.h
>>>> - no command line so one can't merely eyeball the output to  heck, or
>>>> run the build with output piped into one's own LOG file
>>>>
>>>> What doe we see?  An opaque build system.  The only way to approach
>>>> this is to wade through the details trying to uncover things *that should
>>>> be in plain view*.  With the Makefiles I have written
>>>> - there is no slow configure step (the above make scheme crates 4
>>>> identical copies of a config file *on each build*)
>>>> - the commandos theat build are output explicitly so one may quickly
>>>> debug errors in code one is writing
>>>>
>>>> I'm sorry to complain but this use of cmake is painful and misguided.
>>>>
>>>> On Wed, Nov 28, 2018 at 7:14 PM Eliot Miranda <eliot.miranda at gmail.com>
>>>> wrote:
>>>>
>>>>> Hi All,
>>>>>
>>>>>     I've just attempted to build minheadless on win32 in
>>>>> build.minheadless.cmake.  It failed, but it took a long time to do so,
>>>>> while I waited.  So I cleaned and repeated to measure just how long I
>>>>> waited.  So this time is a best case; all read files are in cache etc.  I'm
>>>>> running a Windows VM on a top of the line MacBook Pro and yet it takes 3
>>>>> minutes and 20 seconds to configure and then start to build and fail
>>>>> because it can't find sqplatfozrmspecifc-win32.h.  I have to wait 3 minutes
>>>>> and 20 seconds before I can find out a missing file.  This is *wrong*.
>>>>>
>>>>> Using make on a build slave is fine, if you insist, but clearly not
>>>>> necessary (our current builds do not use cmake, and even then on ARM build
>>>>> slaves they sometimes timeout).  But for development this is madness.  We
>>>>> should have a build system which is reactive, which gives feedback too the
>>>>> developer quickly, not after 3 minutes and 20 seconds on state of the art
>>>>> hardware.
>>>>>
>>>>> I find it absurd that a Smalltalk community, which well understands
>>>>> the value of incrementally and reactivity, can be satisfied with a VM build
>>>>> system that takes 3 minutes and 20 seconds before it does anything useful.
>>>>> It feels like being back at York University in the early '80's, waiting for
>>>>> the PDP 10.  No, that was faster.  On reflection, it reminds me of having
>>>>> to post coding sheets to be typed in by entry clerks through the mail while
>>>>> I was at school in the '70's.  Back to the future indeed.
>>>>> _,,,^..^,,,_
>>>>> best, Eliot
>>>>>
>>>>
>>>>
>>>> --
>>>> _,,,^..^,,,_
>>>> best, Eliot
>>>>
>>>>
>>>>
>>>
>>> --
>>> _,,,^..^,,,_
>>> best, Eliot
>>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20181130/84c65ba2/attachment-0001.html>


More information about the Vm-dev mailing list