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)
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)
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)
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)
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)
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"
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)
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)
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":