1 //
2 // aegis - project change supervisor
3 // Copyright (C) 2012 Peter Miller
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 3 of the License, or (at
8 // your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License along
16 // with this program. If not, see <http://www.gnu.org/licenses/>.
17 //
18 
19 #ifndef AEMAKEGEN_PROCESS_DATA_H
20 #define AEMAKEGEN_PROCESS_DATA_H
21 
22 #include <map>
23 
24 #include <common/nstring.h>
25 #include <common/nstring/list.h>
26 
27 #include <libaegis/change/identifier.h>
28 
29 /**
30   * The process_data class is used to represent the data common to all
31   * flavours and targets for generation tasks.
32   */
33 class process_data
34 {
35 public:
36     /**
37       * The destructor.  It is intentionally not virtual.
38       * Thou shalt not derive from this class.
39       */
40     ~process_data();
41 
42     /**
43       * The default constructor.
44       */
45     process_data();
46 
47     /**
48       * The notify_preprocess_complete method is called to mark the
49       * end of preprocessing, and the beginning of output.  After this
50       * point, no instance variables shouldchange.
51       */
52     void notify_preprocess_complete(void);
53 
54     /**
55       * The set_use_libtool method is used to request that
56       * libtool is to be used to build shared libraries.
57       */
58     void set_use_libtool(void);
59 
60     /**
61       * The use_libtool method is used to determine whether or not the
62       * output shall use libtool.
63       */
use_libtool(void)64     bool use_libtool(void) const { return use_libtool_flag; }
65 
66     /**
67       * The set_use_lib_la_files method is used to request that
68       * libtool .la file be installed.  The default is false.
69       */
70     void set_use_lib_la_files(void);
71 
72     /**
73       * The use_lib_la_files is used to determine whether or not to
74       * install libtool .la files for shared libraries.
75       */
use_lib_la_files(void)76     bool use_lib_la_files(void) const { return use_lib_la_files_flag; }
77 
78     /**
79       * The set_version_info method is used to establish the shared
80       * files's version info string.
81       */
82     void set_version_info(const nstring &text);
83 
84     /**
85       * The get_version_info method is used to obtain a suitable
86       * argument to the libtool -version-info option, based on the
87       * project version.
88       * Only meaningful if #use_libtool returns true.
89       */
90     nstring get_version_info(void) const;
91 
92     /**
93       * The get_version_info_major method is used to obtain the major
94       * version of the version-info.
95       */
96     nstring get_version_info_major(void) const;
97 
98     /**
99       * The set_library_directory is used to determine the name of
100       * the library (shared or static) to be used for code common to
101       * executables built for the project.
102       *
103       * @param cid
104       *     The change set identification of the change of interest.
105       * @param filenames
106       *     The list of source files to be considered.
107       */
108     void set_library_directory(change_identifier &cid,
109         const nstring_list &filenames);
110 
111     /**
112       * The get_library_directory method may be used tp obtain the name
113       * of the top-level directory containing common files to be linked
114       * with each of the executables.
115       */
get_library_directory(void)116     nstring get_library_directory(void) const { return library_directory; }
117 
118     /**
119       * The get_library_name method may be used to obtain the name
120       * of the library containing common files to be linked
121       * with each of the executables (basename, not including extension).
122       *
123       * Or the emopty string, if the project doesn't have a library.
124       */
get_library_name(void)125     nstring get_library_name(void) const { return library_name; }
126 
127     /**
128       * The remember_explicit_noinst method is used to add another
129       * program name that is not to be installed.
130       *
131       * @param progname
132       *     The name of the program to be omitted from the files that
133       *     are installed by the "install:" target.
134       */
135     void remember_explicit_noinst(const nstring &progname);
136 
137     /**
138       * The is_explicit_noinst method may be used to determine whether
139       * or not the named program is not to be installed.
140       */
141     bool is_explicit_noinst(const nstring &progname) const;
142 
143     /**
144       * The set_use_x11 method is used to control whether or not
145       * X11 is to be used to build and link.
146       */
147     void set_use_x11(void);
148 
149     /**
150       * The use_x11 method is used to determine whether or not X11 is to
151       * be used.
152       */
use_x11(void)153     bool use_x11(void) const { return use_x11_flag; }
154 
155     /**
156       * The uses_pkgconfig method is used to determine whether or not
157       * there is a pkg-config data file installed by the project.
158       * This is only meaningful if #use_libtool returns true.
159       */
160     bool uses_pkgconfig(void) const;
161 
162     /**
163       * use_i18n methof is used to remember whether or not the project
164       * installs internationalization and localization files.
165       */
use_i18n(void)166     bool use_i18n(void) const { return use_i18n_flag; }
167 
168     /**
169       * The set_use_i18n method is used to remember that the
170       * project installs i18n files.
171       */
set_use_i18n(void)172     void set_use_i18n(void) { use_i18n_flag = true; }
173 
174     /**
175       * The set_seen_c method is used to notify that probably C source
176       * files have been observed.
177       */
set_seen_c(void)178     void set_seen_c(void) { seen_c_flag = true; }
179 
180     /**
181       * The seen_c method is used to determine whether or not probable C
182       * source files have been observed.
183       */
seen_c(void)184     bool seen_c(void) const { return seen_c_flag; }
185 
186     /**
187       * The set_seen_c_plus_plus method is used to notify that probably
188       * C++ source files have been observed.
189       */
set_seen_c_plus_plus(void)190     void set_seen_c_plus_plus(void) { seen_c_plus_plus_flag = true; }
191 
192     /**
193       * The seen_c_plus_plus method is used to determine whether or not
194       * probable C source files have been observed.
195       */
seen_c_plus_plus(void)196     bool seen_c_plus_plus(void) const { return seen_c_plus_plus_flag; }
197 
198     /**
199       * The set_need_yacc method is used to notify that probable yacc
200       * source files have been observed in the file manifest.
201       */
set_need_yacc(void)202     void set_need_yacc(void) { need_yacc_flag = true; }
203 
204     /**
205       * The need_yacc method is used to determine whether or not
206       * probable yacc source files have been observed in the file manifest.
207       */
need_yacc(void)208     bool need_yacc(void) const { return need_yacc_flag; }
209 
210     /**
211       * The set_have_yacc method is used to notify that the configure.ac
212       * file contains a reference to AC_PROG_YACC, necessary for
213       * building *.y source files.
214       */
set_have_yacc(void)215     void set_have_yacc(void) { have_yacc_flag = true; }
216 
217     /**
218       * The have_yacc method is used to determine whether or not
219       * the configure.ac file contains a reference to AC_PROG_YACC,
220       * necessary for building *.y source files.
221       */
have_yacc(void)222     bool have_yacc(void) const { return have_yacc_flag; }
223 
224     /**
225       * The set_need_lex method is used to notify that probable lex
226       * source files have been observed in the file manifest.
227       */
set_need_lex(void)228     void set_need_lex(void) { need_lex_flag = true; }
229 
230     /**
231       * The need_lex method is used to determine whether or not
232       * probable lex source files have been observed in the file manifest.
233       */
need_lex(void)234     bool need_lex(void) const { return need_lex_flag; }
235 
236     /**
237       * The set_have_lex method is used to notify that the configure.ac
238       * file contains a reference to AC_PROG_LEX, necessary for
239       * building *.l source files.
240       */
set_have_lex(void)241     void set_have_lex(void) { have_lex_flag = true; }
242 
243     /**
244       * The have_lex method is used to determine whether or not
245       * the configure.ac file contains a reference to AC_PROG_lex,
246       * necessary for building *.l source files.
247       */
have_lex(void)248     bool have_lex(void) const { return have_lex_flag; }
249 
250     /**
251       * The remember_clean_misc_file method is used to append
252       * another misc file to the list of files to be removed by the
253       * "clean-misc:" make target.
254       */
255     void remember_clean_misc_file(const nstring &filename);
256 
257     /**
258       * The get_clean_misc_files method is used to get read-only access
259       * to the list of misc files to be cleaned.
260       */
get_clean_misc_files(void)261     const nstring_list &get_clean_misc_files(void) const
262         { return clean_misc_files; }
263 
264     /**
265       * The remember_clean_obj_file method is used to add another file
266       * to be removed by the "clean-obj:" makefile target.
267       */
268     void remember_clean_obj_file(const nstring &filename);
269 
270     /**
271       * The get_clean_obj_files method is used to get read-only access
272       * to the list of object files to be cleaned.
273       */
get_clean_obj_files(void)274     const nstring_list &get_clean_obj_files(void) const
275         { return clean_obj_files; }
276 
277     /**
278       * The remember_dist_clean_file method is used to add another file
279       * to be removed by the "distclean-files:" makefile target.
280       */
281     void remember_dist_clean_file(const nstring &filename);
282 
283     /**
284       * The get_dist_clean_files method is used to get read-only
285       * access to the list of support files to be cleaned by the
286       * "distclean-files:" make target.
287       */
get_dist_clean_files(void)288     const nstring_list &get_dist_clean_files(void) const
289         { return dist_clean_files; }
290 
291     /**
292       * The seen_dist_clean_files method may be used to determine
293       * whether or not any dist_clean_files have been seen.
294       */
seen_dist_clean_files(void)295     bool seen_dist_clean_files(void) const { return !dist_clean_files.empty(); }
296 
297     /**
298       * The remember_dist_clean_dir method is used to add another
299       * directory to be removed by the "distclean-dirs:" makefile
300       * target.
301       */
302     void remember_dist_clean_dir(const nstring &path);
303 
304     /**
305       * The get_dist_clean_dirs method is used to get read-only
306       * access to the list of support files to be cleaned by the
307       * "distclean-dirs:" make target.
308       */
get_dist_clean_dirs(void)309     const nstring_list &get_dist_clean_dirs(void) const
310         { return dist_clean_dirs; }
311 
312     /**
313       * The exeext method is used to obtain the file extension of
314       * executable files.
315       */
exeext(void)316     const nstring &exeext(void) const { return executable_file_extension; }
317 
318     /**
319       * The set_exeext method is used to support the autoconf $(EXEEXT)
320       * substitution.  The default is the empty string.
321       */
322     void set_exeext(void);
323 
324     /**
325       * The libext method is used to obtain the file extension of
326       * library files.
327       */
328     nstring libext(void) const;
329 
330     /**
331       * The set_libext method is used to support the autoconf $(LIBEXT)
332       * substitution.  The default is "a".
333       */
334     void set_libext(void);
335 
336     /**
337       * The set_libext_libtool method is used to support the libtool
338       * "la" extension.
339       */
340     void set_libext_libtool(void);
341 
342     /**
343       * The objext method is used to obtain the file extension of
344       * object files.
345       */
objext(void)346     const nstring objext(void) const { return object_file_extension; }
347 
348     /**
349       * The set_objext method is used to support the autoconf $(OBJEXT)
350       * substitution.  The default is "o".
351       */
352     void set_objext(void);
353 
354     /**
355       * The remember_source_file method is used to add another source
356       * file to the lists of source files being maintained, one for each
357       * top-level directory.
358       *
359       * By "source_file" we mean a file that needs to be compiled, not
360       * a script file.  Or indirectly needs to be compiled, like yacc
361       * "*.y" files.
362       *
363       * @param filename
364       *     The name of the source file to be remembered.
365       */
366     void remember_source_file(const nstring &filename);
367 
368     /**
369       * The get_source_files_by_dir method is used to obtain read-only
370       * access to the list of source files for a given top level
371       * directory.
372       *
373       * @param top_level_dir
374       *     The top level directory that the source files fall under.
375       * @returns
376       *     A const reference to a list of source file names.
377       *     The empty strings means there were no source files, or no
378       *     such top level directory.
379       */
380     const nstring_list &get_source_files_by_dir(const nstring &top_level_dir)
381         const;
382 
383     /**
384       * The remember_include_file method is used to add another include
385       * file to the lists of include files being maintained, one for each
386       * top-level directory.
387       *
388       * @param filename
389       *     The name of the include file to be remembered.
390       */
391     void remember_include_files_by_dir(const nstring &filename);
392 
393     /**
394       * The get_include_files_by_dir method is used to obtain read-only
395       * access to the list of include files for a given top level
396       * directory.
397       *
398       * @param top_level_dir
399       *     The top level directory that the include files fall under.
400       * @returns
401       *     A const reference to a list of include file names.
402       *     The empty strings means there were no include files, or no
403       *     such top level directory.
404       */
405     const nstring_list &get_include_files_by_dir(const nstring &top_level_dir)
406         const;
407 
408     /**
409       * The remember_object_file method is used to add another object
410       * file to the lists of object files being maintained, one for each
411       * top-level directory.
412       *
413       * @param filename
414       *     The name of the object file to be remembered.
415       */
416     void remember_object_file(const nstring &filename);
417 
418     /**
419       * The get_object_files_by_dir method is used to obtain read-only
420       * access to the list of object files for a given top level
421       * directory.
422       *
423       * @param top_level_dir
424       *     The top level directory that the object files fall under.
425       * @returns
426       *     A const reference to a list of object file names.
427       *     The empty strings means there were no object files, or no
428       *     such top level directory.
429       */
430     const nstring_list &get_object_files_by_dir(const nstring &top_level_dir)
431         const;
432 
433     /**
434       * The library_plus_library method is used to append the contents
435       * of one list of object filoes to another.
436       *
437       * @param to_name
438       *     The directory to receive the additonal object files.
439       * @param from_name
440       *     The directory from which to obtain the additonal object files.
441       */
442     void library_plus_library(const nstring &to_name, const nstring &from_name);
443 
444     /**
445       * The get_library_list_by_program method is used to obtain
446       * read-only access to the list of library files for a given
447       * program (top level directory).
448       *
449       * @param progname
450       *     The name of the program (top level directory) that may have
451       *     extra libraries.
452       * @returns
453       *     A const reference to a list of library file names.
454       *     The empty strings means there were no library files, or no
455       *     such top level directory.
456       */
457     const nstring_list &get_library_list_by_program(const nstring &progname)
458         const;
459 
460     /**
461       * The program_needs_library method is used to add another library
462       * directory to the list of library directories needed by a
463       * program.
464       *
465       * @param prog_name
466       *     The name of the program (a top level directory).
467       * @param lib_name
468       *     The name of the library to append (a top level directory,
469       *     does not include the .a suffix, etc)
470       */
471     void program_needs_library(const nstring &prog_name,
472         const nstring &lib_name);
473 
474     /**
475       * The remember_progdir method is used to add another program to
476       * the list of programs to be linked into an executable.
477       *
478       * @param progdir
479       *     The directory containing the program's source tree.
480       *     May contain slashes, e.g. "test/open".
481       */
482     void remember_progdir(const nstring &progdir);
483 
484     /**
485       * The get_programs method is used to obtain read-only access to
486       * the list of programs to be linked.  It derives the program name
487       * from the program directory name.
488       */
489     nstring_list get_programs(void) const;
490 
491     /**
492       * The progdir_from_progname method is used to figure out the
493       * program source directory from the program name.
494       *
495       * @param progname
496       *     The name of the program to find
497       * @returns
498       *     the directory name (could contain slashes). or the empty
499       *     string if it doesn't exist.
500       */
501     nstring progdir_from_progname(const nstring &progname) const;
502 
503     /**
504       * The get_progdirs method is used to obtain read-only access to
505       * the list of program directories to be linked.
506       */
get_progdirs(void)507     const nstring_list &get_progdirs(void) const { return progdirs; }
508 
509     /**
510       * The seen_programs method may be used to determine whether or
511       * not any programs have been see (that is, programs that require
512       * linking, not scripts).
513       */
514     bool seen_programs(void) const;
515 
516     /**
517       * The need_install_script_macro method variable is used to
518       * determine whether or not to emit the "INSTALL_SCRIPT =
519       * @INSTALL_SCRIPT@" line in the Makefile.in file.
520       */
need_install_script_macro(void)521     bool need_install_script_macro(void) const { return install_script_macro; }
522 
523     /**
524       * The set_install_script_macro method is used to notify that a
525       * "INSTALL_SCRIPT = @INSTALL_SCRIPT@" in the Makefile.in file.
526       */
set_install_script_macro(void)527     void set_install_script_macro(void) { install_script_macro = true; }
528 
529     /**
530       * The remember_all_bin method is used to add another file that
531       * is to be build, and makes part of the "all-bin" make target.
532       *
533       * @param filename
534       *     The name of the binary file.
535       */
536     void remember_all_bin(const nstring &filename);
537 
538     /**
539       * The get_all_bin method is used to obtain read-only access to
540       * the list of programs to be alled, as prerequisites of the
541       * "all-bin" make target.
542       */
get_all_bin(void)543     const nstring_list &get_all_bin(void) const { return all_bin; }
544 
seen_all_bin(void)545     bool seen_all_bin(void) const { return !all_bin.empty(); }
546 
547     /**
548       * The remember_install_bin method is used to add another file that
549       * is to be build, and makes part of the "install-bin" make target,
550       * into the $(bindir) directory.
551       *
552       * @param filename
553       *     The name of the binary file.
554       */
555     void remember_install_bin(const nstring &filename);
556 
557     /**
558       * The get_install_bin method is used to obtain read-only access to
559       * the list of programs to be installed, as prerequisites of the
560       * "install-bin" make target.
561       */
get_install_bin(void)562     const nstring_list &get_install_bin(void) const { return install_bin; }
563 
564     /**
565       * The seen_etc_test_sh method is used to determine whether or not
566       * the project contains a "etc/test.sh" source file.
567       * This will be used to run tests, if it is present.
568       */
seen_etc_test_sh(void)569     bool seen_etc_test_sh(void) const { return etc_test_sh_flag; }
570 
571     /**
572       * The set_etc_test_sh method is used to notify that the project
573       * has a "etc/test.sh" source file.
574       * This will be used to run tests, if it is present.
575       */
set_etc_test_sh(void)576     void set_etc_test_sh(void) { etc_test_sh_flag = true; }
577 
578     /**
579       * The remember_test_source method is used to add another source
580       * file to the list of test source files.  This is used by the
581       * Makefile.am TESTS definition.
582       */
583     void remember_test_source(const nstring &filename);
584 
585     /**
586       * The get_test_sources method may be used to obtain read-only
587       * access to the list of test source files.
588       */
get_test_sources(void)589     const nstring_list &get_test_sources(void) const { return test_sources; }
590 
591     /**
592       * The remember_test_file method is used to add another test file
593       * to the list of test files.  This is used by the "make sure"
594       * rule.
595       */
596     void remember_test_file(const nstring &filename);
597 
598     /**
599       * The get_test_files method may be used to obtain read-only access
600       * to the list of test files.
601       */
get_test_files(void)602     const nstring_list &get_test_files(void) const { return test_files; }
603 
604     /**
605       * The seen_test_files method may be used to determine
606       * whether or not there are any test files to run.
607       */
seen_test_files(void)608     bool seen_test_files(void) const { return !test_files.empty(); }
609 
610     /**
611       * The have_groff method is used to determine whether or not the
612       * groff(1) command was mentioned in the configure.ac file.
613       */
have_groff(void)614     bool have_groff(void) const { return have_groff_flag; }
615 
616     /**
617       * The set_have_groff method is used to notify that the groff(1)
618       * command is mentioned in the configure.ac file.
619       */
620     void set_have_groff(void);
621 
622     /**
623       * The need_groff method is used to determine whether or not the
624       * groff(1) command required to build the sources.
625       */
need_groff(void)626     bool need_groff(void) const { return need_groff_flag; }
627 
628     /**
629       * The set_need_groff method is used to notify that the groff(1)
630       * command is required to build one or more files in the source
631       * file manifest.
632       */
633     void set_need_groff(void);
634 
635     /**
636       * The have_soelim method is used to determine whether or not
637       * there is a "AC_CHECK_PROGS(SOELIM, gsoelim soelim)" line in the
638       * "configure.ac" file.
639       */
have_soelim(void)640     bool have_soelim(void) const { return have_soelim_flag; }
641 
642     /**
643       * The set_have_soelim method is used to notify that there
644       * is a "AC_CHECK_PROGS(SOELIM, gsoelim soelim)" line in the
645       * "configure.ac" file.
646       */
647     void set_have_soelim(void);
648 
649     /**
650       * The need_soelim method is used to determine whether or not
651       * there are any source files that require soelim(1) to build.
652       */
need_soelim(void)653     bool need_soelim(void) const { return need_soelim_flag; }
654 
655     /**
656       * The set_need_soelim method is used to notify that there are
657       * source files that require soelim(1) to build.
658       */
659     void set_need_soelim(void);
660 
661     /**
662       * The seen_datadir method is used to determine whether or not
663       * content is to be installed into $(datadir)/<progname>/
664       */
seen_datadir(void)665     bool seen_datadir(void) const { return seen_datadir_flag; }
666 
667     /**
668       * The set_seen_datadir method is used to determine notify that
669       * content is to be installed into $(datadir)/<progname>/
670       */
set_seen_datadir(void)671     void set_seen_datadir(void) { seen_datadir_flag = true; }
672 
673     /**
674       * The remember_install_datadir method is used to add another file
675       * to the set of files to be installed under $(datadir)/<progname>/
676       *
677       * @param filename
678       *     The name of the fiel to be installed.
679       */
680     void remember_install_datadir(const nstring &filename);
681 
682     /**
683       * The get_install_datadir method may be used to obtain
684       * read-only access to the list of files to be installed
685       * below $(datadir)/<progname>/
686       */
get_install_datadir(void)687     const nstring_list &get_install_datadir(void) const
688         { return install_datadir; }
689 
690     /**
691       * The seen_datarootdir method is used to determine whether or not
692       * content is to be installed into $(datarootdir)/
693       */
seen_datarootdir(void)694     bool seen_datarootdir(void) const { return seen_datarootdir_flag; }
695 
696     /**
697       * The set_seen_datarootdir method is used to notify that
698       * content is to be installed into $(datarootdir)/
699       */
set_seen_datarootdir(void)700     void set_seen_datarootdir(void) { seen_datarootdir_flag = true; }
701 
702     /**
703       * The seen_libdir method is used to determine whether or not
704       * content is to be installed into $(libdir)/<progname>/
705       */
seen_libdir(void)706     bool seen_libdir(void) const { return seen_libdir_flag; }
707 
708     /**
709       * The set_seen_libdir method is used to notify that
710       * content is to be installed into $(libdir)/<progname>/
711       */
set_seen_libdir(void)712     void set_seen_libdir(void) { seen_libdir_flag = true; }
713 
714     /**
715       * The remember_pkgconfig_source method is used to add
716       * a file to the set of source files for pkgconfig/ .pc files.
717       */
718     void remember_pkgconfig_source(const nstring &filename);
719 
720     /**
721       * The seen_pkgconfig_source method may be used to determine
722       * whether or not and source files have been seen that are to be
723       * installed below $(libdir)/pkgconfig/
724       */
seen_pkgconfig_source(void)725     bool seen_pkgconfig_source(void) const
726         { return !pkgconfig_sources.empty(); }
727 
728     /**
729       * The get_get_pkgconfig_sources method may be used to obtain read-only
730       * access to the list of source to be installed below $(libdir)/pkgconfig/
731       */
get_pkgconfig_sources(void)732     const nstring_list &get_pkgconfig_sources(void) const
733         { return pkgconfig_sources; }
734 
735     /**
736       * The remember_install_libdir method is used to add another file
737       * to the set of files to be installed below $(libdir)
738       *
739       * @param filename
740       *     The name of the file to be installed.
741       */
742     void remember_install_libdir(const nstring &filename);
743 
744     /**
745       * The get_install_libdir method may be used to obtain read-only
746       * access to the list of files to be installed below $(libdir)/
747       */
get_install_libdir(void)748     const nstring_list &get_install_libdir(void) const
749         { return install_libdir; }
750 
751     /**
752       * The seen_sysconfdir method is used to determine whether or not
753       * content is to be installed into $(sysconfdir)/  (i.e. /etc)
754       */
seen_sysconfdir(void)755     bool seen_sysconfdir(void) const { return seen_sysconfdir_flag; }
756 
757     /**
758       * The set_seen_sysconfdir method is used to notify that
759       * content is to be installed into $(sysconfdir)/  (i.e. /etc)
760       */
set_seen_sysconfdir(void)761     void set_seen_sysconfdir(void) { seen_sysconfdir_flag = true; }
762 
763     /**
764       * The remember_man_sources method is used to add another file to
765       * the set of source files for man pages.
766       */
767     void remember_man_sources(const nstring &filename);
768 
769     /**
770       * The get_man_sources method may be used to obtain read-only
771       * access to the set of source files for man pages.
772       */
get_man_sources(void)773     const nstring_list &get_man_sources(void) const { return man_sources; }
774 
775     /**
776       * The remember_install_mandir method is used to add another file
777       * to the set of files to be installed below $(mandir)/
778       *
779       * @param filename
780       *     The name of the file to be installed.
781       */
782     void remember_install_mandir(const nstring &filename);
783 
784     /**
785       * The seen_install_mandir method may be used to determine
786       * whether or not there are any files to install below $(mandir)/
787       */
seen_install_mandir(void)788     bool seen_install_mandir(void) const { return !install_mandir.empty(); }
789 
790     /**
791       * The get_install_mandir method may be used to obtain read-only
792       * access to the set of files to be installed under the $(mandir)/
793       * directory.
794       */
get_install_mandir(void)795     const nstring_list &get_install_mandir(void) const
796         { return install_mandir; }
797 
798     /**
799       * The remember_all_doc method is used to add another file to the
800       * set of files to be built by the "all-doc" make target.
801       *
802       * @param filename
803       *     The name of the file to be installed.
804       */
805     void remember_all_doc(const nstring &filename);
806 
807     /**
808       * The seen_all_doc method may be used to determine whether or not
809       * there are any documentation files to be built.
810       */
seen_all_doc(void)811     bool seen_all_doc(void) const { return !all_doc.empty(); }
812 
813     /**
814       * The get_all_doc method may be used to obtain read-only access to
815       * the set of documentation files to be built.
816       */
get_all_doc(void)817     const nstring_list &get_all_doc(void) const { return all_doc; }
818 
819     /**
820       * The remember_install_doc method is used to add another file
821       * to the set of files to be installed by the "install-doc" make
822       * target.
823       *
824       * @param filename
825       *     The name of the file to be installed.
826       */
827     void remember_install_doc(const nstring &filename);
828 
829     /**
830       * The seen_install_doc method may be used to determine whether
831       * or not there are any documentation files to be installed.
832       */
seen_install_doc(void)833     bool seen_install_doc(void) const { return !install_doc.empty(); }
834 
835     /**
836       * The get_install_doc method may be used to obtain read-only access to
837       * the set of documentation files to be installed.
838       */
get_install_doc(void)839     const nstring_list &get_install_doc(void) const { return install_doc; }
840 
841     /**
842       * The set_program_prefix method is used to set the program
843       * prefix to "$(PROGRAM_PREFIX)".  This is set by the ./configure
844       * --program-prefix option.
845       */
846     void set_program_prefix(void);
847 
848     /**
849       * The get_program_prefix method is used to obtain the value of the
850       * program prefix to be added to the names of install programs.
851       */
get_program_prefix(void)852     nstring get_program_prefix(void) const { return program_prefix; }
853 
854     /**
855       * The set_program_suffix method is used to set the program
856       * suffix to "$(PROGRAM_SUFFIX)".  This is set by the ./configure
857       * --program-suffix option.
858       */
859     void set_program_suffix(void);
860 
861     /**
862       * The get_program_suffix method is used to obtain the value of the
863       * program suffix to be added to the names of install programs.
864       */
get_program_suffix(void)865     nstring get_program_suffix(void) const { return program_suffix; }
866 
867     /**
868       * The remember_all_i18n method is used to add another file to the
869       * set of files to be built by the "all-i18n" make target.
870       *
871       * @param filename
872       *     The name of the file to be installed.
873       */
874     void remember_all_i18n(const nstring &filename);
875 
876     /**
877       * The seen_all_i18n method may be used to determine whether or not
878       * there are any i18n files to be built.
879       */
seen_all_i18n(void)880     bool seen_all_i18n(void) const { return !all_i18n.empty(); }
881 
882     /**
883       * The get_all_i18n method may be used to obtain read-only access to
884       * the set of i18n files to be built.
885       */
get_all_i18n(void)886     const nstring_list &get_all_i18n(void) const { return all_i18n; }
887 
888     /**
889       * The remember_install_i18n method is used to add another file
890       * to the set of files to be install by the "install-i18n" make
891       * target.
892       *
893       * @param filename
894       *     The name of the file to be installed.
895       */
896     void remember_install_i18n(const nstring &filename);
897 
898     /**
899       * The seen_install_i18n method may be used to determine whether or
900       * not there are any i18n files to be installed.
901       */
seen_install_i18n(void)902     bool seen_install_i18n(void) const { return !install_i18n.empty(); }
903 
904     /**
905       * The get_install_i18n method may be used to obtain read-only
906       * access to the set of i18n files to be installed.
907       */
get_install_i18n(void)908     const nstring_list &get_install_i18n(void) const { return install_i18n; }
909 
910     /**
911       * The set_have_nlsdir method is used to notify that the
912       * configure.ac file contain a AC_SUBST(NLSDIR) line.
913       */
914     void set_have_nlsdir(void);
915 
916     /**
917       * The have_nlsdir method is used to determine whether or not the
918       * configure.ac file contains a AC_SUBST(NLSDIR) line.
919       */
have_nlsdir(void)920     bool have_nlsdir(void) const { return have_nlsdir_flag; }
921 
922     /**
923       * The set_etc_msgfmt_sh method is used to notify that an
924       * "etc/msgfmt.sh" source file has been seen.  If present, this
925       * will be used in preference to raw msgfmt(1) command.
926       */
927     void set_etc_msgfmt_sh(void);
928 
929     /**
930       * The seen_etc_msgfmt_sh method is used to determine whether or
931       * not an "etc/fmtgen.sh" file has been seen.
932       */
seen_etc_msgfmt_sh(void)933     bool seen_etc_msgfmt_sh(void) const { return etc_msgfmt_sh_flag; }
934 
935     /**
936       * The remember_install_include_source method is used to add
937       * another file to the set of source files that will eventually be
938       * installed under $(includedir), see #remember_install_include,
939       * but these are the source files.
940       *
941       * @param filename
942       *     The name of the source file to be remembered.
943       */
944     void remember_install_include_source(const nstring &filename);
945 
946     /**
947       * The get_install_include_sources method may be used to obtain
948       * read-only access to the set of include files to be installed,
949       * the project source filename, NOT the installed path.
950       */
get_install_include_sources(void)951     const nstring_list &get_install_include_sources(void) const
952         { return install_include_sources; }
953 
954     /**
955       * The seen_install_include_sources method may be used to determine
956       * whether or not there are any include files to be installed.
957       */
seen_install_include_sources(void)958     bool seen_install_include_sources(void) const
959         { return !install_include_sources.empty(); }
960 
961     /**
962       * The remember_install_include method is used to add another file
963       * to the set of files to be install by the "install-include" make
964       * target.
965       *
966       * @param filename
967       *     The name of the file to be installed.
968       */
969     void remember_install_include(const nstring &filename);
970 
971     /**
972       * The seen_install_include method may be used to determine whether or
973       * not there are any include files to be installed.
974       */
seen_install_include(void)975     bool seen_install_include(void) const { return !install_include.empty(); }
976 
977     /**
978       * The get_install_include method may be used to obtain
979       * read-only access to the list of include files to be installed
980       * under the $(includedir) system directory.
981       */
get_install_include(void)982     const nstring_list &get_install_include(void) const
983         { return install_include; }
984 
985     void set_groff_macro(void);
986 
seen_groff_macro(void)987     bool seen_groff_macro(void) const { return groff_macro_flag; }
988 
989     /**
990       * The get_list_of_library_directories is used to obtain a
991       * list of directories that have object files in them, bit are
992       * not mentioned in the 'programs' list.  It is possible that
993       * not all of them are libraries, but it's a pretty good first
994       * approcimation.
995       */
996     nstring_list get_list_of_library_directories(void) const;
997 
998     /**
999       * The remember_built_sources method is used to add another file
1000       * to the set of files that consTitute catch-22 cases when
1001       * automatically deriving include dependencies.
1002       *
1003       * @param filename
1004       *     The name of the file to be installed.
1005       */
1006     void remember_built_sources(const nstring &filename);
1007 
1008     /**
1009       * The seen_built_sources method may be used to determine whether or
1010       * not there are any include catch-22 file.
1011       */
seen_built_sources(void)1012     bool seen_built_sources(void) const { return !built_sources.empty(); }
1013 
1014     /**
1015       * The get_built_sources method may be used to obtain read-only
1016       * access to the set of catch-22 include files.
1017       */
get_built_sources(void)1018     const nstring_list &get_built_sources(void) const
1019         { return built_sources; }
1020 
1021     /**
1022       * The remember_extra_dist method is used to add another file
1023       * to the set of files that consTitute catch-22 cases when
1024       * automatically deriving include dependencies.
1025       *
1026       * @param filename
1027       *     The name of the file to be installed.
1028       */
1029     void remember_extra_dist(const nstring &filename);
1030 
1031     /**
1032       * The seen_extra_dist method may be used to determine whether or
1033       * not there are any include catch-22 file.
1034       */
seen_extra_dist(void)1035     bool seen_extra_dist(void) const { return !extra_dist.empty(); }
1036 
1037     /**
1038       * The get_extra_dist method may be used to obtain read-only
1039       * access to the set of catch-22 include files.
1040       */
get_extra_dist(void)1041     const nstring_list &get_extra_dist(void) const
1042         { return extra_dist; }
1043 
1044     /**
1045       * The set_install_data_macro method is used to notify that the
1046       * Makefile.in file will need to define the INSTAL_DATA make macro.
1047       */
1048     void set_install_data_macro(void);
1049 
1050     /**
1051       * The need_install_data_macro method is used to determine whether
1052       * or not the INSTALL_DATA make macro needs to be defined.
1053       */
need_install_data_macro(void)1054     bool need_install_data_macro(void) const { return install_data_macro; }
1055 
1056     /**
1057       * The get_install_directories method is used to obtain a list
1058       * of the list of <b>directories</b> mentioned to the set of
1059       * <i>all</i> remember_install_<i>something</i> methods.
1060       */
1061     nstring_list get_install_directories(void) const;
1062 
1063     /**
1064       * The set_have_ar method is used to notify that an a
1065       * "AC_CHECK_PROGS(AR, ar)" line was observed in the "configure.ac"
1066       * file.
1067       */
1068     void set_have_ar(void);
1069 
1070     /**
1071       * The have_ar method is used to determine whether or not a
1072       * "AC_CHECK_PROGS(AR, ar)" line was observed in the "configure.ac"
1073       * file.
1074       */
have_ar(void)1075     bool have_ar(void) const { return have_ar_flag; }
1076 
1077     /**
1078       * The set_have_ranlib method is used to notify that an a
1079       * "AC_PROG_RANLIB" line was observed in the "configure.ac" file.
1080       */
1081     void set_have_ranlib(void);
1082 
1083     /**
1084       * The have_ranlib method is used to determine whether or not a
1085       * "AC_PROG_RANLIB" line was observed in the "configure.ac" file.
1086       */
have_ranlib(void)1087     bool have_ranlib(void) const { return have_ranlib_flag; }
1088 
1089     /**
1090       * The set_need_ghostscript method is used to remember that the
1091       * "ghostscript" package (for ps2pdf) is required.
1092       */
1093     void set_need_ghostscript(void);
1094 
1095     /**
1096       * The need_ghostscript method is used to determine whether or not
1097       * the "ghostscript" package (for ps2pdf) is required.
1098       */
need_ghostscript(void)1099     bool need_ghostscript(void) const { return need_ghostscript_flag; }
1100 
1101     /**
1102       * The seen_am_data_data method is used to determine whether or not
1103       * any files have been seen that are to be installed as data by
1104       * automake.
1105       */
seen_am_data_data(void)1106     bool seen_am_data_data(void) const { return !am_data_data.empty(); }
1107 
1108     /**
1109       * The get_am_data_data method is used to obtain read-only access
1110       * to the set of files to be installed as data by automake.
1111       */
get_am_data_data(void)1112     const nstring_list &get_am_data_data(void) const { return am_data_data; }
1113 
1114     /**
1115       * The remember_am_data_data instance variable is used to add
1116       * another file the set of files to be installed as data by
1117       * automake.
1118       */
1119     void remember_am_data_data(const nstring &filename);
1120 
1121 private:
1122     /**
1123       * The project_name instance variable is used to remember the name
1124       * of the project.  We need this for library .a file naming, in
1125       * some cases.  It is set by the #set_library_directory method.
1126       */
1127     nstring project_name;
1128 
1129     /**
1130       * The use_libtool_flag is used to remember whether or not libtool
1131       * is to be used to build shared libraries.
1132       */
1133     bool use_libtool_flag;
1134 
1135     /**
1136       * The use_lib_la_files_flag is used to remember whether or not to
1137       * install *.la files.  Only meaningful if #use_libtool_flag is true.
1138       *
1139       * The debian folk take exception to the "almost always useless"
1140       * *.la files install by libtool.  So this defaults to false.
1141       */
1142     bool use_lib_la_files_flag;
1143 
1144     /**
1145       * The version_info instance variable is used to remember the
1146       * shared-library version-info string.
1147       */
1148     nstring version_info;
1149 
1150     /**
1151       * The library_directory instance variable is used to remember
1152       * the directory containing a library to be linked with the other
1153       * executables.  Empty if none.
1154       */
1155     nstring library_directory;
1156 
1157     /**
1158       * The library_name instance variable is used to remember
1159       * the name of a library to be linked with the other executables
1160       * (basename, not including extension).  Empty if none.
1161       */
1162     nstring library_name;
1163 
1164     /**
1165       * The explicit_noinst instance variable is used to remember
1166       * the names of programs that are not to be installed.
1167       */
1168     nstring_list explicit_noinst;
1169 
1170     /**
1171       * The use_x11_flag instance variable is used to remember
1172       * whether or not the output should use the X11 macros.
1173       */
1174     bool use_x11_flag;
1175 
1176     /**
1177       * The use_i18n_flag is used to remember whether or not the project
1178       * installs internationalization and localization files.
1179       */
1180     bool use_i18n_flag;
1181 
1182     /**
1183       * The seen_c_flag instance variable is used to remember that the
1184       * project appears to contain C source files.
1185       */
1186     bool seen_c_flag;
1187 
1188     /**
1189       * The seen_c_plus_plus_flag instance variable is used to remember
1190       * that the project appears to contain C++ source files.
1191       */
1192     bool seen_c_plus_plus_flag;
1193 
1194     /**
1195       * The seen_yacc_flag instance variable is used to remember
1196       * that the project appears to contain yacc source files.
1197       */
1198     bool need_yacc_flag;
1199 
1200     /**
1201       * The have_yacc_flag instance variable is used to remember
1202       * that the configure.ac file contains a definition for @YACC@
1203       */
1204     bool have_yacc_flag;
1205 
1206     /**
1207       * The seen_lex_flag instance variable is used to remember
1208       * that the project appears to contain lex source files.
1209       */
1210     bool need_lex_flag;
1211 
1212     /**
1213       * The have_lex_flag instance variable is used to remember
1214       * that the configure.ac file contains a definition for @LEX@
1215       */
1216     bool have_lex_flag;
1217 
1218     /**
1219       * The clean_misc_files instance variable is used to remember files
1220       * that are to be removed by the "clean-misc:" target, but do not
1221       * it into any of the other clean categories.
1222       */
1223     nstring_list clean_misc_files;
1224 
1225     /**
1226       * The clean_obj_files instance variable is used to remember files
1227       * that are to be removed by the "clean-obj:" target.
1228       */
1229     nstring_list clean_obj_files;
1230 
1231     /**
1232       * The dist_clean_files instance variable is used to remember files
1233       * that are to be removed by the "distclean-files:" target.  These
1234       * files are the ones created withing the build dir to optimize the
1235       * install.
1236       */
1237     nstring_list dist_clean_files;
1238 
1239     /**
1240       * The dist_clean_dirs instance variable is used to remember the
1241       * directories that are to be removed by the "distclean-dirs:"
1242       * target.  These directories are the ones created within the build
1243       * directory, usually by libtool but not always.
1244       */
1245     nstring_list dist_clean_dirs;
1246 
1247     /**
1248       * The executable_file_extension instance variable is used to
1249       * remember the file extension of executable files.  On Unix, the
1250       * isn't one.
1251       */
1252     nstring executable_file_extension;
1253 
1254     /**
1255       * The library_file_extension instance variable is used to
1256       * remember the file extension of library files.
1257       * Defaults to "a".
1258       */
1259     nstring library_file_extension;
1260 
1261     /**
1262       * The object_file_extension instance variable is used to
1263       * remember the file extension of object files.
1264       * Defaults to "o".
1265       */
1266     nstring object_file_extension;
1267 
1268     typedef std::map<nstring, nstring_list> source_list_t;
1269 
1270     /**
1271       * The source_list instance variable is used to remember the list
1272       * of source files associated with each top-level directory.
1273       */
1274     source_list_t source_list;
1275 
1276     typedef std::map<nstring, nstring_list> include_list_t;
1277 
1278     /**
1279       * The include_list instance variable is used to remember the list
1280       * of include files associated with each top-level directory.
1281       */
1282     include_list_t include_list;
1283 
1284     typedef std::map<nstring, nstring_list> object_list_t;
1285 
1286     /**
1287       * The object_list instance variable is used to remember the list
1288       * of object files associated with each top-level directory.
1289       */
1290     object_list_t object_list;
1291 
1292     typedef std::map<nstring, nstring_list> library_list_t;
1293 
1294     /**
1295       * The library_list instance variable is used to remember the list
1296       * of library files associated with each program.
1297       */
1298     library_list_t library_list;
1299 
1300     /**
1301       * The progdirs instance variable is used to rememeber the list of
1302       * directorirs that contain program sources and objects that need
1303       * to be linked from object files to build an executable (i.e. not
1304       * a script).
1305       */
1306     nstring_list progdirs;
1307 
1308     /**
1309       * The install_script_macro instance variable is used to remember
1310       * whether or not a script has been seen.  This is used to decide
1311       * whether or not to emit the "INSTALL_SCRIPT = @INSTALL_SCRIPT@"
1312       * line in the Makefile.in file.
1313       */
1314     bool install_script_macro;
1315 
1316     /**
1317       * The all_bin instance variable is used to remember the list of
1318       * executable files to be constructed by the "all-bin" target.
1319       */
1320     nstring_list all_bin;
1321 
1322     /**
1323       * The install_bin instance variable is used to remember the list of
1324       * executable files to be installed by the "install-bin" target.
1325       */
1326     nstring_list install_bin;
1327 
1328     /**
1329       * The etc_test_sh_flag is used to remember whether or not the
1330       * "etc/test.sh" source file has been seen.  This is used to write
1331       * test rules.
1332       * This will be used to run tests, if it is present.
1333       */
1334     bool etc_test_sh_flag;
1335 
1336     /**
1337       * The test_sources instance variable is used to remember the test
1338       * source files, for use in the Automake TESTS definition.
1339       */
1340     nstring_list test_sources;
1341 
1342     /**
1343       * The test_files instance variable is used to remember the test
1344       * output files, for use in the "make sure" rule.
1345       */
1346     nstring_list test_files;
1347 
1348     /**
1349       * The have_groff_flag instance variable is used to remember
1350       * whether or not we have seen GROFF mentioned in the configure.ac
1351       * file.  If this is the case, we emit more rules which use groff.
1352       */
1353     bool have_groff_flag;
1354 
1355     /**
1356       * The need_groff_flag instance variable is used to remember
1357       * whether or not we have seen source files that require groff to
1358       * build them.
1359       */
1360     bool need_groff_flag;
1361 
1362     /**
1363       * The have_soelim_flag instance variable is used to remember
1364       * whether or not there is a "AC_CHECK_PROGS(SOELIM, gsoelim
1365       * soelim)" line in the "configure.ac" file.
1366       */
1367     bool have_soelim_flag;
1368 
1369     /**
1370       * The need_soelim_flag instance variable is used to remember
1371       * whether or not ther are source files that required soelim(1) to
1372       * build.
1373       */
1374     bool need_soelim_flag;
1375 
1376     /**
1377       * The seen_datadir_flag instance variable is used to remember
1378       * whether or not we have seen content to be installed from
1379       * datadir/ into ${prefix}/share/<progname>/
1380       */
1381     bool seen_datadir_flag;
1382 
1383     /**
1384       * The install_datadir instance variable is used to remember
1385       * the name of files to be installed below $(datadir)/<progname>/
1386       *
1387       * This also includes files to be installed below $(datarootdir)
1388       */
1389     nstring_list install_datadir;
1390 
1391     /**
1392       * The seen_datarootdir_flag instance variable is used to remember whether
1393       * or not we have seen content to be installed from libdir/ into
1394       * ${prefix}/share/ and is usually for other applications' use.
1395       */
1396     bool seen_datarootdir_flag;
1397 
1398     /**
1399       * The seen_libdir_flag instance variable is used to remember
1400       * whether or not we have seen content to be installed from libdir/
1401       * into ${prefix}/lib/<progname>/
1402       */
1403     bool seen_libdir_flag;
1404 
1405     /**
1406       * The pkgconfig_sources instance variable is used to remember the
1407       * names of the source files to be installed below $(libdir)/pkgconfig/
1408       */
1409     nstring_list pkgconfig_sources;
1410 
1411     /**
1412       * The install_libdir instance variable is used to remember the
1413       * names of the files to be installed under $(libdir)/
1414       */
1415     nstring_list install_libdir;
1416 
1417     /**
1418       * The seen_sysconfdir_flag instance variable is used to
1419       * remember whether or not we have seen content to be
1420       * installed from libdir/ into /etc/
1421       */
1422     bool seen_sysconfdir_flag;
1423 
1424     /**
1425       * The man_sources instance variable is used to remember the set
1426       * of sourcfe files of man pages.
1427       */
1428     nstring_list man_sources;
1429 
1430     /**
1431       * The install_mandir instance variable is used to remember the set
1432       * of files to be installed into $(mandir)/
1433       */
1434     nstring_list install_mandir;
1435 
1436     /**
1437       * The all_doc instance variable is used to remember the list of
1438       * documentation files to be constructed by the "all-doc" target.
1439       */
1440     nstring_list all_doc;
1441 
1442     /**
1443       * The install_doc instance variable is used to remember the list
1444       * of documentation files to be installed by the "install-doc"
1445       * target.
1446       */
1447     nstring_list install_doc;
1448 
1449     /**
1450       * The program_prefix instance variable is used to remember
1451       * the prefix string to add to program names when installing.
1452       * Defaults to the empty string.
1453       */
1454     nstring program_prefix;
1455 
1456     /**
1457       * The program_suffix instance variable is used to remember
1458       * the suffix string to add to program names when installing.
1459       * Defaults to the empty string.
1460       */
1461     nstring program_suffix;
1462 
1463     /**
1464       * The all_i18n instance variable is used to remember set set
1465       * of i18n files to be built (*.po => *.mo).
1466       */
1467     nstring_list all_i18n;
1468 
1469     /**
1470       * The install_i18n instance variable is used to remember set set
1471       * of files to be installed under $(NLSDIR)/
1472       */
1473     nstring_list install_i18n;
1474 
1475     /**
1476       * The have_nlsdir_flag instance is used to remember whether or not
1477       * a line of the form AC_SUBST(NLSDIR) appears in the configure.ac
1478       * file.
1479       */
1480     bool have_nlsdir_flag;
1481 
1482     /**
1483       * The etc_msgfmt_sh_flag instance variable is used to remember whether
1484       * or not an "etc/msgfmt.sh" source file has been seen.  If present, this
1485       * will be used in preference to raw msgfmt(1) command.
1486       */
1487     bool etc_msgfmt_sh_flag;
1488 
1489     /**
1490       * The install_include_sources instance variable is used to rememebr
1491       * the list of include source files.
1492       */
1493     nstring_list install_include_sources;
1494 
1495     /**
1496       * The install_include instance variable is used to rememebr
1497       * the list of include files to be installed into $(includedir).
1498       * The filename all include "$(includedir)" as the first component.
1499       */
1500     nstring_list install_include;
1501 
1502     /**
1503       * The groff_macro_flag is used to remember whether or not
1504       * groff -ms or groff -mm flags have been seen during preprocessing.
1505       */
1506     bool groff_macro_flag;
1507 
1508     /**
1509       * The built_source instance variable i sused to remember the set of
1510       * catch-22 non-source files that need to be built early in the build.
1511       */
1512     nstring_list built_sources;
1513 
1514     /**
1515       * The extra_dist instance variable is used to remember the set
1516       * of source files that are also to be added to the tarball, even
1517       * though they appear on no other source file list.
1518       */
1519     nstring_list extra_dist;
1520 
1521     /**
1522       * The install_data_macro instance variable is used to remember
1523       * whether or not the INSTALL_DATA macro needs to be defined.
1524       */
1525     bool install_data_macro;
1526 
1527     typedef std::map<nstring, int> install_directories_t;
1528 
1529     /**
1530       * The install_directories instance variable is used to remember
1531       * the set of install directories as mentioned by other
1532       * remember_install_<i>something</i> methods.
1533       */
1534     install_directories_t install_directories;
1535 
1536     /**
1537       * The remember_install_directory_for method
1538       * is used to remember the directory to be installed.
1539       *
1540       * @param install_file
1541       *     The path of the file to be installed.  It will rip off the
1542       *     final component to construct the directory name.
1543       */
1544     void remember_install_directory_for(const nstring &install_file);
1545 
1546     /**
1547       * The have_ar_flag is used to remember whether or not there is a
1548       * "AC_CHECK_PROGS(AR, ar)" line in the configure.ac source file.
1549       */
1550     bool have_ar_flag;
1551 
1552     /**
1553       * The have_ranlib_flag is used to remember whether or not there is a
1554       * "AC_PROG_RANLIB" line in the configure.ac source file.
1555       */
1556     bool have_ranlib_flag;
1557 
1558     /**
1559       * The need_ghostscript_flag instance variable is used to remember
1560       * whether or not the build depends on the ghostscript package.
1561       */
1562     bool need_ghostscript_flag;
1563 
1564     /**
1565       * The am_data_data instance variable is used to remmeber the set
1566       * of files to be installed as data by automake.
1567       */
1568     nstring_list am_data_data;
1569 
1570     /**
1571       * The read_only instance variable is used to remember whether or
1572       * not the preprocessing stage has finished, at which point no more
1573       * changes to any instance variable should be occuring.
1574       */
1575     bool read_only; // MUST BE LAST
1576 
1577     /**
1578       * The check_read_write method is used by all methods that
1579       * change this instance's state, to be sure that modification is
1580       * appropriate.  This is a debugging technique, not a public method.
1581       */
1582     void check_read_write(const char *method_name);
1583 
1584     /**
1585       * The copy constructor.  Do not use.
1586       */
1587     process_data(const process_data &);
1588 
1589     /**
1590       * The assignment operator.  Do not use.
1591       */
1592     process_data &operator=(const process_data &);
1593 };
1594 
1595 // vim: set ts=8 sw=4 et :
1596 #endif // AEMAKEGEN_PROCESS_DATA_H
1597