root / pykota / trunk / setup.py @ 1871

Revision 1829, 26.2 kB (checked in by jalet, 20 years ago)

Now installs translated manual pages

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