2 # -*- coding: utf-8 -*-
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the Revised BSD License.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 Revised BSD License for more details.
13 Copyright 2018-2024 Cool Dude 2k - http://idb.berlios.de/
14 Copyright 2018-2024 Game Maker 2k - http://intdb.sourceforge.net/
15 Copyright 2018-2024 Kazuki Przyborowski - https://github.com/KazukiPrzyborowski
17 $FileInfo: mkbundle.py - Last Update: 6/18/2024 Ver. 0.13.6 RC 1 - Author: cooldude2k $
20 import os
, sys
, shutil
, subprocess
, tempfile
, subprocess
, platform
;
22 tempdir
= tempfile
.gettempdir();
24 tempdir
= tempdir
.replace(os
.sep
, "/");
25 elif(os
.path
.sep
=="\\"):
26 tempdir
= tempdir
.replace(os
.path
.sep
, "/");
28 pyimplementation
= platform
.python_implementation();
29 pylist
= ['CPython', 'IronPython', 'PyPy', 'CPython2', 'CPython3', 'Python2', 'Python3', 'Python', 'PyPy2', 'PyPy3', 'IronPython2', 'IronPython3'];
31 if(len(sys
.argv
) > 1):
32 if(sys
.argv
[1] in pylist
):
33 if(sys
.argv
[1]=="CPython"):
35 elif(sys
.argv
[1]=="IronPython"):
37 elif(sys
.argv
[1]=="PyPy"):
39 elif(sys
.argv
[1]=="CPython2"):
41 elif(sys
.argv
[1]=="CPython3"):
43 elif(sys
.argv
[1]=="Python2"):
45 elif(sys
.argv
[1]=="Python3"):
47 elif(sys
.argv
[1]=="PyPy2"):
49 elif(sys
.argv
[1]=="PyPy3"):
51 elif(sys
.argv
[1]=="IronPython2"):
53 elif(sys
.argv
[1]=="IronPython3"):
60 if(len(sys
.argv
) < 1):
61 if(pyimplementation
=="CPython"):
62 pystring
= "python"+str(sys
.version_info
[0]);
63 elif(pyimplementation
=="IronPython"):
64 pystring
= "ipy"+str(sys
.version_info
[0]);
65 elif(pyimplementation
=="PyPy"):
66 if(sys
.version_info
[0]==2):
68 elif(sys
.version_info
[0]==3):
69 pystring
= "pypy"+str(sys
.version_info
[0]);
75 if(len(sys
.argv
) > 2):
76 if(os
.path
.exists("./"+sys
.argv
[2]) and os
.path
.isfile("./"+sys
.argv
[2])):
78 outfilebin
= os
.path
.splitext(infile
)[0];
79 outfilezip
= outfilebin
+".zip";
80 elif(os
.path
.exists("./"+sys
.argv
[2]) and os
.path
.isdir("./"+sys
.argv
[2])):
81 infile
= "catfile.py";
82 outfilebin
= os
.path
.splitext(infile
)[0];
83 outfilezip
= outfilebin
+".zip";
85 infile
= "catfile.py";
86 outfilebin
= os
.path
.splitext(infile
)[0];
87 outfilezip
= outfilebin
+".zip";
89 infile
= "catfile.py";
90 outfilebin
= os
.path
.splitext(infile
)[0];
91 outfilezip
= outfilebin
+".zip";
92 if(os
.path
.exists(tempdir
+"/pybundle") and os
.path
.isfile(tempdir
+"/pybundle")):
93 os
.unlink(tempdir
+"/pybundle");
94 if(os
.path
.exists(tempdir
+"/pybundle") and os
.path
.isdir(tempdir
+"/pybundle")):
95 shutil
.rmtree(tempdir
+"/pybundle");
96 os
.mkdir(tempdir
+"/pybundle");
97 if(os
.path
.exists(tempdir
+"/pybundle/__main__.py") and os
.path
.isfile(tempdir
+"/pybundle/__main__.py")):
98 os
.unlink(tempdir
+"/pybundle/__main__.py");
99 if(os
.path
.exists(tempdir
+"/pybundle/__main__.py") and os
.path
.isdir(tempdir
+"/pybundle/__main__.py")):
100 shutil
.rmtree(tempdir
+"/pybundle/__main__.py");
101 shutil
.copy2("./"+infile
, tempdir
+"/pybundle/__main__.py");
102 if(os
.path
.exists(tempdir
+"/pybundle/pycatfile.py") and os
.path
.isfile(tempdir
+"/pybundle/pycatfile.py")):
103 os
.unlink(tempdir
+"/pybundle/pycatfile.py");
104 if(os
.path
.exists(tempdir
+"/pybundle/pycatfile.py") and os
.path
.isdir(tempdir
+"/pybundle/pycatfile.py")):
105 shutil
.rmtree(tempdir
+"/pybundle/pycatfile.py");
106 shutil
.copy2("./pycatfile.py", tempdir
+"/pybundle/pycatfile.py");
107 if(os
.path
.exists(tempdir
+"/"+outfilezip
) and os
.path
.isfile(tempdir
+"/"+outfilezip
)):
108 os
.unlink(tempdir
+"/"+outfilezip
);
109 if(os
.path
.exists(tempdir
+"/"+outfilezip
) and os
.path
.isdir(tempdir
+"/"+outfilezip
)):
110 shutil
.rmtree(tempdir
+"/"+outfilezip
);
111 shutil
.make_archive(tempdir
+"/"+outfilebin
, "zip", tempdir
+"/pybundle");
112 if(os
.path
.exists(tempdir
+"/pybundle/"+outfilezip
) and os
.path
.isfile(tempdir
+"/pybundle/"+outfilezip
)):
113 os
.unlink(tempdir
+"/pybundle/"+outfilezip
);
114 if(os
.path
.exists(tempdir
+"/pybundle/"+outfilezip
) and os
.path
.isdir(tempdir
+"/pybundle/"+outfilezip
)):
115 shutil
.rmtree(tempdir
+"/pybundle/"+outfilezip
);
116 shutil
.move(tempdir
+"/"+outfilezip
, tempdir
+"/pybundle/"+outfilezip
);
117 if(os
.path
.exists(tempdir
+"/pybundle/"+outfilebin
) and os
.path
.isfile(tempdir
+"/pybundle/"+outfilebin
)):
118 os
.unlink(tempdir
+"/pybundle/"+outfilebin
);
119 if(os
.path
.exists(tempdir
+"/pybundle/"+outfilebin
) and os
.path
.isdir(tempdir
+"/pybundle/"+outfilebin
)):
120 shutil
.rmtree(tempdir
+"/pybundle/"+outfilebin
);
121 mkbstring
= "#!/usr/bin/env "+pystring
+"\n\n";
122 mkbfp
= open(tempdir
+"/pybundle/"+outfilebin
, "wb+");
123 mkbfp
.write(mkbstring
.encode());
124 zipfp
= open(tempdir
+"/pybundle/"+outfilezip
, "rb");
125 mkbfp
.write(zipfp
.read());
128 shutil
.rmtree("./bundle/"+pystring
);
129 os
.mkdir("./bundle/"+pystring
);
130 shutil
.move(tempdir
+"/pybundle/"+outfilebin
, "./bundle/"+pystring
+"/"+outfilebin
);
131 os
.chmod("./bundle/"+pystring
+"/"+outfilebin
, 0o755);
132 shutil
.rmtree(tempdir
+"/pybundle");
133 oldpath
= os
.getcwd();
134 os
.chdir("./bundle/"+pystring
);
135 curscrpath
= os
.path
.dirname("./"+outfilebin
);
139 curscrpath
= curscrpath
.replace(os
.sep
, "/");
140 elif(os
.path
.sep
=="\\"):
141 curscrpath
= curscrpath
.replace(os
.path
.sep
, "/");
142 curscrpath
= curscrpath
+os
.path
.sep
;
143 scrfile
= curscrpath
+outfilebin
;
145 if(os.path.exists(scrfile) and os.path.isfile(scrfile) and infile=="catfile.py"):
146 scrcmd = subprocess.Popen([sys.executable, scrfile, "mksymlinks"]);