root / pykota / trunk / setup.py @ 1600

Revision 1600, 23.1 kB (checked in by jalet, 20 years ago)

LPRng support early version

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