def installlapack(ctx): filen = version + ".tgz" atl.installsmthg_pre(ctx, "http://www.netlib.org/lapack/" + filen, filen) from waflib import Utils, Errors dii = { "FCC": ctx.env.FC, "FCFLAGS": " ".join(ctx.env.FCFLAGS + ctx.env.FCFLAGS_fcshlib), "FLINKFLAGS": " ".join(ctx.env.FCFLAGS + ctx.env.LINKFLAGS_fcshlib), "SO": ctx.env.shsuffix, "MFLAG": " ".join(ctx.env.FCFLAGS) } Logs.pprint("PINK", "build blas") f = open("build/%s/make.inc" % version, "w") print(make_inc_blas % dii, file=f) f.close() cmdline = "cd build/%s; make blaslib" % version if ctx.exec_command(cmdline) != 0: raise Errors.WafError("Cannot build %s" % version) Logs.pprint("PINK", "build lapack") f = open("build/%s/make.inc" % version, "w") print(make_inc_lapack % dii, file=f) f.close() cmdline = "cd build/%s; make lapacklib" % version if ctx.exec_command(cmdline) != 0: raise Errors.WafError("Cannot build %s" % version) import shutil shutil.copyfile( "build/%s/liblapack_clik.%s" % (version, ctx.env.shsuffix), osp.join(ctx.env.LIBDIR, "liblapack_clik.%s" % ctx.env.shsuffix)) shutil.copyfile( "build/%s/libblas_clik.%s" % (version, ctx.env.shsuffix), osp.join(ctx.env.LIBDIR, "libblas_clik.%s" % ctx.env.shsuffix)) do_include(ctx)
def installlapack(ctx): filen = version+".tgz" atl.installsmthg_pre(ctx,"http://www.netlib.org/lapack/"+filen,filen) from waflib import Utils,Errors dii = {"FCC":ctx.env.FC,"FCFLAGS":" ".join(ctx.env.FCFLAGS+ctx.env.FCFLAGS_fcshlib),"FLINKFLAGS":" ".join(ctx.env.FCFLAGS+ctx.env.LINKFLAGS_fcshlib),"SO":ctx.env.shsuffix,"MFLAG":" ".join(ctx.env.FCFLAGS) } Logs.pprint("PINK","build blas") f=open("build/%s/make.inc"%version,"w") print >>f,make_inc_blas%dii f.close() cmdline = "cd build/%s; make blaslib"%version if ctx.exec_command(cmdline)!=0: raise Errors.WafError("Cannot build %s"%version) Logs.pprint("PINK","build lapack") f=open("build/%s/make.inc"%version,"w") print >>f,make_inc_lapack%dii f.close() cmdline = "cd build/%s; make lapacklib"%version if ctx.exec_command(cmdline)!=0: raise Errors.WafError("Cannot build %s"%version) import shutil shutil.copyfile("build/%s/liblapack_clik.%s"%(version,ctx.env.shsuffix), osp.join(ctx.env.LIBDIR,"liblapack_clik.%s"%ctx.env.shsuffix)) shutil.copyfile("build/%s/libblas_clik.%s"%(version,ctx.env.shsuffix), osp.join(ctx.env.LIBDIR,"libblas_clik.%s"%ctx.env.shsuffix)) do_include(ctx)
def configure_python_module(ctx, name, url, packtgz, pack, cmdline=None, extracmd="", forceinstall=False, postinstall=None): import waflib.Logs import os from waflib import Errors import os.path as osp import autoinstall_lib as atl ctx.load("python") doit = False import sys iall = shouldIinstall_all(ctx, name) try: assert forceinstall == False and getattr( ctx.options, name + "_forceinstall") == False and iall == False check_python_module(ctx, name, extracmd) except Exception as e: if upgrade(ctx, name) or getattr(ctx.options, name + "_forceinstall", False) or iall: waflib.Logs.pprint("PINK", "Install python module '%s'" % name) atl.installsmthg_pre(ctx, url, packtgz) if not osp.exists(ctx.env.PYTHONDIR): os.makedirs(ctx.env.PYTHONDIR) if cmdline == None: cmdline = "cd build/%s; PYTHONPATH=%s:$PYTHONPATH %s setup.py build_ext -L=%s ;PYTHONPATH=%s:$PYTHONPATH %s setup.py install --install-lib=%s --install-scripts=%s" % ( pack, ctx.env.PYTHONDIR, ctx.env.PYTHON[0], ctx.env.LIBPATH_PYEMBED[0], ctx.env.PYTHONDIR, ctx.env.PYTHON[0], ctx.env.PYTHONDIR, ctx.env.BINDIR) waflib.Logs.pprint("PINK", cmdline) ret = ctx.exec_command(cmdline) if ret != 0: raise Errors.ConfigurationError("Cannot build %s" % name) # deal with eggs... if (not osp.exists(osp.join(ctx.env.PYTHONDIR, name))) and ( not osp.exists(osp.join(ctx.env.PYTHONDIR, name + ".py"))): eggdir = [ v for v in os.listdir(ctx.env.PYTHONDIR) if name in v and osp.isdir(osp.join(ctx.env.PYTHONDIR, v)) ][0] if eggdir != name and eggdir != name + ".py": mdir = [ v for v in os.listdir( osp.join(ctx.env.PYTHONDIR, eggdir)) if name in v ][0] import os os.symlink(osp.join(ctx.env.PYTHONDIR, eggdir, mdir), osp.join(ctx.env.PYTHONDIR, name)) check_python_module(ctx, name, extracmd) if postinstall: postinstall() else: raise e
def install_cfitsio(ctx): atl.installsmthg_pre(ctx,"ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/cfitsio3280.tar.gz","cfitsio3280.tar.gz") CCMACRO = "\"%s %s\""%(ctx.env.CC[0],ctx.env.mopt) CCMACRO = "CC=%s CXX=%s "%(CCMACRO,CCMACRO) CPPMACRO = "CPP=\"%s -E\" CXXCPP=\"g++ -E\" "%(ctx.env.CC[0]) cmdline = "cd build/%s; ./configure --prefix=%s %s %s %s; make clean;make -j %d ;make -j %d shared;make install"%("cfitsio",ctx.env.mprefix,"",CCMACRO, CPPMACRO,ctx.options.jobs,ctx.options.jobs) Logs.pprint("PINK",cmdline) if ctx.exec_command(cmdline)!=0: raise Errors.WafError("Cannot build %s"%"cfitsio")
def configure_python_module(ctx, name, url, packtgz, pack, cmdline=None, extracmd="", forceinstall=False): import waflib.Logs import os from waflib import Errors import os.path as osp import autoinstall_lib as atl ctx.load("python") doit = False import sys iall = shouldIinstall_all(ctx, name) try: assert forceinstall == False and getattr(ctx.options, name + "_forceinstall") == False and iall == False check_python_module(ctx, name, extracmd) except Exception, e: if upgrade(ctx, name) or getattr(ctx.options, name + "_forceinstall", False) or iall: waflib.Logs.pprint("PINK", "Install python module '%s'" % name) atl.installsmthg_pre(ctx, url, packtgz) if not osp.exists(ctx.env.PYTHONDIR): os.makedirs(ctx.env.PYTHONDIR) if cmdline == None: cmdline = ( "cd build/%s; PYTHONPATH=%s %s setup.py build_ext -L=%s ;PYTHONPATH=%s %s setup.py install --install-lib=%s --install-scripts=%s" % ( pack, ctx.env.PYTHONDIR, ctx.env.PYTHON[0], ctx.env.LIBPATH_PYEMBED[0], ctx.env.PYTHONDIR, ctx.env.PYTHON[0], ctx.env.PYTHONDIR, ctx.env.BINDIR, ) ) waflib.Logs.pprint("PINK", cmdline) ret = ctx.exec_command(cmdline) if ret != 0: raise Errors.ConfigurationError("Cannot build %s" % name) # deal with eggs... if (not osp.exists(osp.join(ctx.env.PYTHONDIR, name))) and ( not osp.exists(osp.join(ctx.env.PYTHONDIR, name + ".py")) ): eggdir = [ v for v in os.listdir(ctx.env.PYTHONDIR) if name in v and osp.isdir(osp.join(ctx.env.PYTHONDIR, v)) ][0] if eggdir != name and eggdir != name + ".py": mdir = [v for v in os.listdir(osp.join(ctx.env.PYTHONDIR, eggdir)) if name in v][0] import os os.symlink(osp.join(ctx.env.PYTHONDIR, eggdir, mdir), osp.join(ctx.env.PYTHONDIR, name)) check_python_module(ctx, name, extracmd) else: raise e
def install_cfitsio(ctx): url, tar = atl.get_lib_url(ctx, "cfitsio", ( "https://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio3280.tar.gz", "cfitsio3280.tar.gz")) atl.installsmthg_pre(ctx, url, tar) CCMACRO = "\"%s %s\"" % (ctx.env.CC[0], " ".join(ctx.env.mopt)) CCMACRO = "CC=%s CXX=%s " % (CCMACRO, CCMACRO) CPPMACRO = "CPP=\"%s -E\" CXXCPP=\"g++ -E\" " % (ctx.env.CC[0]) cmdline = "cd build/%s; ./configure --prefix=%s %s %s %s; make clean;make -j %d ;make -j %d shared;make install" % ( "cfitsio", ctx.env.mprefix, "", CCMACRO, CPPMACRO, ctx.options.jobs, ctx.options.jobs) Logs.pprint("PINK", cmdline) if ctx.exec_command(cmdline) != 0: raise Errors.WafError("Cannot build %s" % "cfitsio")
def configure(ctx): import waflib.Logs from waflib import Errors ctx.load("python") doit = False import sys sys.path += [ctx.env.PYTHONDIR] if ctx.options.h5py_install or ctx.options.upgrade_all_deps or ctx.options.install_all_deps: try: import h5py raise Exception() except Exception as e: doit = True if doit: import os.path as osp import autoinstall_lib as atl atl.installsmthg_pre( ctx, "http://h5py.googlecode.com/files/h5py-1.3.1.tar.gz", "h5py-1.3.1.tar.gz") if ctx.env.INCLUDES_hdf5: HDF5_DIR = osp.split(ctx.env.INCLUDES_hdf5[0])[0] else: fi = ctx.find_file("hdf5.h", ctx.env.INCLUDES_pmc) print(fi) HDF5_DIR = osp.split(osp.split(fi)[0])[0] HDF5_API = "18" print(HDF5_DIR) cmdline = "cd build/%s; HDF5_DIR=%s HDF5_API=%s python setup.py install --install-purelib=%s" % ( "h5py-1.3.1", HDF5_DIR, HDF5_API, ctx.env.PYTHONDIR) waflib.Logs.pprint("PINK", cmdline) if ctx.cmd_and_log(cmdline) != 0: raise Errors.ConfigurationError("Cannot build h5py") try: import h5py except Exception as e: if not doit: waflib.Logs.pprint( "PINK", "You can install automatically h5py using cmdline option --h5py_install" ) else: waflib.Logs.pprint("RED", "Autoinstall h5py has failed !") raise e
def install_healpix(ctx): if ctx.env.th: return import os hpdir = "Healpix_2.20a" atl.installsmthg_pre( ctx, "http://sourceforge.net/projects/healpix/files/Healpix_2.20a/Healpix_2.20a_2011Feb09.tar.gz/download", "Healpix_2.20a_2011Feb09.tar.gz") fpic_c = [vv for vv in ctx.env.CFLAGS_cshlib if "-fpic" in vv.lower()] fpic_f90 = [vv for vv in ctx.env.CFLAGS_cshlib if "-fpic" in vv.lower()] dii = { "CC": ctx.env.CC[0], "CFLAGS": " ".join(ctx.env.CCFLAGS + fpic_c + [" -DDONT_USE_PSHT"]), "LIBDIR": ctx.env.LIBDIR, "INCDIR": ctx.env.PREFIX + "/include", "FC": ctx.env.FC + " " + " ".join(ctx.env.FCFLAGS + fpic_f90 + [" -DDONT_USE_PSHT"]), "FFLAGS": " " } # if I am here, I found cfitsio # could it be somewhere else ? cfitsiopath = "" for pth in ctx.env.LIBPATH_cfitsio + [ "/usr/local/lib", "/usr/lib", "/lib" ] + os.environ.get("LD_LIBRARY_PATH", "").split(":") + os.environ.get( "DYLD_LIBRARY_PATH", "").split(":"): # print pth # print osp.join(pth,ctx.env.cshlib_PATTERN%"cfitsio") if osp.exists(osp.join(pth, ctx.env.cshlib_PATTERN % "cfitsio")): cfitsiopath = pth break if not bool(cfitsiopath): raise Exception("cannot find cfitsio !") dii["CFITSIOPATH"] = cfitsiopath dii["CFITSIOPATHINC"] = osp.realpath(cfitsiopath + "/../include") # dii["CFITSIOPATH"]=ctx.env.LIBPATH_cfitsio[0] # dii["CFITSIOPATHINC"]=ctx.env.INCLUDES_cfitsio[0] # print dii f = open(osp.join("build", hpdir, "conf_1.cmd"), "w") print(cnf_tmpl_1 % dii, file=f) f.close() # prepare a few things try: os.mkdir(osp.join("build", hpdir, "lib")) except Exception as e: # print e pass try: os.mkdir(osp.join("build", hpdir, "include")) except Exception as e: # print e pass import re # first part cmdline = "cd build/%s; ./configure <conf_1.cmd" % hpdir Logs.pprint("PINK", cmdline) try: rr = ctx.cmd_and_log(cmdline, output=waflib.Context.BOTH) except Exception as e: Logs.pprint("PINK", "first pass failed. Keep going...") rr = ("", ) addN = "" if re.findall("The following line should be inserted into your home", rr[0]): addN = "n\n" dii["addN"] = addN f = open(osp.join("build", hpdir, "conf.cmd"), "w") print(cnf_tmpl % dii, file=f) f.close() cmdline = "cd build/%s; ./configure <conf.cmd" % hpdir Logs.pprint("PINK", cmdline) try: rr = ctx.cmd_and_log(cmdline, output=waflib.Context.BOTH) except Exception as e: raise Errors.WafError("Healpix configure failed. Cannot build healpix") if re.findall("Something\s+went\s+wrong", rr[0] + rr[1]): raise Errors.WafError("Healpix configure failed. Cannot build healpix") cmdline = "cd build/%s; make c-all f90-modules " % hpdir if ctx.exec_command(cmdline) != 0: raise Errors.WafError( "Cannot build healpix. Look in build/config.log to understand why") import shutil import os for fi in os.listdir(osp.join("build", hpdir, "lib")): # print "copy",osp.join("build",hpdir,"lib",fi),osp.join(ctx.env.LIBDIR,fi) shutil.copyfile(osp.join("build", hpdir, "lib", fi), osp.join(ctx.env.LIBDIR, fi)) for fi in os.listdir(osp.join("build", hpdir, "include")): # print "copy",osp.join("build",hpdir,"include",fi),osp.join(ctx.env.PREFIX,"include",fi) shutil.copyfile(osp.join("build", hpdir, "include", fi), osp.join(ctx.env.PREFIX, "include", fi)) ctx.env.th = True
def installfftw3(ctx): filen = version + ".tar.gz" atl.installsmthg_pre(ctx, "http://www.fftw.org/" + filen, filen) atl.installsmthg_post(ctx, filen, "fftw", "--enable-shared")
def installhdf5(ctx): filen = version + ".tar.gz" atl.installsmthg_pre( ctx, "http://www.hdfgroup.org/ftp/HDF5/prev-releases/" + version + "/src/" + filen, filen) atl.installsmthg_post(ctx, version, tool)
def installgsl(ctx): atl.installsmthg_pre(ctx, "ftp://ftp.gnu.org/gnu/gsl/" + version + ".tar.gz", version + ".tar.gz") atl.installsmthg_post(ctx, version, tool)