use spec2make.py (very first draft) when the C code does not compile (f15)
[build.git] / spec2make.py
1 #!/usr/bin/python
2
3 import sys
4 import os.path
5 import rpm
6
7 from optparse import OptionParser
8
9 def main ():
10     usage="%prog [rpmbuild-options] specfile pkg-name"
11     parser=OptionParser(usage=usage)
12     parser.add_option('-t','--target',action='store',dest='target',default=None,
13                       help='specify target arch')
14     parser.add_option('-w','--whitelist-rpms',action='store',dest='whitelist',default='',
15                       help='comma separated list of rpms to expose in makefile')
16     (options,args) = parser.parse_args()
17
18     try:
19         [specfile,package_name]=args
20     except:
21         parser.print_help()
22         sys.exit(1)
23
24     ts=rpm.TransactionSet()
25     specobj = ts.parseSpec(specfile)
26     for (fullsource,_,__) in specobj.sources:
27         #print '###fullsource=',fullsource
28         print "%s.tarballs += SOURCES/%s" %(package_name,os.path.basename(fullsource))
29         for suffix in [".tar.gz", ".tgz", ".tar.bz2", ] : 
30             #print "# trying %s"%suffix
31             if fullsource.endswith(suffix):
32                 sourcename=fullsource.replace(suffix,"")
33                 print "%s.source := SOURCES/%s" %(package_name,os.path.basename(sourcename))
34                 break
35
36     # Get SRPM name from name of first package
37     package=specobj.packages[0]
38     header0=package.header
39     name=header0.format('%{name}')
40     version=header0.format('%{version}')
41     release=header0.format('%{release}')
42     print "%s.srpm := SRPMS/%s-%s-%s.src.rpm"%(package_name, name, version, release)
43
44     target = options.target
45     whitelist=options.whitelist.split(',')
46     # Print non-empty packages
47     for package in specobj.packages:
48         header=package.header
49         name=header.format('%{name}')
50         version=header.format('%{version}')
51         release=header.format('%{release}')
52         arch=target or header.format('%{arch}')
53         
54         # skip dummy entries
55         if not (name and version and release and arch) : continue
56
57         whitelisted = name in whitelist
58
59         if header.fullFilelist or whitelisted:
60             # attach (add) rpm path to package
61             print "%s.rpms += RPMS/%s/%s-%s-%s.%s.rpm"%\
62                 (package_name, arch, name, version, release, arch)
63             # convenience
64             print "%s.rpmnames += %s"%\
65                 (package_name, name);
66             # attach path to rpm name
67             print "%s.rpm-path := RPMS/%s/%s-%s-%s.%s.rpm"%\
68                 (name,arch, name, version, release, arch)
69             # attach package to rpm name for backward resolution - should be unique
70             print "%s.package := %s"%\
71                 (name,package_name)
72             
73     for macro in ["release" , "name" , "version" , "taglevel" , ] :
74         format="%%{%s}"%macro
75         try:     print "%s.rpm-%s := %s"%(package_name,macro,header0.format(format))
76         except : print "# %s.rpm-%s undefined"%(package_name,macro)
77
78     # export arch
79     print "%s.rpm-arch := %s"%(package_name,target)
80
81 if __name__ == '__main__':
82     main()