[Vm-dev] Re: Saturday am insanity, xcode projects to Makefiles

Eliot Miranda eliot.miranda at gmail.com
Sat Jan 9 18:07:10 UTC 2016


and for the Pbjective-C to SMalltalk translator here are some starting
points:
http://stackoverflow.com/questions/6790350/parsing-objective-c-code-for-static-analysis
http://amnoid.de/tmp/clangtut/tut.html


On Sat, Jan 9, 2016 at 10:02 AM, Eliot Miranda <eliot.miranda at gmail.com>
wrote:

> Hi All,
>
>     I just blew an hour investigating converting the xcode build files to
> Makefiles.  I've hit a wall but I thought I'd share because
> a) someone might want to take a tilt at this themselves
> b) someone might have a nifty way around the wall
>
> So what's the issue here?  Under
> http://www.squeakvm.org/svn/squeak/branches/Cog/{build.macos32x86,build.macos64x64}
> are build directories for each configuration of cog, such as squeak.cog.v3
> or newspeak.stack.spur.  These contain project files. The old 10.6 Carbon
> UI project files are called CoreVM.xcodeproj/project.pbxproj and the new
> 10.8 Cocoa UI ones, currently extant for only
> {build.macos32x86,build.macos64x64}/squeak.cog.spur) are called
> SqueakCogSpur32x86.xcodeproj/project.pbxproj.
>
> There are also a bunch of projects for external plugins such
> as SqueakFFIPrims/SqueakFFIPrims.xcodeproj.  These things are all
> monolithic property lists with lots of commonality and they differ only
> slightly, mostly to include the relevant interp.h file for the
> configuration.  For example, build.macos32x86/squeak.cog.v3 uses
> src/vm/interp.h, build.macos32x86/squeak.cog.spur uses spursrc/vm/interp.h,
> build.macos64x64/squeak.cog.spur uses spur64src/vm/interp.h, etc.
>
> Now, if these were replaced by makefiles, they could trivially be
> parameterised by the relevant interp.h and lots of duplication would
> disappear.  It would be much faster to add a new configuration, etc.
>
> So how to derive the first set of makefiles?  Manually, obviously, but
> ghaaa, no please no.
>
> So I found GNUStep's pbxbuild.  This was deprecated in 2012 and apparently
> applies only to xcode version 2 project files, not the version 3.2 we're
> using.  It still builds and installs (with a little bit of effort):
>
> 1. download GNUStep Makefiles from
> http://wwwmain.gnustep.org/resources/downloads.php?site=ftp%3A%2F%2Fftp.gnustep.org%2Fpub%2Fgnustep%2F
> 2. unpack the tar
>     $ tar xzf ~/Downloads/gnustep-make-2.6.7.tar.gz
> 3. cd and build
>     $ cd gnustep-make-2.6.7/;./configure; sudo gnumake install
>
> 4. Download pbxbuild from github
>     $ git clone https://github.com/gnustep/pbxbuild.git pbxbuild
> 5. cd and build
>     $ cd pbxbuild; GNUSTEP_MAKEFILES=/Library/GNUstep/Makefiles make -f
> GNUmakefile
>
> But when one tries this (-g = generate makefiles)
>     $ cd build.macos32x86/squeak.cog.spur; ~/src/pbxbuild/pbxbuild  -g
> SqueakCogSpur32x86.xcodeproj
> it outputs some errors and segfaults:
> 2016-01-09 09:55:44.568 pbxbuild[33864:507] -[PBPbxProject
> initWithFile:](146) rootObject class: __NSCFDictionary
> 2016-01-09 09:55:44.569 pbxbuild[33864:507] -[PBPbxProject
> initWithFile:](147) description:
> 2016-01-09 09:55:44.569 pbxbuild[33864:507] -[PBPbxProject
> initWithFile:](148) {
>     buildConfigurationList = 94D95B1D0923E6810034C6F0;
>     compatibilityVersion = "Xcode 2.4";
>     developmentRegion = English;
>     hasScannedForEncodings = 1;
>     isa = PBXProject;
>     knownRegions =     (
>         English,
>         Japanese,
>         French,
>         German
>     );
>     mainGroup = 08773EB500C6A1C4C0A80109;
>     productRefGroup = 08773F3000C6A1C4C0A80109;
>     projectDirPath = "";
>     projectRoot = "";
>     targets =     (
>         941A3B2B09AA144000C9D25A
>     );
> }
> 2016-01-09 09:55:44.570 pbxbuild[33864:507] -[PBPbxProject(Private)
> addGroupRecursivelyByKey:parentPath:](82) Examining Group with name:
> 'Sources'
> 2016-01-09 09:55:44.571 pbxbuild[33864:507] Warning: Unknown reference
> type '(null)' in PBXGroup!
> 2016-01-09 09:55:44.571 pbxbuild[33864:507] Warning: Unknown reference
> type '(null)' in PBXGroup!
> 2016-01-09 09:55:44.571 pbxbuild[33864:507] Warning: Unknown reference
> type '(null)' in PBXGroup!
> 2016-01-09 09:55:44.572 pbxbuild[33864:507] Warning: Unknown reference
> type '(null)' in PBXGroup!
> Segmentation fault: 11
>
>
>
>
> Then the thought is to try parsing the project files with Smalltalk and
> writing the exporter myself.  (In fact I tried this first cuz I suspected
> pbxbuild would be a bust).  So one can convert a project.pbxproj file to an
> xml file via
> $  plutil -convert xml1 -o - SqueakCogSpur32x86.xcodeproj/project.pbxproj
> >SqueakCogSpur32x86.xml
> and I loaded XML_Parser.  But the resulting tree is so deeply nested I
> gave up.
>
> The next thought was that yes, I could try and debug the pbxbuild
> Objective-C, but that would take time learning new tools, and it would be
> much nicer to use Smalltalk.  So I cast around for an Objective-C to
> Smalltalk translator. I can't find one.  There /are/ Objective-C to Java
> and Objective-C to Swift translators.  But I'm not about to try and convert
> those so that I can convert the pbxbuild code to Smalltalk.  But I thought
> there might be some folks here that have copious free time and are crazy
> enough to try.  hence this message.
>
> good morning.
> _,,,^..^,,,_
> best, Eliot
>



-- 
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160109/0557c518/attachment-0001.htm


More information about the Vm-dev mailing list