mirror of
https://github.com/cheat/cheat.git
synced 2024-11-22 22:11:35 +01:00
74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
from distutils.core import setup
|
|
import os
|
|
from os.path import join as pjoin, splitext, split as psplit
|
|
from distutils.command.install_scripts import install_scripts
|
|
from distutils import log
|
|
|
|
BAT_TEMPLATE = \
|
|
r"""@echo off
|
|
REM wrapper to use shebang first line of {FNAME}
|
|
set mypath=%~dp0
|
|
set pyscript="%mypath%{FNAME}"
|
|
set /p line1=<%pyscript%
|
|
if "%line1:~0,2%" == "#!" (goto :goodstart)
|
|
echo First line of %pyscript% does not start with "#!"
|
|
exit /b 1
|
|
:goodstart
|
|
set py_exe=%line1:~2%
|
|
call %py_exe% %pyscript% %*
|
|
"""
|
|
|
|
|
|
class my_install_scripts(install_scripts):
|
|
def run(self):
|
|
install_scripts.run(self)
|
|
if not os.name == "nt":
|
|
return
|
|
for filepath in self.get_outputs():
|
|
# If we can find an executable name in the #! top line of the script
|
|
# file, make .bat wrapper for script.
|
|
with open(filepath, 'rt') as fobj:
|
|
first_line = fobj.readline()
|
|
if not (first_line.startswith('#!') and
|
|
'python' in first_line.lower()):
|
|
log.info("No #!python executable found, skipping .bat "
|
|
"wrapper")
|
|
continue
|
|
pth, fname = psplit(filepath)
|
|
froot, ext = splitext(fname)
|
|
bat_file = pjoin(pth, froot + '.bat')
|
|
bat_contents = BAT_TEMPLATE.replace('{FNAME}', fname)
|
|
log.info("Making %s wrapper for %s" % (bat_file, filepath))
|
|
if self.dry_run:
|
|
continue
|
|
with open(bat_file, 'wt') as fobj:
|
|
fobj.write(bat_contents)
|
|
|
|
setup(
|
|
name = 'cheat',
|
|
version = '2.0.8',
|
|
author = 'Chris Lane',
|
|
author_email = 'chris@chris-allen-lane.com',
|
|
license = 'GPL3',
|
|
description = 'cheat allows you to create and view interactive cheatsheets '
|
|
'on the command-line. It was designed to help remind *nix system '
|
|
'administrators of options for commands that they use frequently, but not '
|
|
'frequently enough to remember.',
|
|
url = 'https://github.com/chrisallenlane/cheat',
|
|
packages = [
|
|
'cheat',
|
|
'cheat.cheatsheets',
|
|
'cheat.test',
|
|
],
|
|
package_data = {
|
|
'cheat.cheatsheets': [f for f in os.listdir('cheat/cheatsheets') if '.' not in f]
|
|
},
|
|
scripts = ['bin/cheat'],
|
|
install_requires = [
|
|
'docopt >= 0.6.1',
|
|
'pygments >= 1.6.0',
|
|
],
|
|
cmdclass = {'install_scripts': my_install_scripts}
|
|
|
|
)
|