.
1 #!/usr/bin/python
2 """
3 Copyright (C) 2013 2014 Johan Mattsson
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 """
18
19 import os
20 import subprocess
21 import glob
22 import platform
23 from optparse import OptionParser
24 from scripts import config
25 from scripts import version
26 from scripts.run import run
27
28 def getDest (file, dir):
29 f = dest + prefix + dir + '/'
30 s = file.rfind ('/')
31 if s > -1:
32 f += file[s + 1:]
33 else:
34 f += file
35 return f
36
37 def install (file, dir, mode):
38 f = getDest (file, dir)
39 print ("install: " + f)
40 run ('install -d ' + dest + prefix + dir)
41 run ('install -m ' + `mode` + ' ' + file + ' ' + dest + prefix + dir + '/')
42 installed.write (f + "\n")
43
44 def link (dir, file, linkname):
45 f = getDest (linkname, dir)
46 print ("install link: " + f)
47 run ('cd ' + dest + prefix + dir + ' && ln -sf ' + file + ' ' + linkname)
48 installed.write (f + "\n")
49
50 if not os.path.exists ("build/configured"):
51 print ("Project is not configured")
52 exit (1)
53
54 if not os.path.exists ("build/installed"):
55 print ("Project is not built")
56 exit (1)
57
58 parser = OptionParser()
59 parser.add_option ("-d", "--dest", dest="dest", help="install to this directory", metavar="DEST")
60 parser.add_option ("-m", "--nogzip", dest="nogzip", help="don't gzip manpages", default=False)
61 parser.add_option ("-n", "--manpages-directory", dest="mandir", help="put man pages in this directory under prefix")
62 parser.add_option ("-l", "--libdir", dest="libdir", help="path to directory for shared libraries (lib or lib64).")
63
64 (options, args) = parser.parse_args()
65
66 if not options.dest:
67 options.dest = ""
68
69 nogzip = options.nogzip
70
71 if not options.mandir:
72 mandir = "/man/man1"
73 else:
74 mandir = options.mandir
75
76 prefix = config.PREFIX
77 dest = options.dest
78
79 # create uninstall file
80 installed = open ('build/installed', 'w')
81 installed.write ('build/installed\n')
82
83 # install it:
84 for file in os.listdir('./layout'):
85 install ('layout/' + file, '/share/birdfont/layout', 644)
86
87 for file in os.listdir('./icons'):
88 install ('icons/' + file, '/share/birdfont/icons', 644)
89
90 install ('resources/key_bindings.xml', '/share/birdfont', 644)
91 install ('resources/roboto.bf', '/share/birdfont', 644)
92
93 install ('resources/linux/birdfont.desktop', '/share/applications', 644)
94 install ('resources/linux/128x128/birdfont.png', '/share/icons/hicolor/128x128/apps', 644)
95 install ('resources/linux/48x48/birdfont.png', '/share/icons/hicolor/48x48/apps', 644)
96
97 install ('resources/linux/birdfont.appdata.xml', '/share/appdata', 644)
98
99 if os.path.isfile ('build/bin/birdfont'):
100 install ('build/bin/birdfont', '/bin', 755)
101
102 install ('build/bin/birdfont-autotrace', '/bin', 755)
103 install ('build/bin/birdfont-export', '/bin', 755)
104 install ('build/bin/birdfont-import', '/bin', 755)
105
106 #library
107 if not options.libdir:
108
109 if platform.dist()[0] == 'Ubuntu' or platform.dist()[0] == 'Debian':
110 process = subprocess.Popen(['dpkg-architecture', '-qDEB_HOST_MULTIARCH'], stdout=subprocess.PIPE)
111 out, err = process.communicate()
112 libdir = '/lib/' + out.rstrip ('\n')
113 else:
114 p = platform.machine()
115 if p == 'i386' or p == 's390' or p == 'ppc' or p == 'armv7hl':
116 libdir = '/lib'
117 elif p == 'x86_64' or p == 's390x' or p == 'ppc64':
118 libdir = '/lib64'
119 else:
120 libdir = '/lib'
121 else:
122 libdir = options.libdir
123
124 if os.path.isfile ('build/bin/libbirdfont.so.' + version.SO_VERSION):
125 install ('build/bin/libbirdfont.so.' + version.SO_VERSION, libdir, 644)
126 link (libdir, 'libbirdfont.so.' + version.SO_VERSION, ' libbirdfont.so.' + version.SO_VERSION_MAJOR)
127 link (libdir, 'libbirdfont.so.' + version.SO_VERSION, ' libbirdfont.so')
128 elif os.path.isfile ('build/libbirdfont.so.' + version.SO_VERSION):
129 install ('build/libbirdfont.so.' + version.SO_VERSION, libdir, 644)
130 link (libdir, 'libbirdfont.so.' + version.SO_VERSION, ' libbirdfont.so.' + version.SO_VERSION_MAJOR)
131 link (libdir, 'libbirdfont.so.' + version.SO_VERSION, ' libbirdfont.so')
132 elif os.path.isfile ('build/bin/libbirdfont.' + version.SO_VERSION + '.dylib'):
133 install ('build/bin/libbirdfont.' + version.SO_VERSION + '.dylib', libdir, 644)
134 link (libdir, 'libbirdfont.' + version.SO_VERSION + '.dylib', ' libbirdfont.dylib.' + version.SO_VERSION_MAJOR)
135 link (libdir, 'libbirdfont.' + version.SO_VERSION + '.dylib', ' libbirdfont.dylib')
136 else:
137 print ("Can't find libbirdfont.")
138 exit (1)
139
140
141 if os.path.isfile ('build/bin/libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION):
142 install ('build/bin/libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION, libdir, 644)
143 link (libdir, 'libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION, ' libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION_MAJOR)
144 link (libdir, 'libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION, ' libbirdxml.so')
145 elif os.path.isfile ('build/libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION):
146 install ('build/libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION, libdir, 644)
147 link (libdir, 'libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION, ' libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION_MAJOR)
148 link (libdir, 'libbirdxml.so.' + version.LIBBIRDXML_SO_VERSION, ' libbirdxml.so')
149 elif os.path.isfile ('build/bin/libbirdxml.' + version.LIBBIRDXML_SO_VERSION + '.dylib'):
150 install ('build/bin/libbirdxml.' + version.LIBBIRDXML_SO_VERSION + '.dylib', libdir, 644)
151 link (libdir, 'libbirdxml.' + version.LIBBIRDXML_SO_VERSION + '.dylib', ' libbirdxml.dylib.' + version.LIBBIRDXML_SO_VERSION_MAJOR)
152 link (libdir, 'libbirdxml.' + version.LIBBIRDXML_SO_VERSION + '.dylib', ' libbirdxml.dylib')
153 else:
154 print ("Can't find libbirdxml.")
155
156
157 #manpages
158 if not nogzip:
159 install ('build/birdfont.1.gz', mandir, 644)
160 install ('build/birdfont-autotrace.1.gz', mandir, 644)
161 install ('build/birdfont-export.1.gz', mandir, 644)
162 install ('build/birdfont-import.1.gz', mandir, 644)
163 else:
164 install ('resources/linux/birdfont.1', mandir, 644)
165 install ('resources/linux/birdfont-autotrace.1', mandir, 644)
166 install ('resources/linux/birdfont-export.1', mandir, 644)
167 install ('resources/linux/birdfont-import.1', mandir, 644)
168
169 #translations
170 for lang_dir in glob.glob('build/locale/*'):
171 lc = lang_dir.replace ('build/locale/', "")
172 install ('build/locale/' + lc + '/LC_MESSAGES/birdfont.mo', '/share/locale/' + lc + '/LC_MESSAGES' , 644);
173
174 #file type
175 install ('resources/linux/birdfont.xml', '/share/mime/packages', 644)
176
177 installed.close ()
178