xref: /OK3568_Linux_fs/yocto/poky/scripts/contrib/verify-homepage.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/usr/bin/env python3
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun# This script can be used to verify HOMEPAGE values for all recipes in
6*4882a593Smuzhiyun# the current configuration.
7*4882a593Smuzhiyun# The result is influenced by network environment, since the timeout of connect url is 5 seconds as default.
8*4882a593Smuzhiyun
9*4882a593Smuzhiyunimport sys
10*4882a593Smuzhiyunimport os
11*4882a593Smuzhiyunimport subprocess
12*4882a593Smuzhiyunimport urllib.request
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun# Allow importing scripts/lib modules
16*4882a593Smuzhiyunscripts_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/..')
17*4882a593Smuzhiyunlib_path = scripts_path + '/lib'
18*4882a593Smuzhiyunsys.path = sys.path + [lib_path]
19*4882a593Smuzhiyunimport scriptpath
20*4882a593Smuzhiyunimport scriptutils
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun# Allow importing bitbake modules
23*4882a593Smuzhiyunbitbakepath = scriptpath.add_bitbake_lib_path()
24*4882a593Smuzhiyun
25*4882a593Smuzhiyunimport bb.tinfoil
26*4882a593Smuzhiyun
27*4882a593Smuzhiyunlogger = scriptutils.logger_create('verify_homepage')
28*4882a593Smuzhiyun
29*4882a593Smuzhiyundef wgetHomepage(pn, homepage):
30*4882a593Smuzhiyun    result = subprocess.call('wget ' + '-q -T 5 -t 1 --spider ' + homepage, shell = True)
31*4882a593Smuzhiyun    if result:
32*4882a593Smuzhiyun        logger.warning("%s: failed to verify HOMEPAGE: %s " % (pn, homepage))
33*4882a593Smuzhiyun        return 1
34*4882a593Smuzhiyun    else:
35*4882a593Smuzhiyun        return 0
36*4882a593Smuzhiyun
37*4882a593Smuzhiyundef verifyHomepage(bbhandler):
38*4882a593Smuzhiyun    pkg_pn = bbhandler.cooker.recipecaches[''].pkg_pn
39*4882a593Smuzhiyun    pnlist = sorted(pkg_pn)
40*4882a593Smuzhiyun    count = 0
41*4882a593Smuzhiyun    checked = []
42*4882a593Smuzhiyun    for pn in pnlist:
43*4882a593Smuzhiyun        for fn in pkg_pn[pn]:
44*4882a593Smuzhiyun            # There's no point checking multiple BBCLASSEXTENDed variants of the same recipe
45*4882a593Smuzhiyun            realfn, _, _ = bb.cache.virtualfn2realfn(fn)
46*4882a593Smuzhiyun            if realfn in checked:
47*4882a593Smuzhiyun                continue
48*4882a593Smuzhiyun            data = bbhandler.parse_recipe_file(realfn)
49*4882a593Smuzhiyun            homepage = data.getVar("HOMEPAGE")
50*4882a593Smuzhiyun            if homepage:
51*4882a593Smuzhiyun                try:
52*4882a593Smuzhiyun                    urllib.request.urlopen(homepage, timeout=5)
53*4882a593Smuzhiyun                except Exception:
54*4882a593Smuzhiyun                    count = count + wgetHomepage(os.path.basename(realfn), homepage)
55*4882a593Smuzhiyun            checked.append(realfn)
56*4882a593Smuzhiyun    return count
57*4882a593Smuzhiyun
58*4882a593Smuzhiyunif __name__=='__main__':
59*4882a593Smuzhiyun    with bb.tinfoil.Tinfoil() as bbhandler:
60*4882a593Smuzhiyun        bbhandler.prepare()
61*4882a593Smuzhiyun        logger.info("Start verifying HOMEPAGE:")
62*4882a593Smuzhiyun        failcount = verifyHomepage(bbhandler)
63*4882a593Smuzhiyun        logger.info("Finished verifying HOMEPAGE.")
64*4882a593Smuzhiyun        logger.info("Summary: %s failed" % failcount)
65