#!/usr/bin/env python """ create the cam library """ import sys, os, filecmp, shutil, re, imp _CIMEROOT = os.environ.get("CIMEROOT") if _CIMEROOT is None: raise SystemExit("ERROR: must set CIMEROOT environment variable") _LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") sys.path.append(_LIBDIR) from standard_script_setup import * from CIME.case import Case from CIME.utils import run_cmd, expect from CIME.buildlib import parse_input logger = logging.getLogger(__name__) ############################################################################### def _build_cam(): ############################################################################### caseroot, libroot, bldroot = parse_input(sys.argv) with Case(caseroot) as case: casetools = case.get_value("CASETOOLS") srcroot = case.get_value("SRCROOT") gmake_j = case.get_value("GMAKE_J") gmake = case.get_value("GMAKE") mach = case.get_value("MACH") #------------------------------------------------------- # Call cam's buildcpp #------------------------------------------------------- cmd = os.path.join(os.path.join(srcroot,"components","cam","cime_config","buildcpp")) logger.info(" ...calling cam buildcpp to set build time options") try: mod = imp.load_source("buildcpp", cmd) cam_cppdefs = mod.buildcpp(case) except: raise #------------------------------------------------------- # Filepath is created in caseroot/camconf by the call # to buildcpp - this needs to be copied to bldroot #------------------------------------------------------- filesrc = os.path.join(caseroot, "Buildconf", "camconf", "Filepath") filedst = os.path.join(bldroot, "Filepath_tmp") shutil.copy(filesrc,filedst) filedst = os.path.join(bldroot, "Filepath") filedst_tmp = os.path.join(bldroot, "Filepath_tmp") if os.path.isfile(filedst): if not filecmp.cmp(filedst_tmp, filedst): shutil.move(filedst_tmp, filedst) else: shutil.move(filedst_tmp, filedst) #------------------------------------------------------- # build the library #------------------------------------------------------- complib = os.path.join(libroot, "libatm.a") makefile = os.path.join(casetools, "Makefile") macfile = os.path.join(caseroot, "Macros.%s" % mach) if cam_cppdefs: cmd = "%s complib -j %d MODEL=cam COMPLIB=%s -f %s MACFILE=%s USER_CPPDEFS='%s'" \ % (gmake, gmake_j, complib, makefile, macfile, cam_cppdefs ) else: cmd = "%s complib -j %d MODEL=cam COMPLIB=%s -f %s MACFILE=%s " \ % (gmake, gmake_j, complib, makefile, macfile ) rc, out, err = run_cmd(cmd) logger.info("%s: \n\n output:\n %s \n\n err:\n\n%s\n"%(cmd,out,err)) expect(rc == 0, "Command %s failed with rc=%s" % (cmd, rc)) ############################################################################### if __name__ == "__main__": _build_cam()