view nt/installer/Wise/pre_wise.py @ 1298:1b4bc72f433e

[xemacs-hg @ 2003-02-14 12:05:06 by ben] speedups to build process autoload.el: Factor out common code in generate-{c-,}file-autoloads-1 into new function generate-autoload-ish-1. \(I was originally going to use this for custom as well but ended up thinking better of it.) cus-dep.el: Cache the old computed values in custom-load.el and reuse them as necessary, to speed up running cus-dep (which would take 25-30 seconds to do all files in lisp/*, lisp/*/* on my Pentium III 700). Use `message' not `princ' to get correct newline behavior. Output messages showing each file we do actually process. update-elc-2.el: Rewrite algorithm to be much faster -- cache calls to directory-files and don't make needless calls to file-exists-p, file-directory-p because they're way way slow. Autoload early and only when update-elc has told us to. update-elc.el: If no files need byte compilation, signal to update-elc-2 to do any necessary autoload updating (using the file REBUILD_AUTOLOADS) rather than doing it ourselves, which would be way slow. Ignore updates to custom-load.el and auto-autoloads.el when checking to see whether autoloads need updating. Optimize out many unnecessary calls to file-exists-p to speed it up somewhat. (#### The remaining time is 50% or more in locate-file; this is presumably because, even though it has a cache, it's still statting each file to determine it's actually there. By calling directory-files ourselves, building a tree, and then looking in that tree, we could drastically shorten the time needed to do the locate operation.)
author ben
date Fri, 14 Feb 2003 12:05:07 +0000
parents 74fd4e045ea6
children a268de273009
line wrap: on
line source

import string
import re
import os
import types

infile=open("xemacs.tmpl","r")

import version
import dirs
import filelist
import packages

def letter(package):
    index = packages.all.index(package)
    if index>29:
	raise "WISE error: too many components"
    return chr(ord("A")+index)

def letters(package_list):
    ret = ""
    for p in package_list: 
	ret = ret+letter(p)
    return ret

def describe(package):
    if package in packages.descriptions.keys():
	return ": "+packages.descriptions[package]
    else: return ""

def ifblock(var,val):
    return("item: If/While Statement\n  Variable=%s\n  Value=%s\n  Flags=00001010\nend\n" % (var,val))

def endblock():
    return("item: End Block\nend\n")

def setvar(var,val):
    return("item: Set Variable\n  Variable=%s\n  Value=%s\n  Flags=10000000\nend\n" % (string.upper(var), val))

def default_letters_of_category(cat):
    val = ""
    for p in packages.default:
        if packages.category_of_package(p) == cat:
            val = val + packages.letter_of_package(p)
    return val

def set_category_defaults():
    ret = ""
    for c in packages.category_names:
        ret = ret +  setvar(c, default_letters_of_category(c))
    return ret

def do_category(cat):
    ret = ifblock("COMPONENTS", packages.letter_of_category(cat))
    for pkg in packages.packages_of_category(cat):
        ret = ret + ifblock(string.upper(cat),packages.letter_of_package(pkg))
        for f in files_of_package(pkg):
            ret = ret+install_pkg_file(f)
        ret = ret + endblock()
    ret = ret + endblock()
    return ret

def files_of_package(package):
    manifest_file = dirs.packages + "\\pkginfo\\MANIFEST." + package
    manifest = open(manifest_file,"r")
    lines = manifest.readlines()
    lines = map(lambda s:s[:-1], lines)
    lines = map(lambda s:string.replace(s,'/','\\'), lines)
    return lines

def category_dialog(cat):
    npkg = len(packages.packages_of_category(cat))
    ret=""
    ret=ret+"  item: Dialog\n    Title="+packages.category_descriptions[cat]+" Packages\n"
    ret=ret+"    Width=210\n"
    ret=ret+"    Height=%d\n" % (45+npkg*10)
    ret=ret+"    Font Name=Helv\n"
    ret=ret+"    Font Size=8\n"
    ret=ret+"    item: Push Button\n"
    ret=ret+"      Rectangle=107 %d 147 %d\n" % (5+npkg*10+2, 5+npkg*10+17)
    ret=ret+"      Create Flags=01010000000000010000000000000001\n"
    ret=ret+"      Text=OK\n"
    ret=ret+"    end\n"
    ret=ret+"    item: Push Button\n"
    ret=ret+"      Rectangle=153 %d 193 %d\n" % (5+npkg*10+2, 5+npkg*10+17)
    ret=ret+"      Variable=%s\n" % string.upper(cat)
    ret=ret+"      Value=%%%s_SAVE%%\n" % string.upper(cat)
    ret=ret+"      Create Flags=01010000000000010000000000000000\n"
    ret=ret+"      Flags=0000000000000001\n"
    ret=ret+"      Text=Cancel\n"
    ret=ret+"    end\n"
    ret=ret+"    item: Checkbox\n"
    ret=ret+"      Rectangle=0 5 191 %d\n" % (10*npkg)
    ret=ret+"      Variable=%s\n"%string.upper(cat)
    ret=ret+"      Create Flags=01010000000000010000000000000011\n"
    ret=ret+"      Flags=0000000000000010\n"
    for pkg in packages.packages_of_category(cat):
        ret = ret+"      Text=%s: %s\n"%( pkg, packages.package_descriptions[pkg])
    ret=ret+"      Text=\n"
    ret=ret+"    end\n"
    ret=ret+"  end\n"
    return ret

def src_path(src,name):
    return src + "\\" + name

def dst_path(dst,name):
    return "%MAINDIR%"+"\\"+dst+"\\" + name

def install_file(name,src,dst):
    return("item: Install File\n  Source=%s\n  Destination=%s\n  Flags=0000000010000010\nend\n" % (src_path(src,name),dst_path(dst,name)))

def install_pkg_file(name):
    return install_file(name,dirs.packages,dirs.pkg_dst)

def do_package(package):
    return ifblock("COMPONENTS",letter(package)) + \
	   string.join(map(install_pkg_file,files(package)),"")+ \
	   endblock()

for line in infile.readlines():
    left=string.find(line,"<<<")
    if left>=0:
	right=string.find(line,">>>")
	expr=line[left+3:right]
	val=eval(expr)
	if type(val)==types.StringType:
	    print line[:left] + val + line[right+3:],
	elif type(val)==types.ListType:
	    for v in val:
		print line[:left] + v + line[right+3:],
    else: print line,