source: trunk/scons/utils.py @ 1332

Last change on this file since 1332 was 1332, checked in by mar637, 17 years ago

small patch for fortran detection, when no fortran is found.

File size: 3.5 KB
Line 
1import os
2import glob
3
4def generate(env):
5    def SGlob(pattern):
6        path = env.GetBuildPath('SConscript').replace('SConscript', '')
7        return [ i.replace(path, '') for i in glob.glob(path + pattern) ]
8    env.SGlob = SGlob
9
10    def AddCustomPath(path=""):
11        if not len(path) or not os.path.exists(path):
12            return
13        env.PrependUnique(CPPPATH = [os.path.join(path, "include")])
14        env.PrependUnique(LIBPATH = [os.path.join(path, "lib")])
15    env.AddCustomPath = AddCustomPath
16
17    def AddCustomPackage(pkgname=None):
18        if pkgname is None:
19            return
20        pkgroot = env.get("%sroot" % pkgname, None)
21        pkgincd = env.get("%sincdir" % pkgname, None)
22        pkglibd = env.get("%slibdir" % pkgname, None)
23        incd = None
24        libd = None
25        if pkgroot is not None:
26            incd = os.path.join(pkgroot, "include")
27            libd = os.path.join(pkgroot, "lib")
28        else:       
29            if pkgincd is not None:
30                incd = pkgincd
31            if pkglibd is not None:
32                libd = pkglibd
33        if incd is not None:
34            if not os.path.exists(incd):
35                print "Custom %s include dir '%s' not found" % (pkgname, incd)
36                env.Exit(1)
37            env.PrependUnique(CPPPATH = [incd])
38        if libd is not None:
39            if not os.path.exists(libd):
40                print "Custom %s lib dir '%s' not found" % (pkgname, libd)
41                env.Exit(1)
42            env.PrependUnique(LIBPATH = [libd])
43
44    env.AddCustomPackage = AddCustomPackage
45
46    def CheckFortran(conf):
47           
48        if not conf.env.has_key("FORTRAN"):
49            # auto-detect fortran
50            detect_fortran = conf.env.Detect(['gfortran', 'g77', 'f77'])
51            if not detect_fortran:
52                print "No fortran compiler found. Specify FORTRAN and f2clib."
53                conf.env.Exit(1)
54            conf.env["FORTRAN"] = detect_fortran
55            fdict = {'gfortran': 'gfortran', 'g77': 'g2c', 'f77': 'f2c'}
56            f2clib = conf.env.get("f2clib", fdict[detect_fortran])
57            if not conf.CheckLib(f2clib):
58                env.Exit(1)
59        else:
60            if not conf.env.has_key("f2clib"):
61                print "A custom fortran compiler also needs f2clib defined"
62                env.Exit(1)
63            else:
64                if not conf.CheckLib(env["f2clib"]):
65                    env.Exit(1)
66        if conf.env["FORTRAN"].startswith("g77"):
67            fflags = ["-Wno-globals", "-fno-second-underscore"]
68            conf.env.Append(SHFORTRANFLAGS=fflags)
69            conf.env.Append(FORTRANFLAGS=fflags)
70    env.CheckFortran = CheckFortran
71
72    def WalkDirTree(targetroot, sourceroot, sources):
73        ifiles = []
74        ofiles = []
75        for s in sources:
76            if os.path.isdir(os.path.join(sourceroot ,s)):
77                for d,ld,f in os.walk(os.path.join(sourceroot ,s)):
78                    for fl in f:
79                        ifile = os.path.join(d, fl)
80                        ifiles.append(ifile)
81                        ofile = ifile.replace(sourceroot, targetroot)
82                        ofiles.append(ofile)
83        return ofiles, ifiles
84    env.WalkDirTree = WalkDirTree
85
86    def null_action(target, source, env): return 0
87
88    def message(target, source, env):
89        return "%s" % target[0]
90    env.MessageAction = env.Action(null_action, message)
91
92def exists(env):
93    try:
94        import os
95        import glob
96    except ImportError:
97        return False
98    else:
99        return True
Note: See TracBrowser for help on using the repository browser.