xref: /OK3568_Linux_fs/yocto/scripts/sysroot-relativelinks.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/usr/bin/env python3
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunimport sys
7*4882a593Smuzhiyunimport os
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun# Take a sysroot directory and turn all the abolute symlinks and turn them into
10*4882a593Smuzhiyun# relative ones such that the sysroot is usable within another system.
11*4882a593Smuzhiyun
12*4882a593Smuzhiyunif len(sys.argv) != 2:
13*4882a593Smuzhiyun    print("Usage is " + sys.argv[0] + "<directory>")
14*4882a593Smuzhiyun    sys.exit(1)
15*4882a593Smuzhiyun
16*4882a593Smuzhiyuntopdir = sys.argv[1]
17*4882a593Smuzhiyuntopdir = os.path.abspath(topdir)
18*4882a593Smuzhiyun
19*4882a593Smuzhiyundef handlelink(filep, subdir):
20*4882a593Smuzhiyun    link = os.readlink(filep)
21*4882a593Smuzhiyun    if link[0] != "/":
22*4882a593Smuzhiyun        return
23*4882a593Smuzhiyun    if link.startswith(topdir):
24*4882a593Smuzhiyun        return
25*4882a593Smuzhiyun    #print("Replacing %s with %s for %s" % (link, topdir+link, filep))
26*4882a593Smuzhiyun    print("Replacing %s with %s for %s" % (link, os.path.relpath(topdir+link, subdir), filep))
27*4882a593Smuzhiyun    os.unlink(filep)
28*4882a593Smuzhiyun    os.symlink(os.path.relpath(topdir+link, subdir), filep)
29*4882a593Smuzhiyun
30*4882a593Smuzhiyunfor subdir, dirs, files in os.walk(topdir):
31*4882a593Smuzhiyun    for f in dirs + files:
32*4882a593Smuzhiyun        filep = os.path.join(subdir, f)
33*4882a593Smuzhiyun        if os.path.islink(filep):
34*4882a593Smuzhiyun            #print("Considering %s" % filep)
35*4882a593Smuzhiyun            handlelink(filep, subdir)
36