<div dir="ltr"><div><div><div><div><div><div><div><div><div><br>Btw, speaking about too long generation chain.<br><br></div>automake:<br></div> - you modify .ac file(s)<br></div> - you run autoconfig to generate configure script<br>
</div> - you run configure script to generate makefiles<br></div> - you run build<br><br></div>with cmakevmmaker:<br><br> - you modify build config in one of the class(es) in smalltalk code<br></div> - you run it to generate VM configs &amp; VM sources (.c/.h/.cmake files)<br>
</div> - you run cmake<br></div> - and finally build<br><br><div><div><div><div>And there&#39;s a good potential for even more automation: by using OSProcess and building whole VM<br></div><div>from an image, which means a single do-it to build VM,<br>
</div><div>and then run tests if build passes, run benchmarks, bring results on screen or store them somewhere and/or upload artifacts into proper place etc etc.<br><br></div><div class="gmail_extra">And now imagine how you would manage to do that using command line tools, like sed, awk, curl, shell scripts, perl,<br>
python, makefiles, autoconf &amp; anything else which you wanna throw into the soup to make it more fun.  <br><br><br><div class="gmail_quote">On 7 November 2013 15:01, Bob Arning <span dir="ltr">&lt;<a href="mailto:arning315@comcast.net" target="_blank">arning315@comcast.net</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    <font face="Georgia">It&#39;s absolutely none of my business what tools
      others choose to use, but I will say this:<br>
      <br>
      Having more of this process in Smalltalk and less in other
      (arcane) languages increases the confidence that, should we lose
      someone&#39;s services, others could step up to fill the gap.<br>
      <br>
      Cheers,<br>
      Bob<br>
      <br>
    </font><div><div class="h5">
    <div>On 11/7/13 8:28 AM, Igor Stasenko
      wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <br>
          <div class="gmail_quote">On 7 November 2013 08:58, Tobias Pape
            <span dir="ltr">&lt;<a href="mailto:Das.Linux@gmx.de" target="_blank">Das.Linux@gmx.de</a>&gt;</span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hey Tim and all,<br>
              <div>
                <div>On 07.11.2013, at 05:00, Ron Teitelbaum
                  &lt;<a href="mailto:ron@usmedrec.com" target="_blank">ron@usmedrec.com</a>&gt;
                  wrote:<br>
                  <br>
                  &gt; Hey Tim,<br>
                  &gt;<br>
                  &gt; Göran and Eliot have been discussing this.  I
                  just talked to Eliot about it<br>
                  &gt; yesterday.  He said he was happy to support cmake
                  but didn&#39;t want to have to<br>
                  &gt; do the work himself.  I&#39;m hoping that the work
                  Göran is doing on this now<br>
                  &gt; can be turned over to Eliot when it is finished.
                   I think there is agreement<br>
                  &gt; that combining the excellent work of pharo build
                  with Eliot&#39;s new vm work is<br>
                  &gt; a very good thing to do.  The work to merge the
                  build environments is<br>
                  &gt; already being done at 3D ICC.  We are working on
                  this for the Mac also but<br>
                  &gt; have not discussed it with Ian yet.<br>
                  &gt;<br>
                  &gt; Ron Teitelbaum<br>
                  &gt;<br>
                  &gt;&gt; -----Original Message-----<br>
                  &gt;&gt; From: <a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>
                  [mailto:<a href="mailto:squeak-dev-" target="_blank">squeak-dev-</a><br>
                  &gt;&gt; <a href="mailto:bounces@lists.squeakfoundation.org" target="_blank">bounces@lists.squeakfoundation.org</a>]
                  On Behalf Of tim Rowledge<br>
                  &gt;&gt; Sent: Wednesday, November 06, 2013 9:04 PM<br>
                  &gt;&gt; To: The general-purpose Squeak developers
                  list<br>
                  &gt;&gt; Subject: Re: [squeak-dev] A Bounty for
                  CMake-ifying stack/Cog vm build<br>
                  &gt; process<br>
                  &gt;&gt;<br>
                  &gt;&gt;<br>
                  &gt;&gt; Wow, no interest? Is it because make is
                  painful or because nobody needs to<br>
                  &gt;&gt; make any more money?<br>
                  <br>
                  <br>
                </div>
              </div>
              I actually have interest but I am currently reluctant,<br>
              for time-capturing reasons in my personal and work life.<br>
              <br>
              However, Here is what I would do:<br>
              <br>
              • Start from Ians CMake work, and try to generalize it for
              the<br>
                non-Linux platforms<br>
              • Windows would be kind-of straight-forward,<br>
              • For OS X, I would really want to have the Cocoa-based VM
              stuff<br>
                (aka Squeak VM 5.4.7.x) integrated and proper Xcode
              files<br>
                generated, especially to be able to have iOS VMs built
              automatically.<br>
                 Here, some information from John McIntosh would be
              helpfull, especially<br>
                a simple walk-through.<br>
                 I have some experience with that[1]<br>
              <br>
              <br>
              Despite all admiration I have for the way the PharoVM is
              built, there is one<br>
              thing that bothers me:<br>
              • You first somehow generate the VM sources (which is
              fine, and the automated way is amazing)<br>
              • THEN, the a Script generates CMake-Files<br>
              • CMake then generates Makefiles<br>
              • and then finally a vm is compiled.<br>
              This is one generating step too much, for my taste.<br>
              Personally, I&#39;d prefer CMake to just pick up the C-files
              generated by VMMaker,<br>
              so that adding a new platform does not need to change the
              VMMaker…</blockquote>
            <div><br>
            </div>
            <div>The main big issue with &#39;platform-neutral&#39; static
              source files, that they tend to<br>
            </div>
            <div>grow with tons of #ifdef-s over time, reducing
              readability and creating a mess.<br>
              <br>
            </div>
            <div>My point is that one or another way you have to deal
              with platform differences,<br>
            </div>
            <div>and the way how i prefer to do it is using smalltalk
              code,<br>
            </div>
            <div>but not .m4 files, or .cmake files, or writing a medium
              novel long configuration files<br>
            </div>
            <div>using strange (better to say weird) scripting DSL.<br>
            </div>
            <div>I can express all build process logic in smalltalk,
              which does not lessens the amount<br>
              of work to deal with all platform nuances and dependencies
              etc, but at least it allows me to organize and shape it<br>
              into some manageable form, which is easy to change &amp;
              learn.<br>
            </div>
            <div> <br>
            </div>
            <div> And another difference is, that i prefer working with
              browser &amp; classes than<br>
              with dozens of directories and files lying here and there.<br>
              <br>
            </div>
            <div>But sure thing, it is a question of taste. If you
              prefer to maintain this:<br>
              -------------------------<br>
              MACRO (INTERNAL_PLUGIN plugin)<br>
                SET (plugin_sources &quot;&quot;)<br>
                IF (DEFINED ${plugin}_sources)<br>
                  SET (plugin_sources ${${plugin}_sources})<br>
                ELSE (DEFINED ${plugin}_sources)<br>
                  FOREACH (dir ${src}/vm/intplugins ${cross}/plugins
              ${unix}/plugins)<br>
                    SET (tmp &quot;&quot;)<br>
                    AUX_SOURCE_DIRECTORY (${dir}/${plugin} tmp)<br>
                    STRING_APPEND (plugin_sources &quot;${tmp}&quot;)<br>
                  ENDFOREACH (dir)<br>
                ENDIF (DEFINED ${plugin}_sources)<br>
                IF (DEFINED ${plugin}_extra_sources)<br>
                  STRING_APPEND (plugin_sources
              &quot;${${plugin}_extra_sources}&quot;)<br>
                ENDIF (DEFINED ${plugin}_extra_sources)<br>
                FILE (WRITE ${bld}/${plugin}/CMakeLists.in &quot;&quot;)<br>
                FOREACH (dir ${unix}/plugins ${unix})<br>
                  FILE_APPEND (${bld}/${plugin}/CMakeLists.in
              ${dir}/${plugin}/build.cmake)<br>
                ENDFOREACH (dir)<br>
                FILE_APPEND (${bld}/${plugin}/CMakeLists.in
              ${config}/PluginInternal.cmake)<br>
                CONFIGURE_FILE (${bld}/${plugin}/CMakeLists.in
              ${bld}/${plugin}/CMakeLists.txt @ONLY)<br>
                ADD_SUBDIRECTORY (${bld}/${plugin} ${bld}/${plugin})<br>
              ENDMACRO (INTERNAL_PLUGIN)<br>
              --------------------------<br>
            </div>
            <div>And/or this:<br>
              --------------------------<br>
              AC_INIT([<a href="http://config.h.in" target="_blank">config.h.in</a>])<br>
              <br>
              SVNREV=`grep &#39;\$Rev: &#39;
              ${srcdir}/../../../platforms/Cross/vm/sqSCCSVersion.h \<br>
                      | sed &#39;s/.*$Rev: \([[0-9]][[0-9]]*\).*/\1/&#39;`<br>
              AC_VM_VERSION(4,0,${SVNREV},4,2,0)<br>
              <br>
              topdir=`cd ${srcdir}/../../..; pwd`<br>
              cfgdir=`cd ${srcdir}; pwd`<br>
              <br>
              AC_ARG_WITH(src,<br>
              [  --with-src=dir          generated src directory
              [default=src]],<br>
              [ vmmsrc=&quot;${with_src}&quot;],<br>
              [ vmmsrc=&quot;src&quot;])<br>
              <br>
              vmmdir=&quot;${topdir}/${vmmsrc}&quot;<br>
              <br>
              if test ! -d &quot;${topdir}/${vmmsrc}&quot;; then<br>
                if test -d &quot;${topdir}/platforms/unix/${vmmsrc}&quot;; then<br>
                  vmmdir=&quot;${topdir}/platforms/unix/${vmmsrc}&quot;<br>
                  AC_MSG_RESULT([using built-in src directory])<br>
                fi<br>
              fi<br>
              <br>
              AC_MSG_RESULT(${vmmdir})<br>
              <br>
              blddir=`pwd`<br>
              <br>
              AC_ARG_WITH(vmmcfg,<br>
              [  --with-vmmcfg=dir        vm configuration directory
              containing <a href="http://plugins.int" target="_blank">plugins.int</a> and
              plugins.ext [default=.]],<br>
              [ vmmcfg=&quot;${with-vmmcfg}&quot;],<br>
              [ vmmcfg=&quot;${blddir}&quot;])<br>
              <br>
              # Compiling a Cogit VM or not?  If so, need a cogit$o,
              cointerp, etc.<br>
              <br>
              AC_ARG_ENABLE(cogit,<br>
              [  --enable-cogit            compile a cogit VM
              [default=yes]],<br>
              cogit=&quot;no&quot;, cogit=&quot;yes&quot;)<br>
              AC_SUBST(cogit)<br>
              <br>
              #AC_ARG_ENABLE(jit,<br>
              #[  --enable-jit            enable J4 support
              [default=no]],<br>
              #JIT=&quot;yes&quot;, JIT=&quot;no&quot;)<br>
              #<br>
              #test $JIT = &quot;yes&quot; &amp;&amp; J_CFLAGS=&quot;-DJ_ENABLED&quot;<br>
              #AC_SUBST(J_CFLAGS)<br>
              <br>
              # Check the generated src dir looks sane<br>
              <br>
              AC_CHECK_VMM_DIR<br>
              <br>
              AC_SUBST(topdir)<br>
              AC_SUBST(cfgdir)<br>
              AC_SUBST(vmmdir)<br>
              AC_SUBST(vmmcfg)<br>
              AC_SUBST(blddir)<br>
              <br>
              SQ_VERSION=${SQ_MAJOR}.${SQ_MINOR}-${SQ_UPDATE}<br>
              <br>
              AC_DEFINE_UNQUOTED(SQ_VERSION, &quot;${SQ_VERSION}&quot;)<br>
              <br>
              AC_SUBST(SQ_MAJOR)<br>
              AC_SUBST(SQ_MINOR)<br>
              AC_SUBST(SQ_UPDATE)<br>
              AC_SUBST(SQ_VERSION)<br>
              <br>
              VM_VERSION=${VM_MAJOR}.${VM_MINOR}-${VM_RELEASE}<br>
              <br>
              AC_DEFINE_UNQUOTED(VM_VERSION, &quot;${VM_VERSION}&quot;)<br>
              <br>
              AC_SUBST(VM_MAJOR)<br>
              AC_SUBST(VM_MINOR)<br>
              AC_SUBST(VM_RELEASE)<br>
              AC_SUBST(VM_VERSION)<br>
              <br>
              # libdir contains ${exec_prefix}, so we have to default
              and expand early<br>
              test &quot;x$prefix&quot; = xNONE &amp;&amp;
              prefix=$ac_default_prefix<br>
              test &quot;x$exec_prefix&quot; = xNONE &amp;&amp;
              exec_prefix=&#39;${prefix}&#39;<br>
              imgdir=`eval echo ${libdir}/squeak`<br>
              expanded_relative_imgdir=`eval echo
              lib/squeak/${VM_VERSION}`<br>
              plgdir=&#39;${imgdir}/&#39;`eval echo ${VM_VERSION}`<br>
              <br>
              AC_SUBST(imgdir)<br>
              AC_SUBST(expanded_relative_imgdir)<br>
              AC_SUBST(plgdir)<br>
              <br>
              AC_DEFINE(OS_TYPE, &quot;unix&quot;)<br>
              <br>
              AC_CANONICAL_HOST<br>
              <br>
              host_cpu=`echo $host | sed &#39;s,-.*,,&#39;`<br>
              host=`echo $host | sed &#39;s,-unknown,,&#39;`<br>
              <br>
              AC_SUBST(host)<br>
              AC_SUBST(host_cpu)<br>
              AC_SUBST(host_vendor)<br>
              AC_SUBST(host_os)<br>
              ----------------------------<br>
              <br>
            </div>
            <div>instead of plain smalltalk code, it is up to you.<br>
              <br>
            </div>
            <div>But that&#39;s about &#39;too much&#39; for my taste. <br>
            </div>
            <div><br>
            </div>
            <div><br>
            </div>
            <div><br>
            </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
              But if the community is positive to just move to the Pharo
              way of<br>
              building VMs, I&#39;d be fine with that, since that would
              unify a lot<br>
              of infrastructure :)<br>
              <br>
              Best<br>
                      -Tobias<br>
              <br>
              [1] <a href="https://github.com/krono/self/blob/cmake/vm/cmake/mac_osx.cmake" target="_blank">https://github.com/krono/self/blob/cmake/vm/cmake/mac_osx.cmake</a><br>
              <br>
              <br>
              <br>
              <br>
              <br>
              <br>
              <br>
            </blockquote>
          </div>
          <br>
          <br clear="all">
          <br>
          -- <br>
          Best regards,<br>
          Igor Stasenko.
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      
    </blockquote>
    <br>
  </div></div></div>

<br><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Best regards,<br>Igor Stasenko.
</div></div></div></div></div>