2 # Given a Package and a package, write a script which copies
3 # the packages into a 'base' feed and 'x' feed.
11 sys.stderr.write("Remember now, this program doesn't copy package-specific files correctly\n")
12 progname = os.path.basename(sys.argv[0])
16 sys.stderr.write("%s [-h] Packages basefeed xfeed ofeed \n" % (progname))
19 (opts, remaining_args) = getopt.getopt(sys.argv[1:], "hv")
20 for (optkey, optval) in opts:
26 if len(remaining_args) != 4:
29 packagefiles, basefeed, xfeed, ofeed = remaining_args
31 packagedir = os.path.dirname(packagefiles)
33 pkgs = ipkg.Packages()
34 for p in packagefiles.split(','):
35 pkgs.read_packages_file(p)
41 print pkgs.packages.keys()
42 for name in pkgs.packages.keys():
43 depends = pkgs.packages[name].depends
46 for d1 in depends.split(","):
47 d1 = re.sub(r'\(.*?\)', '', d1)
48 for depend in d1.split(" "):
49 alldepends[name].append(depend)
50 alldepends[name] = filter(None, alldepends[name])
51 # for 'provides:', create a duplicate name. Merge all packages.
52 provides = pkgs.packages[name].provides
54 p1 = re.sub(r' +', '', provides)
55 for p2 in p1.split(','):
56 if alldepends.has_key(p2):
57 for pkg in alldepends[name]:
58 if not pkg in alldepends[p2]:
59 alldepends[p2].append(pkg)
61 alldepends[p2] = alldepends[name]
62 #print name,alldepends[name]
67 print "# got led to a null package name"
69 if not alldepends.has_key(p):
70 print "# %s not found in Packages" % p
72 for p1 in alldepends[p]:
74 print "# found a null package name in alldepends", p, alldepends[p]
77 elif p1 == '|':# choose the first of alternative packages.
81 searchforlen = len(searchfor)
82 for p2 in pkgs.packages.keys():
83 if p2[0:searchforlen] == searchfor:
85 break # any one will do.
89 if not add_depends(p1): return 0
92 def get_target_in_subfeeds (subfeeds, target, package):
93 for regex, (match_group, sub_target) in subfeeds.items():
95 m = re.match (regex, package)
97 sub_target_extra_qualifier = m.group(1)
98 return os.path.join (target, sub_target % (sub_target_extra_qualifier))
100 if re.match (regex, package):
101 return os.path.join (target, sub_target)
104 packages = pkgs.packages.keys()
107 subfeeds = {".*-dev(_.*)?":(False, "dev"),".*-locale-(.*)(_.*)?":(True, "locale/%s"), ".*-doc(_.*)?":(False, "doc")}
111 if not add_depends(p):
112 print "# dropping %s" % p
113 print "# ",pkgs.packages[p].maintainer
115 if verbose: print '# package:',p,' depends on:', depends
117 x = p.startswith('gpe-')
118 x += p.startswith('gconv-')
119 x += p.startswith('gtk')
120 x += p.startswith('xserver')
121 x += 'libx11-6' in depends
122 x += 'gtk+' in depends
123 x += 'xserver' in depends
125 o = p.startswith('opie')
126 o += p.startswith('qt')
127 o += p.startswith('qp')
128 o += 'libqte1' in depends
129 o += 'libqte2' in depends
130 o += 'libqpe1' in depends
133 tofn = get_target_in_subfeeds (subfeeds, xfeed, p)
135 tofn = get_target_in_subfeeds (subfeeds, ofeed, p)
137 tofn = get_target_in_subfeeds (subfeeds, basefeed, p)
140 fromfn = os.path.join(packagedir, pkgs.packages[p].filename)
141 tofn = os.path.join(tofn, pkgs.packages[p].filename)
142 fromstat = os.stat(fromfn)
145 tostat = os.stat(tofn)
149 if 0 or (not tostat or tostat[stat.ST_SIZE] != fromstat[stat.ST_SIZE] or
150 tostat[stat.ST_MTIME] != fromstat[stat.ST_MTIME]):
151 print "mkdir -p `dirname %s`" % (tofn)
152 print "cp -af ",fromfn,tofn