4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the Revised BSD License.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 Revised BSD License for more details.
12 Copyright 2011-2016 Game Maker 2k - https://github.com/GameMaker2k
13 Copyright 2011-2016 Kazuki Przyborowski - https://github.com/KazukiPrzyborowski
15 $FileInfo: pypac-gen.py - Last Update: 6/1/2016 Ver. 0.2.0 RC 1 - Author: cooldude2k $
18 from __future__
import absolute_import
, division
, print_function
, unicode_literals
;
19 import re
, os
, sys
, time
, datetime
, argparse
, hashlib
, subprocess
, json
;
21 __version_info__
= (0, 2, 0, "rc1");
22 if(__version_info__
[3]!=None):
23 __version__
= str(__version_info__
[0])+"."+str(__version_info__
[1])+"."+str(__version_info__
[2])+"+"+str(__version_info__
[3]);
24 if(__version_info__
[3]==None):
25 __version__
= str(__version_info__
[0])+"."+str(__version_info__
[1])+"."+str(__version_info__
[2]);
27 proname
= "pypac-gen";
29 profullname
= proname
+" "+prover
;
31 parser
= argparse
.ArgumentParser(conflict_handler
= "resolve", add_help
= True);
32 parser
.add_argument("-v", "--version", action
= "version", version
= profullname
);
33 parser
.add_argument("-s", "--source", default
= os
.path
.realpath(os
.getcwd()), help = "source dir");
34 parser
.add_argument("-g", "--getsource", action
= "store_true", help = "get source dir");
35 parser
.add_argument("-p", "--getparent", action
= "store_true", help = "get parent dir");
36 parser
.add_argument("-t", "--gettarname", action
= "store_true", help = "get tar name");
37 parser
.add_argument("-d", "--getdirname", action
= "store_true", help = "get dir name");
38 getargs
= parser
.parse_args();
39 getargs
.source
= os
.path
.realpath(getargs
.source
);
40 pkgsetuppy
= os
.path
.realpath(getargs
.source
+os
.path
.sep
+"setup.py");
41 pyexecpath
= os
.path
.realpath(sys
.executable
);
42 if(not os
.path
.exists(getargs
.source
) or not os
.path
.isdir(getargs
.source
)):
43 raise Exception("Could not find directory.");
44 if(not os
.path
.exists(pkgsetuppy
) or not os
.path
.isfile(pkgsetuppy
)):
45 raise Exception("Could not find setup.py in directory.");
47 pypkgenlistp
= subprocess
.Popen([pyexecpath
, pkgsetuppy
, "getversioninfo"], stdout
=subprocess
.PIPE
, stderr
=subprocess
.PIPE
);
48 pypkgenout
, pypkgenerr
= pypkgenlistp
.communicate();
49 if(sys
.version
[0]=="3"):
50 pypkgenout
= pypkgenout
.decode('utf-8');
51 pymodule
= json
.loads(pypkgenout
);
52 setuppy_verinfo
= pymodule
['versionlist'];
53 setuppy_author
= pymodule
['author'];
54 setuppy_authoremail
= pymodule
['authoremail'];
55 setuppy_maintainer
= pymodule
['maintainer'];
56 setuppy_maintaineremail
= pymodule
['maintaineremail'];
57 setuppy_description
= pymodule
['description'];
58 setuppy_license
= pymodule
['license'];
59 setuppy_keywords
= pymodule
['keywords'];
60 setuppy_url
= pymodule
['url'];
61 setuppy_downloadurl
= pymodule
['downloadurl'];
62 setuppy_longdescription
= pymodule
['longdescription'];
63 setuppy_platforms
= pymodule
['platforms'];
65 if(sys
.version
[0]=="2"):
66 pkgsource
= "py2motherless";
67 if(sys
.version
[0]=="3"):
68 pkgsource
= "py3motherless";
69 pkgupstreamname
= "PyMotherless";
70 pkgveralt
= str(setuppy_verinfo
[0])+"."+str(setuppy_verinfo
[1])+"."+str(setuppy_verinfo
[2]);
71 pkgveraltrel
= str(setuppy_verinfo
[4]);
72 pkgver
= str(pkgveralt
)+"-rc"+str(setuppy_verinfo
[4]);
73 pkgurgency
= "urgency=low";
74 pkgauthorname
= setuppy_author
;
75 pkgauthoremail
= setuppy_authoremail
;
76 pkgauthoremailalt
= setuppy_authoremail
.replace("@", "[at]").replace(".", "[dot]");
77 pkgauthor
= pkgauthorname
+" <"+pkgauthoremail
+">";
78 pkgauthoralt
= pkgauthorname
+" <"+pkgauthoremailalt
+">";
79 pkgmaintainername
= setuppy_maintainer
;
80 pkgmaintaineremail
= setuppy_maintaineremail
;
81 pkgmaintaineremailalt
= setuppy_maintaineremail
.replace("@", "[at]").replace(".", "[dot]");
82 pkgmaintainer
= pkgmaintainername
+" <"+pkgmaintaineremail
+">";
83 pkgmaintaineralt
= pkgmaintainername
+" <"+pkgmaintaineremailalt
+">";
84 pkggiturl
= "https://github.com/GameMaker2k/PyMotherless.git";
85 pkghomepage
= setuppy_url
;
86 pkgsection
= "python";
87 pkgpriority
= "optional";
88 if(sys
.version
[0]=="2"):
89 pkgbuilddepends
= "'python2'";
90 if(sys
.version
[0]=="3"):
91 pkgbuilddepends
= "'python'";
92 pkgstandardsversion
= "3.9.5";
93 if(sys
.version
[0]=="2"):
94 pkgpackage
= "python2-pymotherless";
95 pkgoldname
= "python2-motherless";
96 if(sys
.version
[0]=="3"):
97 pkgpackage
= "python-pymotherless";
98 pkgoldname
= "python-motherless";
99 pkgarchitecture
= "'any' 'i686' 'x86_64'";
100 if(sys
.version
[0]=="2"):
101 pkgdepends
= "'python2-setuptools'";
102 if(sys
.version
[0]=="3"):
103 pkgdepends
= "'python-setuptools'";
104 pkgdescription
= setuppy_description
+"\n "+setuppy_longdescription
;
105 pkgtzstr
= time
.strftime("%a, %d %b %Y %H:%M:%S %z");
107 if(getargs
.getsource
==True):
108 print(getargs
.source
);
110 if(getargs
.getparent
==True):
111 print(os
.path
.realpath(os
.path
.dirname(getargs
.source
)));
113 if(getargs
.getdirname
==True):
114 print(pkgsource
+"_"+pkgveralt
+".orig");
116 if(getargs
.gettarname
==True):
117 print(pkgsource
+"_"+pkgveralt
+".orig.tar.gz");
120 print("generating arch linux package build directory");
122 pacpkg_pkgbuild_dir
= os
.path
.realpath(getargs
.source
+os
.path
.sep
+pkgsource
);
123 print("creating directory "+pacpkg_pkgbuild_dir
);
124 if(not os
.path
.exists(pacpkg_pkgbuild_dir
)):
125 os
.makedirs(pacpkg_pkgbuild_dir
);
126 os
.chmod(pacpkg_pkgbuild_dir
, int("0755", 8));
128 gzparentdir
= os
.path
.realpath(os
.path
.dirname(getargs
.source
));
129 filetargz
= open(os
.path
.realpath(gzparentdir
+os
.path
.sep
+pkgsource
+"_"+pkgveralt
+".orig.tar.gz"), "rb");
130 filetargzmd5
= hashlib
.md5(filetargz
.read()).hexdigest();
132 filetargzsha1
= hashlib
.sha1(filetargz
.read()).hexdigest();
134 filetargzsha224
= hashlib
.sha224(filetargz
.read()).hexdigest();
136 filetargzsha256
= hashlib
.sha256(filetargz
.read()).hexdigest();
138 filetargzsha384
= hashlib
.sha384(filetargz
.read()).hexdigest();
140 filetargzsha512
= hashlib
.sha512(filetargz
.read()).hexdigest();
143 pacpkg_pkgbuild_file
= os
.path
.realpath(pacpkg_pkgbuild_dir
+os
.path
.sep
+"PKGBUILD");
144 print("generating file "+pacpkg_pkgbuild_file
);
145 if(sys
.version
[0]=="2"):
146 pacpkg_string_temp
= "# Maintainer: "+pkgmaintaineralt
+"\n";
147 pacpkg_string_temp
+= "# This file was automatically generated by "+profullname
+" at\n";
148 pacpkg_string_temp
+= "# "+pkgtzstr
+"\n\n";
149 pacpkg_string_temp
+= "pkgname="+pkgpackage
+"\n";
150 pacpkg_string_temp
+= "pkgver="+pkgveralt
+"\n";
151 pacpkg_string_temp
+= "pkgrel="+pkgveraltrel
+"\n";
152 pacpkg_string_temp
+= "pkgdesc='"+setuppy_description
+"'\n";
153 pacpkg_string_temp
+= "url='"+setuppy_url
+"'\n";
154 pacpkg_string_temp
+= "arch=("+pkgarchitecture
+")\n";
155 pacpkg_string_temp
+= "license=('"+setuppy_license
+"')\n";
156 pacpkg_string_temp
+= "groups=()\n";
157 pacpkg_string_temp
+= "depends=("+pkgbuilddepends
+")\n";
158 pacpkg_string_temp
+= "optdepends=()\n";
159 pacpkg_string_temp
+= "makedepends=("+pkgdepends
+")\n";
160 pacpkg_string_temp
+= "conflicts=()\n";
161 pacpkg_string_temp
+= "replaces=('"+pkgoldname
+"')\n";
162 pacpkg_string_temp
+= "backup=()\n";
163 pacpkg_string_temp
+= "options=(!strip !emptydirs)\n";
164 pacpkg_string_temp
+= "install=''\n";
165 pacpkg_string_temp
+= "source=('."+os
.path
.sep
+pkgsource
+"_"+pkgveralt
+".orig.tar.gz')\n";
166 pacpkg_string_temp
+= "md5sums=('"+filetargzmd5
+"')\n";
167 pacpkg_string_temp
+= "sha1sums=('"+filetargzsha1
+"')\n";
168 pacpkg_string_temp
+= "sha224sums=('"+filetargzsha224
+"')\n";
169 pacpkg_string_temp
+= "sha256sums=('"+filetargzsha256
+"')\n";
170 pacpkg_string_temp
+= "sha384sums=('"+filetargzsha384
+"')\n";
171 pacpkg_string_temp
+= "sha512sums=('"+filetargzsha512
+"')\n\n";
172 pacpkg_string_temp
+= "build() {\n";
173 pacpkg_string_temp
+= " cd \"${srcdir}/"+pkgsource
+"_${pkgver}.orig\"\n";
174 pacpkg_string_temp
+= " python2 ./setup.py build\n";
175 pacpkg_string_temp
+= "}\n\n";
176 pacpkg_string_temp
+= "package() {\n";
177 pacpkg_string_temp
+= " cd \"${srcdir}/"+pkgsource
+"_${pkgver}.orig\"\n";
178 pacpkg_string_temp
+= " python2 ./setup.py install --root=\"${pkgdir}\" --optimize=1\n";
179 pacpkg_string_temp
+= "}\n\n";
180 pacpkg_string_temp
+= "# vim:set ts=2 sw=2 et:\n";
181 if(sys
.version
[0]=="3"):
182 pacpkg_string_temp
= "# Maintainer: "+pkgmaintaineralt
+"\n";
183 pacpkg_string_temp
+= "# This file was automatically generated by "+profullname
+" at\n";
184 pacpkg_string_temp
+= "# "+pkgtzstr
+"\n\n";
185 pacpkg_string_temp
+= "pkgname="+pkgpackage
+"\n";
186 pacpkg_string_temp
+= "pkgver="+pkgveralt
+"\n";
187 pacpkg_string_temp
+= "pkgrel="+pkgveraltrel
+"\n";
188 pacpkg_string_temp
+= "pkgdesc='"+setuppy_description
+"'\n";
189 pacpkg_string_temp
+= "url='"+setuppy_url
+"'\n";
190 pacpkg_string_temp
+= "arch=("+pkgarchitecture
+")\n";
191 pacpkg_string_temp
+= "license=('"+setuppy_license
+"')\n";
192 pacpkg_string_temp
+= "groups=()\n";
193 pacpkg_string_temp
+= "depends=("+pkgbuilddepends
+")\n";
194 pacpkg_string_temp
+= "optdepends=()\n";
195 pacpkg_string_temp
+= "makedepends=("+pkgdepends
+")\n";
196 pacpkg_string_temp
+= "conflicts=()\n";
197 pacpkg_string_temp
+= "replaces=('"+pkgoldname
+"')\n";
198 pacpkg_string_temp
+= "backup=()\n";
199 pacpkg_string_temp
+= "options=(!strip !emptydirs)\n";
200 pacpkg_string_temp
+= "install=''\n";
201 pacpkg_string_temp
+= "source=('."+os
.path
.sep
+pkgsource
+"_"+pkgveralt
+".orig.tar.gz')\n";
202 pacpkg_string_temp
+= "md5sums=('"+filetargzmd5
+"')\n";
203 pacpkg_string_temp
+= "sha1sums=('"+filetargzsha1
+"')\n";
204 pacpkg_string_temp
+= "sha224sums=('"+filetargzsha224
+"')\n";
205 pacpkg_string_temp
+= "sha256sums=('"+filetargzsha256
+"')\n";
206 pacpkg_string_temp
+= "sha384sums=('"+filetargzsha384
+"')\n";
207 pacpkg_string_temp
+= "sha512sums=('"+filetargzsha512
+"')\n\n";
208 pacpkg_string_temp
+= "build() {\n";
209 pacpkg_string_temp
+= " cd \"${srcdir}/"+pkgsource
+"_${pkgver}.orig\"\n";
210 pacpkg_string_temp
+= " python3 ./setup.py build\n";
211 pacpkg_string_temp
+= "}\n\n";
212 pacpkg_string_temp
+= "package() {\n";
213 pacpkg_string_temp
+= " cd \"${srcdir}/"+pkgsource
+"_${pkgver}.orig\"\n";
214 pacpkg_string_temp
+= " python3 ./setup.py install --root=\"${pkgdir}\" --optimize=1\n";
215 pacpkg_string_temp
+= "}\n\n";
216 pacpkg_string_temp
+= "# vim:set ts=2 sw=2 et:\n";
217 pacpkg_file_temp
= open(pacpkg_pkgbuild_file
, "w");
218 pacpkg_file_temp
.write(pacpkg_string_temp
);
219 pacpkg_file_temp
.close();
220 os
.chmod(pacpkg_pkgbuild_file
, int("0755", 8));