From bcaf5a140dd5cf15208042985f78fa1a1e0b7697 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Thu, 13 Jun 2019 14:07:12 +0200 Subject: Move mantemp.el to obsolete/ * lisp/progmodes/mantemp.el: Move to obsolete/. (bug#34789) * doc/emacs/ack.texi (Acknowledgments): Remove obsolete library mantemp.el. --- doc/emacs/ack.texi | 4 - etc/TODO | 5 +- lisp/obsolete/mantemp.el | 208 ++++++++++++++++++++++++++++++++++++++++++++++ lisp/progmodes/mantemp.el | 204 --------------------------------------------- 4 files changed, 210 insertions(+), 211 deletions(-) create mode 100644 lisp/obsolete/mantemp.el delete mode 100644 lisp/progmodes/mantemp.el diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi index 0e4a982da40..06e75f30773 100644 --- a/doc/emacs/ack.texi +++ b/doc/emacs/ack.texi @@ -502,10 +502,6 @@ expansion package. Tassilo Horn wrote DocView mode, allowing viewing of PDF, PostScript and DVI documents. -@item -Tom Houlder wrote @file{mantemp.el}, which generates manual C@t{++} -template instantiations. - @item Joakim Hove wrote @file{html2text.el}, a html to plain text converter. diff --git a/etc/TODO b/etc/TODO index f8c2d285eef..273455c386e 100644 --- a/etc/TODO +++ b/etc/TODO @@ -560,9 +560,8 @@ from the emacsclient process. snmp-mode [?], soundex [should be interactive?], strokes [start from the web page], talk, thingatpt [interactive functions?], type-break, vcursor, xscheme, zone-mode [?], mlconvert [?], iso-cvt, - feedmail [?], uce, gametree, page-ext, - refbib, refer, scribe, texinfo, underline, - cmacexp, hideif, mantemp [obsolete?], pcomplete, xml, + feedmail [?], uce, gametree, page-ext, refbib, refer, scribe, + texinfo, underline, cmacexp, hideif, pcomplete, xml, cvs-status (should be described in PCL-CVS manual); other progmodes, probably in separate manual. diff --git a/lisp/obsolete/mantemp.el b/lisp/obsolete/mantemp.el new file mode 100644 index 00000000000..ad638422c2b --- /dev/null +++ b/lisp/obsolete/mantemp.el @@ -0,0 +1,208 @@ +;;; mantemp.el --- create manual template instantiations from g++ 2.7.2 output + +;; Copyright (C) 1996, 2001-2019 Free Software Foundation, Inc. + +;; Author: Tom Houlder +;; Created: 10 Dec 1996 +;; Keywords: g++, templates +;; Obsolete-since: 27.1 + +;; This file is part of GNU Emacs. + +;; GNU Emacs 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 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs 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. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; This file is obsolete. For more information, see: +;; https://debbugs.gnu.org/34789 + +;; The following is a typical error message from g++ using STL (here +;; with split lines): +;; +;; AFile.o(.text+0x2d5): undefined reference to +;; `vector::begin(void)' +;; AFile.o(.text+0x2e7): undefined reference to +;; `vector::insert(double *, unsigned int, double const &)' +;; AnotherFile.o(.text+0x226b8): undefined reference to +;; `operator!=(rb_tree, pair +;; const, AClass *>, select1st const, AClass +;; *>, basic_string >, less > >::iterator +;; const &, rb_tree, pair +;; const, AClass *>, select1st const, AClass +;; *>, basic_string >, less > >::iterator +;; const &)' +;; +;; The message means that in the object file AFile.o there is one +;; uninstantiated template class, vector, and in AnotherFile.o +;; there is one uninstantiated template function, operator!=(...). To +;; turn this output into manual template instantiations, copy from the +;; first name of an objective file (here this is AFile.o) to right +;; after the very last `'' of the output. Put this in a buffer and +;; call `mantemp-make-mantemps-buffer' with the point in the buffer. +;; You can also use `mantemp-make-mantemps-region' directly on the +;; region if the output is already in Emacs. +;; +;; The resulting buffer yields (connect the three output lines above +;; if you want to try): +;; +;; template operator!=(rb_tree, +;; pair const, AClass *>, +;; select1st const, AClass *>, +;; basic_string >, less > >::iterator const +;; &, rb_tree, pair const, +;; AClass *>, select1st const, AClass *>, +;; basic_string >, less > >::iterator const +;; &); +;; template class vector; +;; +;; which can be included in your C++ program. However, its probably +;; better to include the necessary header files in the buffer and +;; compile it as a stand alone implementation file. +;; +;; Sometimes, an uninstantiated template may cause a message like the +;; following +;; +;; main.cc:66: invalid use of undefined type +;; `struct valarray > >' +;; +;; Follow the same procedure as above and the line is changed to +;; +;; template struct valarray > >; + +;; g++ does not output the templates that are needed by the +;; uninstantiated templates. Therefore you will often get new error +;; messages after the first instantiations have been included and you +;; must repeat the operation. + +;;; Code: + +(defun mantemp-remove-comments () + "Remove g++ comments surrounding each function and member function." + (save-excursion + (goto-char (point-min)) + (message "Removing comments") + (while (re-search-forward "^[a-zA-Z.()+0-9: ]*`\\|'.*$" nil t) + (replace-match "")))) + +(defun mantemp-remove-memfuncs () + "Remove member function extensions so that only class names remain." + (save-excursion + ;; Remove conversion operator extensions. + (goto-char (point-min)) + (message "Removing member function extensions") + (while (re-search-forward + "^[a-zA-Z :&*<>~=,0-9+]*>::operator " nil t nil) + (progn + (backward-char 11) + (delete-region (point) (line-end-position)))) + ;; Remove other member function extensions. + (goto-char (point-min)) + (message "Removing member function extensions") + (while (re-search-forward "^[a-zA-Z :&*<>~=,0-9+]*>::" nil t nil) + (progn + (backward-char 2) + (delete-region (point) (line-end-position)))))) + +(defun mantemp-sort-and-unique-lines () + "Eliminate all consecutive duplicate lines in the buffer." + (save-excursion + (message "Sorting") + (sort-regexp-fields nil "^.*$" "\\&" + (point-min) + (point-max)) + (goto-char (point-min)) + (message "Removing consecutive duplicate lines") + (while (re-search-forward "\\(^.+\\)\n\\1" nil t nil) + (progn + (forward-line -1) + (beginning-of-line) + (delete-region (point) (progn (forward-line 1) (point))))))) + +(defun mantemp-insert-cxx-syntax () + "Insert C++ syntax around each template class and function. +Insert `template class' for classes, `template' for +functions and add the statement delimiter `;' at the end of +the lines." + (save-excursion + ;; Insert ';' at the end of each nonempty line. + (goto-char (point-min)) + (message "Inserting `;' at the ends") + (while (re-search-forward ".+$" nil t) + (progn + (insert ";") + (if (not (equal (point) (point-max))) + (forward-char)))) + ;; We first insert 'template class' at each nonempty line and + ;; subsequently remove 'class' for functions so we don't need to + ;; both scan for classes and functions. + (goto-char (point-min)) + (message "Inserting 'template class' for classes") + (while (re-search-forward "^.+" nil t) + (progn + (beginning-of-line) + (if (looking-at "struct[\\t ]+\\|class[\\t ]+") + (insert "template ") + (insert "template class ")))) + (goto-char (point-min)) + (message "Inserting 'template' for functions") + (while (re-search-forward + "^template class [a-zA-Z :&*<>~=,0-9+!]*(" nil t nil) + (progn + (beginning-of-line) + (forward-word-strictly 1) + (delete-region (point) (progn (forward-word-strictly 1) (point))))))) + +(defun mantemp-make-mantemps () + "Gathering interface to the functions modifying the buffer." + (mantemp-remove-comments) + (mantemp-remove-memfuncs) + (mantemp-sort-and-unique-lines) + (mantemp-insert-cxx-syntax)) + +(defun mantemp-make-mantemps-buffer () + "Make manual template instantiations from g++ error messages in the buffer. +Scan the output of g++ describing uninstantiated template +classes and functions and generate the corresponding C++ +manual template instantiations. The output is supposed to +have been placed in the current buffer and the current buffer +should otherwise be empty. + +See the commentary in file mantemp.el for an example of use." + (interactive) + (mantemp-make-mantemps) + (message "Done")) + +(defun mantemp-make-mantemps-region () + "Make manual template instantiations from g++ error messages in the region. +This function does the same thing as `mantemp-make-mantemps-buffer', +but operates on the region." + (interactive) + (let ((cur-buf (current-buffer)) + (mantemp-buffer (generate-new-buffer "*mantemp*")) + (str (buffer-substring (mark) (point)))) + ;; Copy the region to a temporary buffer, make the C++ code there + ;; and copy the result back to the current buffer. + (set-buffer mantemp-buffer) + (insert str) + (mantemp-make-mantemps) + (setq str (buffer-string)) + (set-buffer cur-buf) + (insert str) + (kill-buffer mantemp-buffer)) + (message "Done")) + +(provide 'mantemp) + +;;; mantemp.el ends here diff --git a/lisp/progmodes/mantemp.el b/lisp/progmodes/mantemp.el deleted file mode 100644 index 4190a847274..00000000000 --- a/lisp/progmodes/mantemp.el +++ /dev/null @@ -1,204 +0,0 @@ -;;; mantemp.el --- create manual template instantiations from g++ 2.7.2 output - -;; Copyright (C) 1996, 2001-2019 Free Software Foundation, Inc. - -;; Author: Tom Houlder -;; Created: 10 Dec 1996 -;; Keywords: g++, templates - -;; This file is part of GNU Emacs. - -;; GNU Emacs 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 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs 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. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: - -;; The following is a typical error message from g++ using STL (here -;; with split lines): -;; -;; AFile.o(.text+0x2d5): undefined reference to -;; `vector::begin(void)' -;; AFile.o(.text+0x2e7): undefined reference to -;; `vector::insert(double *, unsigned int, double const &)' -;; AnotherFile.o(.text+0x226b8): undefined reference to -;; `operator!=(rb_tree, pair -;; const, AClass *>, select1st const, AClass -;; *>, basic_string >, less > >::iterator -;; const &, rb_tree, pair -;; const, AClass *>, select1st const, AClass -;; *>, basic_string >, less > >::iterator -;; const &)' -;; -;; The message means that in the object file AFile.o there is one -;; uninstantiated template class, vector, and in AnotherFile.o -;; there is one uninstantiated template function, operator!=(...). To -;; turn this output into manual template instantiations, copy from the -;; first name of an objective file (here this is AFile.o) to right -;; after the very last `'' of the output. Put this in a buffer and -;; call `mantemp-make-mantemps-buffer' with the point in the buffer. -;; You can also use `mantemp-make-mantemps-region' directly on the -;; region if the output is already in Emacs. -;; -;; The resulting buffer yields (connect the three output lines above -;; if you want to try): -;; -;; template operator!=(rb_tree, -;; pair const, AClass *>, -;; select1st const, AClass *>, -;; basic_string >, less > >::iterator const -;; &, rb_tree, pair const, -;; AClass *>, select1st const, AClass *>, -;; basic_string >, less > >::iterator const -;; &); -;; template class vector; -;; -;; which can be included in your C++ program. However, its probably -;; better to include the necessary header files in the buffer and -;; compile it as a stand alone implementation file. -;; -;; Sometimes, an uninstantiated template may cause a message like the -;; following -;; -;; main.cc:66: invalid use of undefined type -;; `struct valarray > >' -;; -;; Follow the same procedure as above and the line is changed to -;; -;; template struct valarray > >; - -;; g++ does not output the templates that are needed by the -;; uninstantiated templates. Therefore you will often get new error -;; messages after the first instantiations have been included and you -;; must repeat the operation. - -;;; Code: - -(defun mantemp-remove-comments () - "Remove g++ comments surrounding each function and member function." - (save-excursion - (goto-char (point-min)) - (message "Removing comments") - (while (re-search-forward "^[a-zA-Z.()+0-9: ]*`\\|'.*$" nil t) - (replace-match "")))) - -(defun mantemp-remove-memfuncs () - "Remove member function extensions so that only class names remain." - (save-excursion - ;; Remove conversion operator extensions. - (goto-char (point-min)) - (message "Removing member function extensions") - (while (re-search-forward - "^[a-zA-Z :&*<>~=,0-9+]*>::operator " nil t nil) - (progn - (backward-char 11) - (delete-region (point) (line-end-position)))) - ;; Remove other member function extensions. - (goto-char (point-min)) - (message "Removing member function extensions") - (while (re-search-forward "^[a-zA-Z :&*<>~=,0-9+]*>::" nil t nil) - (progn - (backward-char 2) - (delete-region (point) (line-end-position)))))) - -(defun mantemp-sort-and-unique-lines () - "Eliminate all consecutive duplicate lines in the buffer." - (save-excursion - (message "Sorting") - (sort-regexp-fields nil "^.*$" "\\&" - (point-min) - (point-max)) - (goto-char (point-min)) - (message "Removing consecutive duplicate lines") - (while (re-search-forward "\\(^.+\\)\n\\1" nil t nil) - (progn - (forward-line -1) - (beginning-of-line) - (delete-region (point) (progn (forward-line 1) (point))))))) - -(defun mantemp-insert-cxx-syntax () - "Insert C++ syntax around each template class and function. -Insert `template class' for classes, `template' for -functions and add the statement delimiter `;' at the end of -the lines." - (save-excursion - ;; Insert ';' at the end of each nonempty line. - (goto-char (point-min)) - (message "Inserting `;' at the ends") - (while (re-search-forward ".+$" nil t) - (progn - (insert ";") - (if (not (equal (point) (point-max))) - (forward-char)))) - ;; We first insert 'template class' at each nonempty line and - ;; subsequently remove 'class' for functions so we don't need to - ;; both scan for classes and functions. - (goto-char (point-min)) - (message "Inserting 'template class' for classes") - (while (re-search-forward "^.+" nil t) - (progn - (beginning-of-line) - (if (looking-at "struct[\\t ]+\\|class[\\t ]+") - (insert "template ") - (insert "template class ")))) - (goto-char (point-min)) - (message "Inserting 'template' for functions") - (while (re-search-forward - "^template class [a-zA-Z :&*<>~=,0-9+!]*(" nil t nil) - (progn - (beginning-of-line) - (forward-word-strictly 1) - (delete-region (point) (progn (forward-word-strictly 1) (point))))))) - -(defun mantemp-make-mantemps () - "Gathering interface to the functions modifying the buffer." - (mantemp-remove-comments) - (mantemp-remove-memfuncs) - (mantemp-sort-and-unique-lines) - (mantemp-insert-cxx-syntax)) - -(defun mantemp-make-mantemps-buffer () - "Make manual template instantiations from g++ error messages in the buffer. -Scan the output of g++ describing uninstantiated template -classes and functions and generate the corresponding C++ -manual template instantiations. The output is supposed to -have been placed in the current buffer and the current buffer -should otherwise be empty. - -See the commentary in file mantemp.el for an example of use." - (interactive) - (mantemp-make-mantemps) - (message "Done")) - -(defun mantemp-make-mantemps-region () - "Make manual template instantiations from g++ error messages in the region. -This function does the same thing as `mantemp-make-mantemps-buffer', -but operates on the region." - (interactive) - (let ((cur-buf (current-buffer)) - (mantemp-buffer (generate-new-buffer "*mantemp*")) - (str (buffer-substring (mark) (point)))) - ;; Copy the region to a temporary buffer, make the C++ code there - ;; and copy the result back to the current buffer. - (set-buffer mantemp-buffer) - (insert str) - (mantemp-make-mantemps) - (setq str (buffer-string)) - (set-buffer cur-buf) - (insert str) - (kill-buffer mantemp-buffer)) - (message "Done")) - -(provide 'mantemp) - -;;; mantemp.el ends here -- cgit v1.2.1