diff options
author | Guido van Rossum <guido@python.org> | 1996-08-20 20:54:59 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1996-08-20 20:54:59 (GMT) |
commit | e8c0a15697aaf1c6ddd46fd25aa1e38e658a2e27 (patch) | |
tree | 14e6536f744443fa91aa56e7f712137ecc0e9a2a | |
parent | b4d37791c16788145fbf8102712f45c51e9689e1 (diff) | |
download | cpython-e8c0a15697aaf1c6ddd46fd25aa1e38e658a2e27.zip cpython-e8c0a15697aaf1c6ddd46fd25aa1e38e658a2e27.tar.gz cpython-e8c0a15697aaf1c6ddd46fd25aa1e38e658a2e27.tar.bz2 |
New generic makefile by Jim F; drop pyimenu.el
-rwxr-xr-x | Misc/dlMakefile | 58 | ||||
-rw-r--r-- | Misc/gMakefile | 66 | ||||
-rwxr-xr-x | Misc/pyimenu.el | 305 |
3 files changed, 66 insertions, 363 deletions
diff --git a/Misc/dlMakefile b/Misc/dlMakefile deleted file mode 100755 index 0a69f2d..0000000 --- a/Misc/dlMakefile +++ /dev/null @@ -1,58 +0,0 @@ -# Makefile to do general-coverage creation of dynamic-load libraries -# from python C-module sources. - -# $Id$ -# Created by Ken Manheimer, Jul-1994. ken.manheimer@nist.gov, 301 975-3539 - -# To configure for your site, select the appropriate SOURCES and macro -# def and assign the right path to the prefix macro. - -ARCH= sun4 -prefix= /depot/sundry -DESTLIB= $(prefix)/lib/python/$(ARCH) - -### For Sun Make; tested in v 1.0, under both SunOS 4.1.3 and SunOS 5.3: -#SOURCES:sh= echo *.c -### For Gnu Make; works at least for v 3.59: -SOURCES= $(wildcard *.c) - -# To configure for a new module: -# - put the module in the current directory -# - if it doesn't require any special compile or load options, that's it. -# - if it does require special compile or load options, create a macro -# composed of the (full) module name, sans suffix, plus 'CFLAGS' or -# 'LDFLAGS', depending on the compile phase in question. -metalbasemoduleCFLAGS= -I$(prefix)/include/mbase51 -DNO_TIMEB -DNO_USHORT -DNO_ENCRYPT -metalbasemoduleLDFLAGS= -L/depot/sundry/plat/lib -lmb -cursesmoduleCFLAGS= -I/usr/5include -cursesmoduleLDFLAGS= -L/usr/5lib -lcurses -ltermcap - -OBJS= $(SOURCES:.c=.so) - -CC= gcc -OPT= -g -O -DEFS= -DHAVE_CONFIG_H -INCLDIR= $(prefix)/include/python -CFLAGS= $(OPT) -I$(INCLDIR) -I.. $(DEFS) -LD= ld - -all: $(OBJS) - -%.o: %.c - $(CC) -c $(CFLAGS) $(CPPFLAGS) $($*CFLAGS) -o $@ $< - -%.so: %.o - $(LD) $(LDFLAGS) -o $@ $< $($*LDFLAGS) $(LOADLIBES) - -PHONY: echo # For testing derivation of $(OBJS). -echo: - @echo "(Set SOURCES def if you don't see a '.so' for each '.c' between the brackets)" - @echo :$(OBJS): - -PHONY : install -install: $(OBJS) - ls $(OBJS) | cpio -pm $(DESTLIB) - -PHONY : clean -clean: - rm -f *.o *.so diff --git a/Misc/gMakefile b/Misc/gMakefile new file mode 100644 index 0000000..3e2d19c --- /dev/null +++ b/Misc/gMakefile @@ -0,0 +1,66 @@ +# Generic Makefile for dynamically linked extension modules. +# +# Jim Fulton, Digital Creations, jim@digicool.com + + +# Uncomment this line if you want to fix the location of the PYTHON +# installation. Otherwise, set the environment variable before using this +# Makefile. +# $(PYTHONHOME)= /usr/local/ + +# The following lines should be left as is: +pyinstalldir= $(PYTHONHOME) +installdir= $(PYTHONHOME) +exec_installdir=$(pyinstalldir) +INCLUDEPY= $(pyinstalldir)/include/Py +LIBP= $(exec_installdir)/lib/python +LIBPL= $(LIBP)/lib +PYMAKE= make -f $(LIBPL)/Makefile + +# LIBSO is the location of platform-dependent dynamically linked +# extension libraries. This can be handy when you need to build +# shared libraries that are not extensions but want to store them +# with other extensions and need to know where they are. +# Leave this line as it is. +LIBSO= `$(PYMAKE) -s echodestshared` + +# Put your module name here: +MODULE=your-module + +# Put the object files for your module here: +OBS=$(MODULE).o + +# Put extra linker options, such as libraries here: +EXTRA= + +# If you have any Python modules, include them here, so that they +# can be installed. +PYMODULES= + +build: + if [ "$(MODULE)" != your-module ]; then \ + $(PYMAKE) INCLDIR=$(INCLUDEPY) CONFIGINCLDIR=$(LIBPL) \ + ASHAREDMODULE=$(MODULE) \ + 'ASHAREDMODULESOBS=$(OBS)' \ + 'ASHAREDMODULESEXTRA=$(EXTRA)' \ + asharedmodule; \ + fi + +install: installso installpy + +installso: build + if [ "$(MODULE)" != your-module ]; then \ + $(PYMAKE) exec_prefix=$(installdir) \ + ASHAREDMODULE=$(MODULE) asharedinstall; \ + fi + +installpy: + for m in $(PYMODULES) the-end; do \ + if [ "$$m" != the-end ]; then \ + python -c "import $$m"; \ + cp $$m.pyc $(installdir)/lib/python/; \ + fi; \ + done + +clean:: + -rm -f *.o *.so *~ *# so_locations diff --git a/Misc/pyimenu.el b/Misc/pyimenu.el deleted file mode 100755 index 738de7d..0000000 --- a/Misc/pyimenu.el +++ /dev/null @@ -1,305 +0,0 @@ -;;; PYIMENU.EL --- - -;; Copyright (C) 1995 Perry A. Stoll - -;; Author: Perry A. Stoll <stoll@atr-sw.atr.co.jp> -;; Created: 12 May 1995 -;; Version: 1.0 -;; Keywords: tools python imenu - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; A copy of the GNU General Public License can be obtained from the -;; Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, -;; USA. - -;;;; COMMENTS - -;; I use the imenu package a lot for looking at Lisp and C/C++ -;; code. When I started using Python, I was dismayed that I couldn't -;; use it to look at Python source. So here's a rough go at it. - -;;;; USAGE - -;; This program is used in conjunction with the imenu package. When -;; you call imenu in python-mode in a python buffer, a list of -;; functions and classes is built. The top level menu has a list of -;; all functions and classes defined at the top indentation -;; level. Classes which have methods defined in them have a submenu -;; which contains all definitions contained in them. Selecting any -;; item will bring you to that point in the file. - -;;;; INSTALLATION - -;; You know the routine: -;; 1) Save this file as pyimenu.el, -;; 2) Place that file somewhere in your emacs load path (maybe ~/emacs -;; or ~/emacs/lisp), -;; 3) Byte compile it (M-x byte-compile-file), -;; 4) Add the following (between "cut here" and "end here") to your -;; ~/.emacs file, -;; 5) Reboot. (joke: DON'T do that, although you'll probably have to -;; either reload your ~/.emacs file or start a new emacs) - -;;--------------cut here------------------------------------------- -;;;; Load the pyimenu index function -;;(autoload 'imenu "imenu" nil t) -;;(autoload 'imenu-example--create-python-index "pyimenu") -;;;; Add the index creation function to the python-mode-hook -;;(add-hook 'python-mode-hook -;; (function -;; (lambda () -;; (setq imenu-create-index-function -;; (function imenu-example--create-python-index))))) -;;----------------end here-------------------------------------------- -;; -;; That is all you need. Of course, the following provides a more -;; useful interface. i.e. this is how I have it set up ;-) -;; -;;----------------optionally cut here---------------------------------- -;;(autoload 'imenu-add-to-menubar "imenu" nil t) -;;(defun my-imenu-install-hook () -;; (imenu-add-to-menubar (format "%s-%s" "IM" mode-name))) -;;(add-hook 'python-mode-hook (function my-imenu-install-hook)) -;;;; Bind imenu to some convenient (?) mouse key. This really lets you -;;;; fly around the buffer. Here it is set to Meta-Shift-Mouse3Click. -;;(global-set-key [M-S-down-mouse-3] (function imenu)) -;;-----------------optionaly end here----------------------------------- - -;;;; CAVEATS/NOTES - -;; 0) I'm not a professional elisp programmer and it shows in the code -;; below. If anyone there has suggestions/changes, I'd love to -;; hear them. I've tried the code out on a bunch of python files -;; from the python-1.1.1 Demo distribution and it worked with -;; them - your mileage may very. -;; -;; 1) You must have the imenu package to use this file. This file -;; works with imenu version 1.11 (the version included with emacs -;; 19.28) and imenu version 1.14; if you have a later version, this -;; may not work with it. -;; -;; 2) This setup assumes you also have python-mode.el, so that it can -;; use the python-mode-hook. It comes with the python distribution. -;; -;; 3) I don't have the Python 1.2 distribution yet, so again, this may -;; not work with that. -;; - -(require 'imenu) - -;;; -;;; VARIABLES: customizable in your .emacs file. -;;; - -(defvar imenu-example--python-show-method-args-p nil - "*When using imenu package with python-mode, whether the arguments of -the function/methods should be printed in the imenu buffer in addition -to the function/method name. If non-nil, args are printed.") - -;;; -;;; VARIABLES: internal use. -;;; -(defvar imenu-example--python-class-regexp - (concat ; <<classes>> - "\\(" ; - "^[ \t]*" ; newline and maybe whitespace - "\\(class[ \t]+[a-zA-Z0-9_]+\\)" ; class name - ; possibly multiple superclasses - "\\([ \t]*\\((\\([a-zA-Z0-9_, \t\n]\\)*)\\)?\\)" - "[ \t]*:" ; and the final : - "\\)" ; >>classes<< - ) - "Regexp for Python classes for use with the imenu package." -) - -(defvar imenu-example--python-method-regexp - (concat ; <<methods and functions>> - "\\(" ; - "^[ \t]*" ; new line and maybe whitespace - "\\(def[ \t]+" ; function definitions start with def - "\\([a-zA-Z0-9_]+\\)" ; name is here - ; function arguments... - "[ \t]*(\\([a-zA-Z0-9_=,\* \t\n]*\\))" - "\\)" ; end of def - "[ \t]*:" ; and then the : - "\\)" ; >>methods and functions<< - ) - "Regexp for Python methods/functions for use with the imenu package." - ) - -(defvar imenu-example--python-method-no-arg-parens '(2 8) - "Indicies into the parenthesis list of the regular expression for -python for use with imenu. Using these values will result in smaller -imenu lists, as arguments to functions are not listed. - -See the variable imenu-example--python-show-method-args-p to for -information") - -(defvar imenu-example--python-method-arg-parens '(2 7) - "Indicies into the parenthesis list of the regular expression for -python for use with imenu. Using these values will result in large -imenu lists, as arguments to functions are listed. - -See the variable imenu-example--python-show-method-args-p to for -information") - -;; Note that in this format, this variable can still be used with the -;; imenu--generic-function. Otherwise, there is no real reason to have -;; it. -(defvar imenu-example--generic-python-expression - (cons - (concat - imenu-example--python-class-regexp - "\\|" ; or... - imenu-example--python-method-regexp - ) - imenu-example--python-method-no-arg-parens) - "Generic Python expression which may be used directly with imenu by -setting the variable imenu-generic-expression to this value. Also, see -the function \\[imenu-example--create-python-index] for an alternate -way of finding the index.") - -;; These next two variables are used when searching for the python -;; class/definitions. Just saving some time in accessing the -;; generic-python-expression, really. -(defvar imenu-example--python-generic-regexp) -(defvar imenu-example--python-generic-parens) - -;;; -;;; CODE: -;;; - -;; Note: -;; At first, I tried using some of the functions supplied by -;; python-mode to navigate through functions and classes, but after a -;; while, I decided dump it. This file is relatively self contained -;; and I liked it that. - -;;;###autoload -(defun imenu-example--create-python-index () - "Interface function for imenu package to find all python classes and -functions/methods. Calls function -\\[imenu-example--create-python-index-engine]. See that function for -the details of how this works." - (setq imenu-example--python-generic-regexp - (car imenu-example--generic-python-expression)) - (setq imenu-example--python-generic-parens - (if imenu-example--python-show-method-args-p - imenu-example--python-method-arg-parens - imenu-example--python-method-no-arg-parens)) - (goto-char (point-min)) - (imenu-example--create-python-index-engine nil)) - -(defun imenu-example--create-python-index-engine (&optional start-indent) -"Function for finding all definitions (classes, methods, or functions) -in a python file for the imenu package. - -Retuns a possibly nested alist of the form \(INDEX-NAME - INDEX-POSITION). The second element of the alist may be an alist, -producing a nested list as in \(INDEX-NAME . INDEX-ALIST). - -This function should not be called directly, as it calls itself -recursively and requires some setup. Rather this is the engine for the -function \\[imenu-example--create-python-index]. - -It works recursively by looking for all definitions at the current -indention level. When it finds one, it adds it to the alist. If it -finds a definition at a greater indentation level, it removes the -previous definition from the alist. In it's place it adds all -definitions found at the next indentation level. When it finds a -definition that is less indented then the current level, it retuns the -alist it has created thus far. - - The optional argument START-INDENT indicates the starting indentation -at which to continue looking for python classes, methods, or -functions. If this is not supplied, the function uses the indentation -of the first definition found. " - (let ((index-alist '()) - (sub-method-alist '()) - looking-p - def-name prev-name - cur-indent def-pos - (class-paren (first imenu-example--python-generic-parens)) - (def-paren (second imenu-example--python-generic-parens))) - (setq looking-p - (re-search-forward imenu-example--python-generic-regexp - (point-max) t)) - (while looking-p - (save-excursion - ;; used to set def-name to this value but generic-extract-name is - ;; new to imenu-1.14. this way it still works with imenu-1.11 - ;;(imenu--generic-extract-name imenu-example--python-generic-parens)) - (let ((cur-paren (if (match-beginning class-paren) - class-paren def-paren))) - (setq def-name - (buffer-substring (match-beginning cur-paren) - (match-end cur-paren)))) - (beginning-of-line) - (setq cur-indent (current-indentation))) - - ;; HACK: want to go to the correct definition location. Assuming - ;; here that there are only two..which is true for python. - (setq def-pos - (or (match-beginning class-paren) - (match-beginning def-paren))) - - ; if we don't have a starting indent level, take this one - (or start-indent - (setq start-indent cur-indent)) - - ; if we don't have class name yet, take this one - (or prev-name - (setq prev-name def-name)) - - ;; what level is the next definition on? - ;; must be same, deeper or shallower indentation - (cond - - ;; at the same indent level, add it to the list... - ((= start-indent cur-indent) - (push (cons def-name def-pos) index-alist)) - - ;; deeper indented expression, recur... - ((< start-indent cur-indent) - - ;; the point is currently on the expression we're supposed to - ;; start on, so go back to the last expression. The recursive - ;; call will find this place again and add it to the correct - ;; list - (re-search-backward imenu-example--python-generic-regexp - (point-min) 'move) - (setq sub-method-alist (imenu-example--create-python-index-engine - cur-indent)) - - (if sub-method-alist - ;; we put the last element on the index-alist on the start - ;; of the submethod alist so the user can still get to it. - (let ((save-elmt (pop index-alist))) - (push (cons (imenu-create-submenu-name prev-name) - (cons save-elmt sub-method-alist)) - index-alist)))) - - ;; found less indented expression, we're done. - (t - (setq looking-p nil) - (re-search-backward imenu-example--python-generic-regexp - (point-min) t))) - (setq prev-name def-name) - (and looking-p - (setq looking-p - (re-search-forward imenu-example--python-generic-regexp - (point-max) 'move)))) - (nreverse index-alist))) - -(provide 'pyimenu) - -;;; PyImenu.EL ends here |