root / pykota / trunk / setup.py @ 1733

Revision 1733, 24.0 kB (checked in by jalet, 20 years ago)

Installation script now checks for availability of Python-SNMP (http://pysnmp.sf.net)

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