Beispiel #1
0
def make_src_scintilla(maker, log):
    METHOD = "komodo"
    if METHOD == "source package":
        pattern = "scintilla*.tgz"
        candidates = []
        for src_repo in cfg.src_repositories:
            candidates += glob(join(src_repo, pattern))
        if not candidates:
            raise MakeError("cannot find scintilla source (%s) in source "
                            "repositories: '%s'"
                            % (pattern, "', '".join(cfg.src_repositories)))
        candidates.sort()
        pkg_path = abspath(candidates[-1])
        _run_in_dir("tar xzf %s" % pkg_path, "src", logstream=log.info)
    elif METHOD == "komodo":
        ko_scintilla_dir = join(cfg.komodo_src, "src", "scintilla")
        if not isdir(ko_scintilla_dir):
            raise MakeError("cannot find Komodo scintilla source dir: '%s'"
                            % ko_scintilla_dir)
        assert ' ' not in ko_scintilla_dir
        _cp(ko_scintilla_dir, "src/scintilla", logstream=log.info)

    # Purge all but the following lexer languages.
    langs_to_keep = [
        "Python", "HTML", "Perl", "CSS", "Ruby", "Tcl", "XSLT",
        "UDL",
        "Others",   # to get SCLEX_NULL
        # Hardcoded expectations in SilverCity/LanguageInfo.py
        "CPP", "SQL", "YAML", "PS",
    ]
    scintilla_src_dir = join("src", "scintilla", "src")
    scintilla_lexer_dir = join("src", "scintilla", "lexers")
    available_langs = [
        basename(f)[3:-4]
        for f in glob(join(scintilla_lexer_dir, "Lex*.cxx"))
    ]
    langs_to_purge = [lang for lang in available_langs
                      if lang not in langs_to_keep]
    for lang in langs_to_purge:
        cxx_path = join(scintilla_lexer_dir, "Lex%s.cxx" % lang)
        _rm(cxx_path, log.info)

    # Run the source generators post- changes to the sources.
    _run_in_dir(cfg.python+" LexGen.py", scintilla_src_dir,
                logstream=log.info)

    if METHOD == "komodo":
        # Generate the *_gen.h files that have been added to the
        # Scintilla build process by Komodo.
        _run_in_dir(cfg.python+" HFacer.py", "src/scintilla/scripts",
                    logstream=log.info)
Beispiel #2
0
def make_src_silvercity(maker, log):
    METHOD = "komodo"  # one of "komodo" or "tarball"
    if METHOD == "komodo":
        ko_silvercity_dir = join(cfg.komodo_src, "src", "silvercity")
        if not isdir(ko_silvercity_dir):
            raise MakeError("cannot find Komodo silvercity source dir: '%s'" %
                            ko_silvercity_dir)
        assert ' ' not in ko_silvercity_dir
        dest = join("src", "SilverCity")
        _cp(ko_silvercity_dir, dest, logstream=log.info)

        if sys.platform == "win32":
            for dirpath, dirnames, filenames in os.walk(dest):
                for filename in filenames:
                    _run("attrib -R %s" % join(dirpath, filename),
                         logstream=log.info)
        else:
            _run("chmod -R ug+w %s" % dest, logstream=log.info)
    elif METHOD == "tarball":
        pattern = "SilverCity-*.tar.gz"
        candidates = []
        for src_repo in cfg.src_repositories:
            candidates += glob(join(src_repo, pattern))
        if not candidates:
            raise MakeError("cannot find SilverCity source (%s) in source "
                            "repositories: '%s'" %
                            (pattern, "', '".join(cfg.src_repositories)))
        candidates.sort()
        pkg_path = abspath(candidates[-1])
        pkg_name = basename(pkg_path)[:-len(".tar.gz")]
        _run_in_dir("tar xzf %s" % pkg_path, "src", logstream=log.info)
        _mv(xpath("src", pkg_name),
            xpath("src/SilverCity"),
            logstream=log.info)

        for dirname, dirs, files in os.walk("src/SilverCity"):
            for file in files:
                eol.convert_path_eol(join(dirname, file), eol.NATIVE, log=log)

        # Patch it.
        #XXX Use my patchtool thing.
        for patchfile in glob("src/patches/silvercity-*.patch"):
            _run_in_dir("patch -p0 < %s" % abspath(patchfile),
                        "src",
                        logstream=log.info)
Beispiel #3
0
def make_src_apsw(maker, log):
    """
    Copy the apsw source directory over from Komodo.
    """
    src_dir = join(cfg.komodo_src, "src", "apsw")    
    if not isdir(src_dir):
        raise MakeError("cannot find Komodo apsw source dir: '%s'" % src_dir)
    _cp(src_dir, "src/apsw", logstream=log.info)
    _rm("src/apsw/build", logstream=log.info)
Beispiel #4
0
def make_udl_lexers(maker, log):
    udl_build_dir = join(cfg.komodo_src, "build", cfg.komodo_cfg.buildType,
                         "udl", "build")
    if not exists(udl_build_dir):
        raise MakeError("cannot find UDL lexres files in Komodo build area "
                        "(`%s' does not exist): have you built Komodo?" %
                        udl_build_dir)
    lexres_dst_dir = join("lib", "codeintel2", "lexers")
    if not isdir(lexres_dst_dir):
        os.makedirs(lexres_dst_dir)
    for lexres_path in glob(join(udl_build_dir, "*", "lexers", "*.lexres")):
        _cp(lexres_path, lexres_dst_dir, log.info)
Beispiel #5
0
def make_src_syck(maker, log):
    pattern = "syck-*.tar.gz"
    candidates = []
    for src_repo in cfg.src_repositories:
        candidates += glob(join(src_repo, pattern))
    if not candidates:
        raise MakeError("cannot find Syck source (%s) in source "
                        "repositories: '%s'" %
                        (pattern, "', '".join(cfg.src_repositories)))
    candidates.sort()
    pkg_path = abspath(candidates[-1])
    pkg_name = basename(pkg_path)[:-len(".tar.gz")]
    _run_in_dir("tar xzf %s" % pkg_path, "src", logstream=log.info)
    _mv(xpath("src", pkg_name), xpath("src/syck"), logstream=log.info)
Beispiel #6
0
def make_src_elementtree(maker, log):
    """Make elementtree, cElementTree and (codeintel's custom) ciElementTree
    Python packages and extensions.
    """
    src_dir_from_dst_dir = {
        # Note that currently the sources in
        # "contrib/{elementtree|cElementTree}" are *already* patched with
        # the patches in "contrib/patches/{cElementTree|elementtree}_*".
        "src/elementtree": join(cfg.komodo_src, "contrib", "elementtree"),
        "src/cElementTree": join(cfg.komodo_src, "contrib", "cElementTree"),
        "src/ciElementTree": join(cfg.komodo_src, "contrib", "cElementTree"),
    }
    for dst_dir, src_dir in src_dir_from_dst_dir.items():
        if not isdir(src_dir):
            raise MakeError("cannot find Komodo elementtree source dir: '%s'" %
                            src_dir)
        assert ' ' not in src_dir
        _cp(src_dir, dst_dir, logstream=log.info)
        _rm("src/%s/build" % basename(dst_dir), logstream=log.info)

    # Patch it.
    #XXX Use my patchtool thing.
    for dirpath, dirnames, filenames in os.walk("src/ciElementTree"):
        for filename in filenames:
            path = join(dirpath, filename)
            curr_mode = stat.S_IMODE(os.stat(path).st_mode)
            writeable_mode = curr_mode | 0200  # make writeable
            if curr_mode != writeable_mode:
                os.chmod(path, writeable_mode)
    found_some_patches = False
    for patchfile in sorted(glob("src/patches/ciElementTree-*.patch")):
        found_some_patches = True
        if sys.platform.startswith("win"):
            # on Windows, we need to make sure the patch file has CRLF line
            # endings, because patch.exe is crap
            with open(patchfile, "r") as f:
                data = f.read()
            if not "\r\n" in data:
                sys.stderr.write(
                    "Warning: converting \"%s\" to DOS line endings" %
                    (abspath(patchfile), ))
                with open(patchfile, "w") as f:
                    f.write(data)

        _run_in_dir("patch -p0 < %s" % abspath(patchfile),
                    "src",
                    logstream=log.info)
    assert found_some_patches, "something wrong with finding ciElementTree patches"
Beispiel #7
0
def make_pcre(maker, log):
    """Make the PCRE lib (used by LexUDL)

    XXX Cheat for now and just get it from the Komodo build.
    """
    libpcre = STATIC_LIB_NAME("pcre", lib_prefix_on_win=True)
    src = join(cfg.komodo_src, "build", "release", "silvercity", libpcre)
    if not exists(src):
        raise MakeError("couldn't find `%s' in your Komodo build: you need to "
                    "have a local build of Komodo (yes this is a lazy, "
                    "cheating hack): %s" % (libpcre, src))
    for dest_dir in ("src/SilverCity", "src/scintilla/win32"):
        _cp(src, dest_dir, log.info)
        if cfg.platinfo.os == "macosx":
            _run("ranlib %s/%s" % (dest_dir, libpcre), log.info)
    _cp(join(cfg.komodo_src, "build", "release", "scintilla", "include", "pcre.h"),
        "src/scintilla/include", log.info)
Beispiel #8
0
def make_inflector(maker, log):
    METHOD = "komodo"
    if METHOD == "komodo":
        ko_inflector_dir = join(cfg.komodo_src, "contrib", "inflector")
        if not isdir(ko_inflector_dir):
            raise MakeError("cannot find Komodo inflector source dir: '%s'" %
                            ko_inflector_dir)
        assert ' ' not in ko_inflector_dir
        dest = join("lib", "inflector")
        _cp(ko_inflector_dir, dest, logstream=log.info)

        if sys.platform == "win32":
            for dirpath, dirnames, filenames in os.walk(dest):
                for filename in filenames:
                    _run("attrib -R %s" % join(dirpath, filename),
                         logstream=log.info)
        else:
            _run("chmod -R ug+w %s" % dest, logstream=log.info)
Beispiel #9
0
from glob import glob
import logging
import shutil
import stat
import re

sys.path.insert(0, join(dirname(__file__), "support"))
try:
    import make
    from make import makes, dep, default, MakeError
    import eol

    try:
        import config as cfg
    except ImportError, ex:
        raise MakeError("could not import configuration: %s" % ex)
    from config import xpath
finally:
    del sys.path[0]

#---- globals

#XXX fallback for not passing log arg through to _run et al
log = logging.getLogger("make")

EXE = (sys.platform == "win32" and ".exe" or "")
LIB = (sys.platform == "win32" and ".lib" or ".a")


def STATIC_LIB_NAME(name, lib_prefix_on_win=False):
    if sys.platform == "win32":