Patch title: Release 81 bulk changes
Abstract:
File: /pliant/fullpliant/embedded/compile.pli
Key:
    Removed line
    Added line
module "/pliant/language/stream.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/asciifile.pli"
module "/pliant/admin/execute.pli"
module "/pliant/admin/shell.pli"
module "/pliant/fullpliant/computer.pli"
module "/pliant/protocol/ftp/client.pli"
module "/pliant/protocol/http/client.pli"


#--------------------------------------------------------------------


gvar Str name
gvar Str version
gvar Str path
gvar Str env
gvar Stream log
gvar Stream log1
gvar Stream log2

gvar Str common_env := "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin[0]"
common_env += "USER=root[0]"
common_env += "HOME=/root[0]"

function software n v
  arg Str n v
  name := n ; version := v
  console "  compiling " n " " v eol
  var Str l := "[lf]compiling "+n+" "+v+"  ("+string:datetime+")"
  log writeline l ; log1 writeline l ; log2 writeline l
  path := "target:/usr/src/"+n+"-"+v+"/"
  file_tree_delete path
  env := ""

function extract name epath
  arg Str name epath
  var Str remote := replace name "*" version
  var Str sname := remote (remote search_last "/" -1)+1 remote:len
  var Str local := "file:/fullpliant/unix/src/"+sname
  if (file_query local standard)=undefined
    console "  download " sname " "
    if (file_copy remote local)=success
      console "ok" eol
    else
      console "FAILED" eol
      return
  if (sname search ".zip" -1)<>(-1)
    var Str temp := replace file_temporary "file:" "target:"
    file_copy local temp
    execute "unzip -o "+file_os_name:(replace temp "target:" "file:") root "target:/" path epath quiet
    file_delete temp
  eif (sname search ".bz2" -1)<>(-1)
    var Str temp := "target:/tmp/"+sname
    file_copy local temp
    execute "bzip2 -d /tmp/"+sname root "target:/" quiet
    file_delete temp
    temp := replace temp ".bz2" ""
    file_extract temp epath
    file_delete temp
  else
    file_extract local epath
  
function extract name
  arg Str name
  extract name "target:/usr/src/"


function command cmd path -> status
  arg Str cmd path ; arg Status status
  console "    " cmd " ... "
  var Str temp := file_temporary
  var Int err := execute cmd path path root "target:/" environment common_env+env output temp mixed quiet
  status := shunt err=0 success failure
  console (shunt status=success "ok" "FAILED") eol
  var Str l := "  "+cmd+"  "+(shunt err=0 "ok" "FAILED")
  log writeline l ; log1 writeline l ; log2 writeline l
  log2 writeline ""
  (var Stream t) open temp in+safe
  while not t:atend
    var Str l := t readline
    log2 writeline "    "+l
  t close
  log2 writeline ""
  file_delete temp


function command cmd -> status
  arg Str cmd ; arg Status status
  status := command cmd path


function dns_on
  (var Stream s) open "target:/etc/resolv.conf" out+safe
  each provider this_computer:env:"pliant":"dns"
    if (keyof:provider parse "provider" any) and provider<>""
      s writeline "nameserver "+provider
  s close

function dns_off
  file_delete "target:/etc/resolv.conf"


#--------------------------------------------------------------------


function embedded_precompile c software
  arg Data:Computer c ; arg Str software
  if (common_env search "QTDIR" -1)=(-1)
    common_env += "QTDIR=/usr/src/qt-"+c:env:"software":"qt":"version"+"[0]"
  if software="cdrecord"
    (var AsciiFile src) load path+"cdrecord/drv_mmc.c"
    src set "getline" "(" "sleep(30);"
    src store
  eif software="gs"
    var Str url := replace "http://prdownloads.sourceforge.net/ghostscript/" "*" (replace version "." "")
    extract url+"ghostscript-*.tar.gz"
    extract url+"ghostscript-fonts-std-6.0.tar.gz" path
    extract url+"ghostscript-fonts-other-6.0.tar.gz" path
    var Str url := replace "ftp://ftp.mirror.ac.uk/sites/ftp.cs.wisc.edu/ghost/aladdin/gs650/" "*" (replace version "." "")
    extract url+"ghostscript-6.50jpeg.tar.gz" path
    extract url+"ghostscript-6.50libpng.tar.gz" path
    extract url+"ghostscript-6.50zlib.tar.gz" path
    file_link (replace path+"jpeg-6b" "target:" "file:") path+"jpeg" 
    file_link (replace path+"libpng-1.0.8" "target:" "file:") path+"libpng"
    file_link (replace path+"zlib-1.1.3" "target:" "file:") path+"zlib"
    var Str gp_path := "target:/usr/src/gimp-print-"+c:env:"software":"gimp-print":"version"+"/"
    var Array:FileInfo files := file_list gp_path+"src/ghost/" standard
    for (var Int i) 0 files:size-1
      var Str ext := files:i:name_without_path
      ext := ext (ext search_last "." ext:len) ext:len
      if ext=".h" or ext=".c"
        file_copy files:i:name path+"src/"+files:i:name_without_path
    (var Stream s1) open gp_path+"src/ghost/contrib.mak.addon" in+safe
    (var Stream s2) open path+"src/contrib.mak" append+safe
    while not s1:atend
      s2 writeline s1:readline
    s1 close ; s2 close
    (var AsciiFile mk) load path+"src/unix-gcc.mak"
    mk set "XLIBDIRS" "=" "XLIBDIRS=-L/usr/X11R6/lib"
    mk set "DEVICE_DEVS19" "=" "DEVICE_DEVS19=$(DD)stp.dev"
    mk store
  eif software="pstoedit"
    command "./configure --prefix=/usr/local" path+"config/"
    command "make" path+"src/"
    command "make install" path+"src/"
  eif software="qt"
    (var AsciiFile cfg) load path+"configure"
    cfg set "read acceptance" "" "acceptance=yes"
    cfg store
  eif software="quanta"
    command "make -f Makefile.cvs"
  eif software="abiword"
    # (var AsciiFile mk) load path+"abi/Makefile"
    # mk set "prefix" ":=" "prefix                :=/usr"
    # mk store
    (var AsciiFile mk) load path+"abi/src/config/platforms/linux.mk"
    mk set "UNIX_CAN_BUILD_STATIC" "=" "UNIX_CAN_BUILD_STATIC=0"
    mk store
    command "make" path+"abi/"
    command "make install" path+"abi/"
  eif software="GConf"
    file_move "target:/usr/lib/libdb-3.so" "target:/usr/lib/libdb-3.so.renamed"
  eif software="gdk-pixbuf"
    if (file_query "target:/usr/include/gdk-pixbuf" extended+directories)=undefined
      file_link "file:/usr/include/gdk-pixbuf-1.0/gdk-pixbuf/" "target:/usr/include/gdk-pixbuf"
  eif software="libglade"
    if (file_query "target:/usr/include/glade" extended+directories)=undefined
      file_link "file:/usr/include/libglade-1.0/glade/" "target:/usr/include/glade"
  eif software="mozilla"
    if (file_query "file:/fullpliant/download/mozilla.tgz" standard)=undefined
      dns_on
      env += "CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot[0]"
      command "cvs -z3 checkout mozilla/other-licenses/libart_lgpl" "target:/usr/src/"
    else
      file_extract "file:/fullpliant/download/mozilla.tgz" "target:/usr/src/"
    env += "MOZ_INTERNAL_LIBART_LGPL=1[0]" # required for ./configure to work
  plugin precompile

function embedded_postcompile c software
  arg Data:Computer c ; arg Str software
  if software="cdrecord"
    file_copy path+"cdrecord/OBJ/i686-linux-cc/cdrecord" "target:/usr/bin/cdrecord"
    file_copy path+"mkisofs/OBJ/i686-linux-cc/mkisofs" "target:/usr/bin/mkisofs"
    command "make clean"
  eif software="gs"
    file_move path+"fonts" "target:/usr/local/share/ghostscript/fonts"
  eif software="plotutils"
    file_copy path+"include/plotter.h" "target:/usr/include/plotter.h"
  eif software="kdelibs"
    file_copy path+"kdoctools/kdb2html" "target:/usr/local/bin/kdb2html"
  eif software="qt"
    file_tree_copy path+"lib/" "target:/usr/lib/"
    file_tree_copy path+"bin/" "target:/usr/bin/"
    file_tree_copy path+"include/" "target:/usr/include/qt/" extended+linktransparent
    command "make clean"
    command "ldconfig"
  eif software="hk_classes"
    command "ldconfig /usr/local/hk_classes"
  eif software="gtk+"
    file_link "file:/usr/include/gtk-1.2/gtk/" "target:/usr/include/gtk"
  eif software="mozilla"
    dns_off
    file_tree_copy "target:/usr/src/mozilla/dist/" "target:/usr/local/mozilla/" extended+linktransparent
    command "ldconfig /usr/local/mozilla/lib"
    command "make clean"
    (var Stream s) open "target:/usr/bin/mozilla" out+safe
    s writeline "#!/bin/sh"
    s writeline "export MOZILLA_FIVE_HOME=/usr/local/mozilla/bin"
    s writeline "export LD_LIBRARY_PATH=/usr/local/mozilla/bin:/usr/local/mozilla/bin/plugins"
    s writeline "export LIBRARY_PATH=/usr/local/mozilla/bin:/usr/local/mozilla/bin/components"
    s writeline "export SHLIB_PATH=/usr/local/mozilla/bin"
    s writeline "export LIBPATH=/usr/local/mozilla/bin"
    s writeline "export ADDON_PATH=/usr/local/mozilla/bin"
    s writeline "export MOZ_PROGRAM=/usr/local/mozilla/bin/mozilla-bin"
    s writeline "/usr/local/mozilla/bin/mozilla-bin"
    s close
    file_rights "target:/usr/bin/mozilla" undefined undefined 8^2+8+1 0
    file_tree_rights "target:/usr/local/mozilla/bin/" undefined undefined 0 0 2*8+2 0
  eif software="GConf"
    file_move "target:/usr/lib/libdb-3.so.renamed" "target:/usr/lib/libdb-3.so"
  plugin postcompile


#--------------------------------------------------------------------


function embedded_do_compile c appli -> status
  arg_rw Data:Computer c ; arg Str appli ; arg Status status
  var Str v := c:env:"software":appli:"version"
  software appli v
  if v=""
    var Str l := "  version not specifyed"
    log writeline l ; log1 writeline l ; log2 writeline l
    return failure
  var Str p := c:env:"software":appli:"path"
  if p=""
    void
  eif (p parse "target:/" any)
    path := replace p "*" v
  else
    var Str l := "  invalid path "+p+" (a valid path starts with target:/ )"
    log writeline l ; log1 writeline l ; log2 writeline l
    return failure
  if (exists c:env:"software":appli:"download")
    extract c:env:"software":appli:"download"
  embedded_precompile c appli
  if (exists c:env:"software":appli:"configure")
    command "./configure "+c:env:"software":appli:"configure"
  var Str make := c:env:"software":appli:"make"
  if make="standard"
    make := "make ; make install ; make clean ; ldconfig"
  var CBool for
  status := success
  while make<>"" and status=success
    if not (make parse any:(var Str cmd1) ";" any:(var Str cmd2))
      cmd1 := make ; cmd2 := ""
    if command:cmd1=failure
      status := failure
    make := cmd2
  if status=success
    embedded_postcompile c appli
  if not (exists c:env:"software":appli:"status")
    c:env:"software":appli create "status"
  c:env:"software":appli "status" := shunt status=success "success" "failure"


function embedded_rec_compile c appli -> status
  arg_rw Data:Computer c ; arg Str appli ; arg Status status
  if not (exists c:env:"software":appli:"status")
    c:env:"software":appli create "status"
  c:env:"software":appli "status" := "requires circle"
  each r c:env:"software":appli
    if (keyof:r parse "require" any)
      if c:env:"software":r:"status"=""
        embedded_rec_compile c r
      eif c:env:"software":r:"status"<>"success"
        software appli c:env:"software":appli:"version"
        var Str l := "  requires failed "+r
        log writeline l ; log1 writeline l ; log2 writeline l
        c:env:"software":appli "status" := "requires failed "+r
        return
  status := embedded_do_compile c appli


function embedded_compile c
  arg_rw Data:Computer c
  log open "target:var/log/compile.log" out+linecache+mkdir+safe
  log1 open "file:/tmp/compile.log" out+linecache+mkdir+safe
  log2 open "file:/tmp/compile2.log" out+linecache+mkdir+safe
  each sw c:env:"software"
    sw delete "status"
    if sw:size=0
      c:env:"software" delete keyof:sw
  var CBool again := true
  while again
    again := false
    each sw c:env:"software"
      if sw:"status"<>"success"
        sw "status" := ""
    each sw c:env:"software"
      if sw:"status"=""
        if (embedded_rec_compile c keyof:sw)=success
          again := true
  var Str l := "[lf]done  ("+string:datetime+")"
  log writeline l ; log close
  log1 writeline l ; log1 close
  log2 writeline l ; log2 close


module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"

function embedded_force_compile c appli root
  arg_rw Data:Computer c ; arg Str appli root
  pliant_multi_file_system mount "target:/" root pliant_default_file_system
  log open "target:var/log/compile.log" append+linecache+mkdir+safe
  log1 open "file:/tmp/compile.log" out+linecache+mkdir+safe
  log2 open "file:/tmp/compile2.log" out+linecache+mkdir+safe
  if appli<>""
    embedded_do_compile c appli
  else
    each sw c:env:"software"
      if sw:"status"<>"success"
        sw delete "status"
        if sw:size=0
          c:env:"software" delete keyof:sw
    each sw c:env:"software"
      if sw:"status"=""
        embedded_rec_compile c keyof:sw
  log close
  log1 close
  log2 close
  pliant_multi_file_system dismount "target:/"

export embedded_compile embedded_force_compile