def _check_get_swig(swig_min_version, verbose): """Chewck if Swig is available in the PATH in the right version. Returns True if it needs to be installed/updated. """ if verbose: print("Testing for availability of Swig >=%s in PATH..." % swig_min_version) get_swig = False rc, out, _ = shell("which swig") if rc != 0: if verbose: print("Swig is not available in PATH; need to get Swig") get_swig = True else: if verbose: print("Swig is available in PATH; testing its version...") out = shell_check("swig -version") m = re.search(r"^SWIG Version ([0-9\.]+)$", out, re.MULTILINE) if m is None: raise DistutilsSetupError("Cannot determine Swig version from " "output of 'swig -version':\n%s" % out) swig_version = m.group(1) if swig_version.split(".") < swig_min_version.split("."): if verbose: print("Installed Swig version is too old: %s; " "need to get Swig" % swig_version) get_swig = True else: if verbose: print("Installed Swig version is sufficient: %s" % swig_version) return get_swig
def _check_get_swig(swig_min_version, verbose): """Chewck if Swig is available in the PATH in the right version. Returns True if it needs to be installed/updated. """ if verbose: print("Testing for availability of Swig >=%s in PATH..." %\ swig_min_version) get_swig = False rc, out, _ = shell("which swig") if rc != 0: if verbose: print("Swig is not available in PATH; need to get Swig") get_swig = True else: if verbose: print("Swig is available in PATH; testing its version...") out = shell_check("swig -version") m = re.search(r"^SWIG Version ([0-9\.]+)$", out, re.MULTILINE) if m is None: raise DistutilsSetupError("Cannot determine Swig version from " "output of 'swig -version':\n%s" % out) swig_version = m.group(1) if swig_version.split(".") < swig_min_version.split("."): if verbose: print("Installed Swig version is too old: %s; "\ "need to get Swig" % swig_version) get_swig = True else: if verbose: print("Installed Swig version is sufficient: %s" %\ swig_version) return get_swig
def install_swig(installer, dry_run, verbose): """Custom installer function for `os_setup` module. This function makes sure that Swig is installed, either by installing the corresponding OS-level package, or by downloading the source and building it. Parameters: see description of `os_setup` module. """ swig_min_version = "2.0" if verbose: print("Testing for availability of Swig >=%s in PATH..." %\ swig_min_version) get_swig = False rc, out, _ = shell("which swig") if rc != 0: if verbose: print("Swig is not available in PATH; need to get Swig") get_swig = True else: if verbose: print("Swig is available in PATH; testing its version...") out = shell_check("swig -version") m = re.search(r"^SWIG Version ([0-9\.]+)$", out, re.MULTILINE) if m is None: raise DistutilsSetupError("Cannot determine Swig version from " "output of 'swig -version':\n%s" % out) swig_version = m.group(1) if swig_version.split(".") < swig_min_version.split("."): if verbose: print("Installed Swig version is too old: %s; "\ "need to get Swig" % swig_version) get_swig = True else: if verbose: print("Installed Swig version is sufficient: %s" %\ swig_version) if get_swig: system = installer.system distro = installer.distro swig_pkg_dict = { 'Linux': { 'redhat': "swig", 'centos': "swig", 'fedora': "swig", 'debian': "swig", 'ubuntu': "swig", 'linuxmint': "swig", 'suse': "swig", }, } # default if no system/distro specific name is found: swig_pkg_name = "swig" if system in swig_pkg_dict: distro_dict = swig_pkg_dict[system] if distro in distro_dict: swig_pkg_name = distro_dict[distro] swig_version_reqs = [">=%s" % swig_min_version] installed = installer.ensure_installed( swig_pkg_name, swig_version_reqs, dry_run, verbose, ignore=True) if not installed: # Build Swig from its source swig_build_version = "2.0.12" swig_dir = "swig-%s" % swig_build_version swig_tar_file = "swig-%s.tar.gz" % swig_build_version swig_install_root = "/usr" if verbose: print("Installing prerequisite OS-level packages for building "\ "Swig...") swig_prereq_pkg_dict = { 'Linux': { 'redhat': [ "pcre-devel", ], 'centos': [ "pcre-devel", ], 'fedora': [ "pcre-devel", ], 'debian': [ "libpcre3", "libpcre3-dev", ], 'ubuntu': [ "libpcre3", "libpcre3-dev", ], 'linuxmint': [ "libpcre3", "libpcre3-dev", ], 'suse': [ "pcre-devel", ], }, } # default if no system/distro specific name is found: swig_prereq_pkg_default = [ "pcre-devel", ] swig_prereq_pkg_names = swig_prereq_pkg_default if system in swig_prereq_pkg_dict: distro_dict = swig_prereq_pkg_dict[system] if distro in distro_dict: swig_prereq_pkg_names = distro_dict[distro] for swig_prereq_pkg_name in swig_prereq_pkg_names: installed = installer.ensure_installed( swig_prereq_pkg_name, None, dry_run, verbose, ignore=False) if dry_run: if verbose: print("Dry-running: Building Swig version %s from "\ "downloaded source, and installing to %s tree" %\ (swig_build_version, swig_install_root)) else: if verbose: print("Building Swig version %s from "\ "downloaded source, and installing to %s tree" %\ (swig_build_version, swig_install_root)) if os.path.exists(swig_dir): if verbose: print("Removing previously downloaded Swig directory: "\ "%s" % swig_dir) shutil.rmtree(swig_dir) if verbose: print("Downloading Swig source archive: %s" % swig_tar_file) shell_check( "wget -q -O %s http://sourceforge.net/projects/swig/files"\ "/swig/%s/%s/download" %\ (swig_tar_file, swig_dir, swig_tar_file), display=True) if verbose: print("Unpacking Swig source archive: %s" % swig_tar_file) shell_check("tar -xf %s" % swig_tar_file, display=True) if verbose: print("Configuring Swig build process for installing to "\ "%s tree..." % swig_install_root) shell_check(["sh", "-c", "cd %s; ./configure --prefix=%s" %\ (swig_dir, swig_install_root)], display=True) if verbose: print("Building Swig...") shell_check(["sh", "-c", "cd %s; make swig" % swig_dir], display=True) if verbose: print("Installing Swig to %s tree..." % swig_install_root) shell_check(["sh", "-c", "cd %s; sudo make install" % swig_dir], display=True) if verbose: print("Done downloading, building and installing Swig "\ "version %s" % swig_build_version)
def install_swig(installer, dry_run, verbose): """Custom installer function for `os_setup` module. This function makes sure that Swig is installed, either by installing the corresponding OS-level package, or by downloading the source and building it. Parameters: see description of `os_setup` module. """ swig_min_version = "2.0" if verbose: print("Testing for availability of Swig >=%s in PATH..." %\ swig_min_version) get_swig = False rc, out, _ = shell("which swig") if rc != 0: if verbose: print("Swig is not available in PATH; need to get Swig") get_swig = True else: if verbose: print("Swig is available in PATH; testing its version...") out = shell_check("swig -version") m = re.search(r"^SWIG Version ([0-9\.]+)$", out, re.MULTILINE) if m is None: raise DistutilsSetupError("Cannot determine Swig version from " "output of 'swig -version':\n%s" % out) swig_version = m.group(1) if swig_version.split(".") < swig_min_version.split("."): if verbose: print("Installed Swig version is too old: %s; "\ "need to get Swig" % swig_version) get_swig = True else: if verbose: print("Installed Swig version is sufficient: %s" %\ swig_version) if get_swig: system = installer.system distro = installer.distro swig_pkg_dict = { 'Linux': { 'redhat': "swig", 'centos': "swig", 'fedora': "swig", 'debian': "swig", 'ubuntu': "swig", 'suse': "swig", }, } # default if no system/distro specific name is found: swig_pkg_name = "swig" if system in swig_pkg_dict: distro_dict = swig_pkg_dict[system] if distro in distro_dict: swig_pkg_name = distro_dict[distro] swig_version_reqs = [">=%s" % swig_min_version] installed = installer.ensure_installed( swig_pkg_name, swig_version_reqs, dry_run, verbose, ignore=True) if not installed: # Build Swig from its source swig_build_version = "2.0.12" swig_dir = "swig-%s" % swig_build_version swig_tar_file = "swig-%s.tar.gz" % swig_build_version swig_install_root = "/usr" if verbose: print("Installing prerequisite OS-level packages for building "\ "Swig...") swig_prereq_pkg_dict = { 'Linux': { 'redhat': [ "pcre-devel", ], 'centos': [ "pcre-devel", ], 'fedora': [ "pcre-devel", ], 'debian': [ "libpcre3", "libpcre3-dev", ], 'ubuntu': [ "libpcre3", "libpcre3-dev", ], 'suse': [ "pcre-devel", ], }, } # default if no system/distro specific name is found: swig_prereq_pkg_default = [ "pcre-devel", ] swig_prereq_pkg_names = swig_prereq_pkg_default if system in swig_prereq_pkg_dict: distro_dict = swig_prereq_pkg_dict[system] if distro in distro_dict: swig_prereq_pkg_names = distro_dict[distro] for swig_prereq_pkg_name in swig_prereq_pkg_names: installed = installer.ensure_installed( swig_prereq_pkg_name, None, dry_run, verbose, ignore=False) if dry_run: if verbose: print("Dry-running: Building Swig version %s from "\ "downloaded source, and installing to %s tree" %\ (swig_build_version, swig_install_root)) else: if verbose: print("Building Swig version %s from "\ "downloaded source, and installing to %s tree" %\ (swig_build_version, swig_install_root)) if os.path.exists(swig_dir): if verbose: print("Removing previously downloaded Swig directory: "\ "%s" % swig_dir) shutil.rmtree(swig_dir) if verbose: print("Downloading Swig source archive: %s" % swig_tar_file) shell_check( "wget -q -O %s http://sourceforge.net/projects/swig/files"\ "/swig/%s/%s/download" %\ (swig_tar_file, swig_dir, swig_tar_file), display=True) if verbose: print("Unpacking Swig source archive: %s" % swig_tar_file) shell_check("tar -xf %s" % swig_tar_file, display=True) if verbose: print("Configuring Swig build process for installing to "\ "%s tree..." % swig_install_root) shell_check(["sh", "-c", "cd %s; ./configure --prefix=%s" %\ (swig_dir, swig_install_root)], display=True) if verbose: print("Building Swig...") shell_check(["sh", "-c", "cd %s; make swig" % swig_dir], display=True) if verbose: print("Installing Swig to %s tree..." % swig_install_root) shell_check(["sh", "-c", "cd %s; sudo make install" % swig_dir], display=True) if verbose: print("Done downloading, building and installing Swig "\ "version %s" % swig_build_version)