Since I weighed in on the question about getting CheckLib to do what you want I 
recall that in the past there have been questions about Install. Where is a 
good spot to make available my Install_fun that installs the requested file but 
also lets you set permission bits, owner, and group since when I install an 
executable in a public space I need to get those set correctly.

I suppose the next question is whether something like that should go into the 
core code?

Since it is fairly short here is the coding.

Usage is:
env['INSTALL']=installFunc
env['INSTALL_GROUP']='mygroup'
env['INSTALL_MODE']=0710    # leading 0 implies octal

The code is:

def installFunc(dest, source, env):
    """Install a source file into a destination by copying it (and its
    permission/mode bits)."""

    owner = env.get('INSTALL_OWNER', None)
    if owner:
        try:
            uid = pwd.getpwnam(owner)[2]
        except TypeError:
            uid = owner
    else:
        uid = -1

    group = env.get('INSTALL_GROUP', None)
#    print 'group',group
    if group:
        try:
            gid = grp.getgrnam(group)[2]
        except TypeError:
            gid = group
    else:
        gid = -1

    mode = env.get('INSTALL_MODE', None)
#    print 'mode',mode
    if not mode:
        st = os.stat(source)
        mode = (stat.S_IMODE(st[stat.ST_MODE]) | stat.S_IWRITE)

    dirname = os.path.dirname(dest)
    if not os.path.isdir(dirname):
        os.makedirs(dirname)
    shutil.copy2(source, dest)

    if owner or group:
        os.chown(dest, uid, gid)

    os.chmod(dest, mode)
    return 0


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
Rob Managan                             email managan at llnl.gov
LLNL                                             phone: 925-423-0903
P.O. Box 808, L-095                   FAX:   925-422-3389
Livermore, CA  94551-0808

_______________________________________________
Scons-dev mailing list
[email protected]
http://two.pairlist.net/mailman/listinfo/scons-dev

Reply via email to