root / pykota / trunk / setup.py @ 1813

Revision 1813, 25.9 kB (checked in by jalet, 20 years ago)

Modified installation script to please both me and the Debian packagers

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