root / pykota / trunk / setup.py @ 1771

Revision 1771, 24.4 kB (checked in by jalet, 20 years ago)

dumpykota can now output datas in the XML format

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
Line 
1#! /usr/bin/env python
2# -*- coding: ISO-8859-15 -*-
3#
4# PyKota
5#
6# PyKota : Print Quotas for CUPS and LPRng
7#
8# (c) 2003-2004 Jerome Alet <alet@librelogiciel.com>
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22#
23# $Id$
24#
25# $Log$
26# Revision 1.53  2004/10/04 21:25:29  jalet
27# dumpykota can now output datas in the XML format
28#
29# Revision 1.52  2004/09/30 09:52:45  jalet
30# Initial release of autopykota. Reading help or manpage is greatly
31# encouraged !
32#
33# Revision 1.51  2004/09/21 21:31:35  jalet
34# Installation script now checks for availability of Python-SNMP (http://pysnmp.sf.net)
35#
36# Revision 1.50  2004/09/14 22:29:12  jalet
37# First version of dumpykota. Works fine but only with PostgreSQL backend
38# for now.
39#
40# Revision 1.49  2004/07/28 13:00:02  jalet
41# Now takes care of .sxi and .sxc files if any
42#
43# Revision 1.48  2004/07/27 07:14:24  jalet
44# Now warns the user if pyosd is not present
45#
46# Revision 1.47  2004/07/16 12:22:45  jalet
47# LPRng support early version
48#
49# Revision 1.46  2004/07/07 13:21:26  jalet
50# Introduction of the pykosd command
51#
52# Revision 1.45  2004/07/06 09:37:01  jalet
53# Integrated most of the Debian packaging work made by Sergio Gonz�z Gonz�z
54#
55# Revision 1.44  2004/06/05 22:03:49  jalet
56# Payments history is now stored in database
57#
58# Revision 1.43  2004/05/25 09:49:41  jalet
59# The old pykota filter has been removed. LPRng support disabled for now.
60#
61# Revision 1.42  2004/05/18 14:48:46  jalet
62# Big code changes to completely remove the need for "requester" directives,
63# jsut use "hardware(... your previous requester directive's content ...)"
64#
65# Revision 1.41  2004/05/13 14:17:32  jalet
66# Warning about changed accounter and requester directives
67#
68# Revision 1.40  2004/05/13 13:59:27  jalet
69# Code simplifications
70#
71# Revision 1.39  2004/04/08 17:07:41  jalet
72# pkpgcounter added
73#
74# Revision 1.38  2004/03/18 09:18:09  jalet
75# Installation now checks for old scripts
76#
77# Revision 1.37  2004/03/03 19:35:36  jalet
78# Spelling problem. Thanks to Jurandy Martins
79#
80# Revision 1.36  2004/02/25 15:10:38  jalet
81# Preliminary snmpprinterstatus command added.
82#
83# Revision 1.35  2004/02/12 22:43:58  jalet
84# Better integration in Debian and more LSB compliance, thanks to
85# Peter Hawkins.
86#
87# Revision 1.34  2004/02/07 13:45:51  jalet
88# Preliminary work on the pkhint command
89#
90# Revision 1.33  2004/02/04 11:16:59  jalet
91# pkprinters command line tool added.
92#
93# Revision 1.32  2004/01/18 20:52:50  jalet
94# Portuguese portuguese translation replaces brasilian portuguese one, which
95# moves in its own directory.
96# Installation script modified to reorganise installed documentation and include
97# the documentation on OpenOffice.org + ODBC
98#
99# Revision 1.31  2004/01/15 12:50:41  jalet
100# Installation scripts now tells where the documentation was installed.
101#
102# Revision 1.30  2004/01/12 15:45:03  jalet
103# Now installs documentation in /usr/share/doc/pykota too.
104#
105# Revision 1.29  2004/01/08 14:10:32  jalet
106# Copyright year changed.
107#
108# Revision 1.28  2003/12/27 16:49:25  uid67467
109# Should be ok now.
110#
111# Revision 1.28  2003/12/06 09:03:43  jalet
112# Added Perl script to retrieve printer's internal page counter via PJL,
113# contributed by Ren�und Jensen.
114#
115# Revision 1.27  2003/11/28 08:31:28  jalet
116# Shell script to wait for AppleTalk enabled printers being idle was added.
117#
118# Revision 1.26  2003/11/08 16:05:31  jalet
119# CUPS backend added for people to experiment.
120#
121# Revision 1.25  2003/10/08 07:01:19  jalet
122# Job history can be disabled.
123# Some typos in README.
124# More messages in setup script.
125#
126# Revision 1.24  2003/10/07 09:07:27  jalet
127# Character encoding added to please latest version of Python
128#
129# Revision 1.23  2003/07/29 20:55:17  jalet
130# 1.14 is out !
131#
132# Revision 1.22  2003/07/29 09:54:03  jalet
133# Added configurable LDAP mail attribute support
134#
135# Revision 1.21  2003/07/28 09:11:12  jalet
136# PyKota now tries to add its attributes intelligently in existing LDAP
137# directories.
138#
139# Revision 1.20  2003/07/23 16:51:32  jalet
140# waitprinter.sh is now included to prevent PyKota from asking the
141# printer's internal page counter while a job is still being printer.
142#
143# Revision 1.19  2003/07/16 21:53:07  jalet
144# Really big modifications wrt new configuration file's location and content.
145#
146# Revision 1.18  2003/07/03 09:44:00  jalet
147# Now includes the pykotme utility
148#
149# Revision 1.17  2003/06/30 12:46:15  jalet
150# Extracted reporting code.
151#
152# Revision 1.16  2003/06/06 20:49:15  jalet
153# Very latest schema. UNTESTED.
154#
155# Revision 1.15  2003/05/17 16:32:30  jalet
156# Also outputs the original import error message.
157#
158# Revision 1.14  2003/05/17 16:31:38  jalet
159# Dies gracefully if DistUtils is not present.
160#
161# Revision 1.13  2003/04/29 18:37:54  jalet
162# Pluggable accounting methods (actually doesn't support external scripts)
163#
164# Revision 1.12  2003/04/23 22:13:56  jalet
165# Preliminary support for LPRng added BUT STILL UNTESTED.
166#
167# Revision 1.11  2003/04/17 13:49:29  jalet
168# Typo
169#
170# Revision 1.10  2003/04/17 13:48:39  jalet
171# Better help
172#
173# Revision 1.9  2003/04/17 13:47:28  jalet
174# Help added during installation.
175#
176# Revision 1.8  2003/04/15 17:49:29  jalet
177# Installation script now checks the presence of Netatalk
178#
179# Revision 1.7  2003/04/03 20:03:37  jalet
180# Installation script now allows to install the sample configuration file.
181#
182# Revision 1.6  2003/03/29 13:45:26  jalet
183# GPL paragraphs were incorrectly (from memory) copied into the sources.
184# Two README files were added.
185# Upgrade script for PostgreSQL pre 1.01 schema was added.
186#
187# Revision 1.5  2003/03/29 13:08:28  jalet
188# Configuration is now expected to be found in /etc/pykota.conf instead of
189# in /etc/cups/pykota.conf
190# Installation script can move old config files to the new location if needed.
191# Better error handling if configuration file is absent.
192#
193# Revision 1.4  2003/03/29 09:47:00  jalet
194# More powerful installation script.
195#
196# Revision 1.3  2003/03/26 17:48:36  jalet
197# First shot at trying to detect the availability of the needed software
198# during the installation.
199#
200# Revision 1.2  2003/03/09 16:49:04  jalet
201# The installation script installs the man pages too now.
202#
203# Revision 1.1  2003/02/05 21:28:17  jalet
204# Initial import into CVS
205#
206#
207#
208
209import sys
210import glob
211import os
212import shutil
213try :
214    from distutils.core import setup
215except ImportError, msg :   
216    sys.stderr.write("%s\n" % msg)
217    sys.stderr.write("You need the DistUtils Python module.\nunder Debian, you may have to install the python-dev package.\nOf course, YMMV.\n")
218    sys.exit(-1)
219
220from distutils import sysconfig
221sys.path.insert(0, "pykota")
222from pykota.version import __version__, __doc__
223
224ACTION_CONTINUE = 0
225ACTION_ABORT = 1
226
227#ETC_DIR = "./debian/tmp/etc/pykota/"
228ETC_DIR = "/etc/pykota/"
229
230def checkOldModule(path) :
231    """Checks if an old PyKota module is still in the destination (in case of upgrade)."""
232    fname = os.path.join(sysconfig.get_python_lib(), "pykota", path)
233    for ext in ["py", "pyc", "pyo"] :
234        fullname = "%s.%s" % (fname, ext)
235        if os.path.isfile(fullname) :
236            sys.stderr.write("ERROR : old module %s still exists. Remove it and restart installation.\n" % fullname)
237            sys.stderr.write("INSTALLATION ABORTED !\n")
238            sys.exit(-1)
239   
240def checkOldScript(cmd) :
241    """Checks if an old shell script is still around in /usr/bin."""
242    return os.path.isfile(os.path.join("/usr/bin", cmd))
243
244def checkModule(module) :
245    """Checks if a Python module is available or not."""
246    try :
247        exec "import %s" % module
248    except ImportError :   
249        return 0
250    else :   
251        return 1
252       
253def checkCommand(command) :
254    """Checks if a command is available or not."""
255    input = os.popen("type %s 2>/dev/null" % command)
256    result = input.read().strip()
257    input.close()
258    return result
259   
260def checkWithPrompt(prompt, module=None, command=None, helper=None) :
261    """Tells the user what will be checked, and asks him what to do if something is absent."""
262    sys.stdout.write("Checking for %s availability : " % prompt)
263    sys.stdout.flush()
264    if command is not None :
265        result = checkCommand(command)
266    elif module is not None :   
267        result = checkModule(module)
268    if result :   
269        sys.stdout.write("OK\n")
270        return ACTION_CONTINUE
271    else :   
272        sys.stdout.write("NO.\n")
273        sys.stderr.write("ERROR : %s not available !\n" % prompt)
274        if helper is not None :
275            sys.stdout.write("%s\n" % helper)
276            sys.stdout.write("You may continue safely if you don't need this functionnality.\n")
277        answer = raw_input("%s is missing. Do you want to continue anyway (y/N) ? " % prompt)
278        if answer[0:1].upper() == 'Y' :
279            return ACTION_CONTINUE
280        else :
281            return ACTION_ABORT
282   
283if ("install" in sys.argv) and not ("help" in sys.argv) :
284    # checks if Python version is correct, we need >= 2.1
285    if not (sys.version > "2.1") :
286        sys.stderr.write("PyKota needs at least Python v2.1 !\nYour version seems to be older than that, please update.\nAborted !\n")
287        sys.exit(-1)
288       
289    # checks if a configuration file is present in the new location
290    if not os.path.isfile(os.path.join(ETC_DIR,"pykota.conf")) :
291        if not os.path.isdir(ETC_DIR) :
292            try :
293                os.mkdir(ETC_DIR)
294            except OSError, msg :   
295                sys.stderr.write("An error occured while creating the etc/pykota directory.\n%s\n" % msg)
296                sys.exit(-1)
297               
298        if os.path.isfile("/etc/pykota.conf") :
299            # upgrade from pre-1.14 to 1.14 and above
300            sys.stdout.write("From version 1.14 on, PyKota expects to find its configuration\nfile in /etc/pykota/ instead of /etc/\n")
301            sys.stdout.write("It seems that you've got a configuration file in the old location,\nso it will not be used anymore,\nand there's no configuration file in the new location.\n")
302            answer = raw_input("Do you want to move /etc/pykota.conf to /etc/pykota/pykota.conf (y/N) ? ")
303            if answer[0:1].upper() == 'Y' :
304                try :
305                    os.rename("/etc/pykota.conf", os.path.join(ETC_DIR,"pykota.conf"))
306                except OSError :   
307                    sys.stderr.write("ERROR : An error occured while moving /etc/pykota.conf to /etc/pykota/pykota.conf\nAborted !\n")
308                    sys.exit(-1)
309                else :   
310                    sys.stdout.write("Configuration file /etc/pykota.conf moved to /etc/pykota/pykota.conf.\n")
311            else :
312                sys.stderr.write("WARNING : Configuration file /etc/pykota.conf won't be used ! Move it to /etc/pykota/ instead.\n")
313                sys.stderr.write("PyKota installation will continue anyway,\nbut the software won't run until you put a proper configuration file in /etc/pykota/\n")
314            dummy = raw_input("Please press ENTER when you have read the message above. ")
315        else :
316            # first installation
317            if os.path.isfile("conf/pykota.conf.sample") :
318                answer = raw_input("Do you want to install\n\tconf/pykota.conf.sample as /etc/pykota/pykota.conf (y/N) ? ")
319                if answer[0:1].upper() == 'Y' :
320                    try :
321                        shutil.copy("conf/pykota.conf.sample", os.path.join(ETC_DIR,"pykota.conf"))       
322                        shutil.copy("conf/pykotadmin.conf.sample", os.path.join(ETC_DIR,"pykotadmin.conf"))       
323                    except IOError, msg :   
324                        sys.stderr.write("WARNING : Problem while installing sample configuration files in /etc/pykota/, please do it manually.\n%s\n" % msg)
325                    else :   
326                        sys.stdout.write("Configuration file /etc/pykota/pykota.conf and /etc/pykota/pykotadmin.conf installed.\nDon't forget to adapt these files to your needs.\n")
327                else :       
328                    sys.stderr.write("WARNING : PyKota won't run without a configuration file !\n")
329            else :       
330                # Problem ?
331                sys.stderr.write("WARNING : PyKota's sample configuration file cannot be found.\nWhat you have downloaded seems to be incomplete,\nor you are not in the pykota directory.\nPlease double check, and restart the installation procedure.\n")
332            dummy = raw_input("Please press ENTER when you have read the message above. ")
333    else :   
334        # already at 1.14 or above.
335        # Now check if old scripts are still in /usr/bin
336        for script in ["cupspykota", "pykota", "waitprinter.sh", "papwaitprinter.sh", "mailandpopup.sh", "pagecount.pl"] :
337            if checkOldScript(script) :
338                sys.stderr.write("WARNING : the %s script is still present in /usr/bin, but the new version will be installed in /usr/share/pykota, please remove the %s script from /usr/bin and double check that your configuration is correct.\n" % (script, script))
339                if script == "cupspykota" :
340                    sys.stderr.write("\nBe sure to also remove the old symbolic link from /usr/lib/cups/backend/cupspykota to /usr/bin/cupspykota. You'll have to recreate it once the installation has finished successfully.\n")
341                sys.stderr.write("\nINSTALLATION ABORTED !\nPlease correct the problem and restart installation.\n")
342                sys.exit(-1)
343               
344        # now checks if pre-1.19alpha8 code is still there       
345        for module in ["accounters/querying", "accounters/external", "requesters/snmp", "requesters/external"] :
346            checkOldModule(module)
347       
348    # Second stage, we will fail if onfiguration is incorrect for security reasons
349    from pykota.config import PyKotaConfig,PyKotaConfigError
350    try :
351        conf = PyKotaConfig(ETC_DIR)
352    except PyKotaConfigError, msg :   
353        sys.stedrr.write("%s\nINSTALLATION ABORTED !\nPlease restart installation.\n" % msg)
354        sys.exit(-1)
355    else :
356        hasadmin = conf.getGlobalOption("storageadmin", ignore=1)
357        hasadminpw = conf.getGlobalOption("storageadminpw", ignore=1)
358        hasuser = conf.getGlobalOption("storageuser", ignore=1)
359        if hasadmin or hasadminpw : 
360            sys.stderr.write("From version 1.14 on, PyKota expects that /etc/pykota/pykota.conf doesn't contain the Quota Storage Administrator's name and optional password.\n")
361            sys.stderr.write("Please put these in a [global] section in /etc/pykota/pykotadmin.conf\n")
362            sys.stderr.write("Then replace these values with 'storageuser' and 'storageuserpw' in /etc/pykota/pykota.conf\n")
363            sys.stderr.write("These two fields were re-introduced to allow any user to read to his own quota, without allowing them to modify it.\n")
364            sys.stderr.write("You can look at the conf/pykota.conf.sample and conf/pykotadmin.conf.sample files for examples.\n")
365            sys.stderr.write("YOU HAVE TO DO THESE MODIFICATIONS MANUALLY, AND RESTART THE INSTALLATION.\n")
366            sys.stderr.write("INSTALLATION ABORTED FOR SECURITY REASONS.\n")
367            sys.exit(-1)
368        if not hasuser :
369            sys.stderr.write("From version 1.14 on, PyKota expects that /etc/pykota/pykota.conf contains the Quota Storage Normal User's name and optional password.\n")
370            sys.stderr.write("Please put these in a [global] section in /etc/pykota/pykota.conf\n")
371            sys.stderr.write("These fields are respectively named 'storageuser' and 'storageuserpw'.\n")
372            sys.stderr.write("These two fields were re-introduced to allow any user to read to his own quota, without allowing them to modify it.\n")
373            sys.stderr.write("You can look at the conf/pykota.conf.sample and conf/pykotadmin.conf.sample files for examples.\n")
374            sys.stderr.write("YOU HAVE TO DO THESE MODIFICATIONS MANUALLY, AND RESTART THE INSTALLATION.\n")
375            sys.stderr.write("INSTALLATION ABORTED FOR SECURITY REASONS.\n")
376            sys.exit(-1)
377           
378        sb = conf.getStorageBackend()
379        if (sb.get("storageadmin") is None) or (sb.get("storageuser") is None) :
380            sys.stderr.write("From version 1.14 on, PyKota expects that /etc/pykota/pykota.conf contains the Quota Storage Normal User's name and optional password which gives READONLY access to the Print Quota DataBase,")
381            sys.stderr.write("and that /etc/pykota/pykotadmin.conf contains the Quota Storage Administrator's name and optional password which gives READ/WRITE access to the Print Quota DataBase.\n")
382            sys.stderr.write("Your configuration doesn't seem to be OK, please modify your configuration files in /etc/pykota/\n")
383            sys.stderr.write("AND RESTART THE INSTALLATION.\n")
384            sys.stderr.write("INSTALLATION ABORTED FOR SECURITY REASONS.\n")
385            sys.exit(-1)
386           
387        # warns for new LDAP fields   
388        if sb.get("storagebackend") == "ldapstorage" :   
389            usermail = conf.getGlobalOption("usermail", ignore=1)
390            newuser = conf.getGlobalOption("newuser", ignore=1)
391            newgroup = conf.getGlobalOption("newgroup", ignore=1)
392            if not (usermail and newuser and newgroup) :
393                sys.stderr.write("From version 1.14 on, PyKota LDAP Support needs three additional configuration fields.\n")
394                sys.stderr.write("Please put the 'usermail', 'newuser' and 'newgroup' configuration fields in a\n[global] section in /etc/pykota/pykota.conf\n")
395                sys.stderr.write("You can look at the conf/pykota.conf.sample file for examples.\n")
396                sys.stderr.write("YOU HAVE TO DO THESE MODIFICATIONS MANUALLY, AND RESTART THE INSTALLATION.\n")
397                sys.stderr.write("INSTALLATION ABORTED BECAUSE CONFIGURATION INCOMPLETE.\n")
398                sys.exit(-1)
399               
400        # Say something about caching mechanism and disabling job history
401        sys.stdout.write("You can now activate the database caching mechanism\nwhich is disabled by default.\nIt is especially recommended with the LDAP backend.\n")
402        sys.stdout.write("You can now disable the preservation of the complete\njob history which is enabled by default.\nIt is probably more useful with the LDAP backend.\n")
403        sys.stdout.write("PLEASE LOOK AT THE SAMPLE CONFIGURATION FILE conf/pykota.conf.sample\n")
404        sys.stdout.write("TO LEARN HOW TO DO\n")
405        dummy = raw_input("Please press ENTER when you have read the message above. ")
406        sys.stdout.write("\n")
407           
408    # change files permissions   
409    os.chmod(os.path.join(ETC_DIR,"pykota.conf"), 0644)
410    os.chmod(os.path.join(ETC_DIR,"pykotadmin.conf"), 0640)
411   
412    # WARNING MESSAGE   
413    sys.stdout.write("WARNING : IF YOU ARE UPGRADING FROM A PRE-1.19alpha17 TO 1.19alpha17 OR ABOVE\n")
414    sys.stdout.write("AND USE THE POSTGRESQL BACKEND, THEN YOU HAVE TO MODIFY YOUR\n")
415    sys.stdout.write("DATABASE SCHEMA USING initscripts/postgresql/upgrade-to-1.19.sql\n")
416    sys.stdout.write("PLEASE READ DOCUMENTATION IN initscripts/postgresql/ TO LEARN HOW TO DO.\n")
417    sys.stdout.write("YOU CAN DO THAT AFTER THE INSTALLATION IS FINISHED, OR PRESS CTRL+C NOW.\n")
418    sys.stdout.write("\n\nYOU DON'T HAVE ANYTHING SPECIAL TO DO IF THIS IS YOUR FIRST INSTALLATION\nOR IF YOU ARE ALREADY RUNNING VERSION 1.19alpha17 OR ABOVE.\n\n")
419    dummy = raw_input("Please press ENTER when you have read the message above. ")
420   
421    sys.stdout.write("\n\nWARNING : IF YOU ARE UPGRADING FROM A PRE-1.19alpha10 TO 1.19alpha10 OR ABOVE\n")
422    sys.stdout.write("YOU **MUST** MODIFY YOUR /etc/pykota/pykota.conf FILE BECAUSE accounter\n")
423    sys.stdout.write("AND requester DIRECTIVES SUPPORTED VALUES HAVE CHANGED.\n\n")
424    sys.stdout.write("YOU CAN DO THAT AFTER THE INSTALLATION IS FINISHED, OR PRESS CTRL+C NOW.\n")
425    sys.stdout.write("\n\nYOU DON'T HAVE ANYTHING SPECIAL TO DO IF THIS IS YOUR FIRST INSTALLATION\nOR IF YOU ARE ALREADY RUNNING VERSION 1.19alpha10 OR ABOVE.\n\n")
426    dummy = raw_input("Please press ENTER when you have read the message above. ")
427   
428    # checks if some needed Python modules are there or not.
429    modulestocheck = [ ("PygreSQL", "pg", "PygreSQL is mandatory if you want to use PostgreSQL as the quota storage backend.\nSee http://www.pygresql.org"),                                           
430                       ("mxDateTime", "mx.DateTime", "eGenix' mxDateTime is mandatory for PyKota to work.\nSee http://www.egenix.com"), 
431                       ("Python-LDAP", "ldap", "Python-LDAP is mandatory if you plan to use an LDAP\ndirectory as the quota storage backend.\nSee http://python-ldap.sf.net"),
432                       ("Python-OSD", "pyosd", "Python-OSD is recommended if you plan to use the X Window On Screen Display\nprint quota reminder named pykosd."),
433                       ("Python-SNMP", "pysnmp", "Python-SNMP is recommended if you plan to use hardware\naccounting with printers which support SNMP.\nSee http://pysnmp.sf.net"),
434                       ("Python-JAXML", "jaxml", "Python-JAXML is recommended if you plan to dump datas in the XML format.\nSee http://www.librelogiciel.com/software/"),
435                     ]
436    commandstocheck = [("SNMP Tools", "snmpget", "SNMP Tools are needed if you want to use SNMP enabled printers."), ("Netatalk", "pap", "Netatalk is needed if you want to use AppleTalk enabled printers.")]
437    for (name, module, helper) in modulestocheck :
438        action = checkWithPrompt(name, module=module, helper=helper)
439        if action == ACTION_ABORT :
440            sys.stderr.write("Aborted !\n")
441            sys.exit(-1)
442           
443    # checks if some software are there or not.
444    for (name, command, helper) in commandstocheck :
445        action = checkWithPrompt(name, command=command, helper=helper)
446        if action == ACTION_ABORT :
447            sys.stderr.write("Aborted !\n")
448            sys.exit(-1)
449           
450data_files = []
451mofiles = glob.glob(os.sep.join(["po", "*", "*.mo"]))
452for mofile in mofiles :
453    lang = mofile.split(os.sep)[1]
454    directory = os.sep.join(["share", "locale", lang, "LC_MESSAGES"])
455    data_files.append((directory, [ mofile ]))
456   
457docdir = "share/doc/pykota"   
458docfiles = ["README", "FAQ", "SECURITY", "COPYING", "LICENSE", "CREDITS", "TODO", "NEWS"]
459data_files.append((docdir, docfiles))
460
461docfiles = glob.glob(os.sep.join(["docs", "*.pdf"]))
462docfiles += glob.glob(os.sep.join(["docs", "*.sx?"]))
463data_files.append((docdir, docfiles))
464
465docfiles = glob.glob(os.sep.join(["docs", "spanish", "*.pdf"]))
466docfiles += glob.glob(os.sep.join(["docs", "spanish", "*.sxw"]))
467data_files.append((os.path.join(docdir, "spanish"), docfiles))
468
469docfiles = glob.glob(os.sep.join(["docs", "pykota", "*.html"]))
470data_files.append((os.path.join(docdir, "html"), docfiles))
471
472docfiles = glob.glob(os.sep.join(["openoffice", "*.sx?"]))
473docfiles += glob.glob(os.sep.join(["openoffice", "*.png"]))
474docfiles += glob.glob(os.sep.join(["openoffice", "README"]))
475data_files.append((os.path.join(docdir, "openoffice"), docfiles))
476
477directory = os.sep.join(["share", "man", "man1"])
478manpages = glob.glob(os.sep.join(["man", "*.1"]))   
479data_files.append((directory, manpages))
480
481directory = os.sep.join(["share", "pykota"])
482data_files.append((directory, ["bin/cupspykota", "bin/lprngpykota", "bin/waitprinter.sh", "bin/papwaitprinter.sh", "bin/mailandpopup.sh", "contributed/pagecount.pl", "untested/pjl/pagecount.pjl", "untested/pjl/status.pjl", "untested/netatalk/netatalk.sh", "untested/netatalk/pagecount.ps"]))
483
484setup(name = "pykota", version = __version__,
485      license = "GNU GPL",
486      description = __doc__,
487      author = "Jerome Alet",
488      author_email = "alet@librelogiciel.com",
489      url = "http://www.librelogiciel.com/software/",
490      packages = [ "pykota", "pykota.storages", "pykota.loggers", "pykota.accounters", "pykota.reporters" ],
491      scripts = [ "bin/autopykota", "bin/dumpykota", "bin/pkpgcounter", "bin/snmpprinterstatus", "bin/pykosd", "bin/edpykota", "bin/repykota", "bin/warnpykota", "bin/pykotme", "bin/pkprinters", "bin/pkhint" ],
492      data_files = data_files)
493
494if ("install" in sys.argv) and not ("help" in sys.argv) :
495    sys.stdout.write("\n\nYou can give a look at PyKota's documentation in:\n%s\n\n" % docdir)
Note: See TracBrowser for help on using the browser.