root / pykota / trunk / setup.py @ 1592

Revision 1592, 22.9 kB (checked in by jalet, 20 years ago)

Integrated most of the Debian packaging work made by Sergio Gonz�lez Gonz�lez

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