From: wolf \n";
+
+while (<>) {
+ # ignore cvs tag
+ next if m!^#\*\s*\$Id:!;
+
+ # substitute special characters
+ s/&/&/g;
+ s/</g;
+ s/>/>/g;
+ s/\t/ /g;
+
+ if (($state == $program_mode) && m!^\s*#!)
+ {
+ $state = $comment_mode;
+ print "\n";
+ print "\n";
+ print " \n";
+ }
+ # if in comment mode and no comment line: toggle state.
+ # don't do so, if only a blank line
+ elsif (($state == $comment_mode) && !m!^\s*#! && !m!^\s*$!)
+ {
+ $state = $program_mode;
+ print "CXX=$(CXX)
' >> $@
+ @echo 'CC=$(CC)
' >> $@
+ @echo 'PERL=$(PERL)
' >> $@
+ @echo 'lib-path-base=$(lib-path-base)
' >> $@
+ @echo 'lib-path-lac=$(lib-path-lac)
' >> $@
+ @echo 'lib-path-deal2=$(lib-path-deal2)
' >> $@
+ @echo 'LIBPATH=$(LIBPATH)
' >> $@
+ @echo 'lib-base.o=$(lib-base.o)
' >> $@
+ @echo 'lib-base.g=$(lib-base.g)
' >> $@
+ @echo 'lib-lac.o=$(lib-lac.o)
' >> $@
+ @echo 'lib-lac.g=$(lib-lac.g)
' >> $@
+ @echo 'lib-deal2-1d.o=$(lib-deal2-1d.o)
' >> $@
+ @echo 'lib-deal2-1d.g=$(lib-deal2-1d.g)
' >> $@
+ @echo 'lib-deal2-2d.o=$(lib-deal2-2d.o)
' >> $@
+ @echo 'lib-deal2-2d.g=$(lib-deal2-2d.g)
' >> $@
+ @echo 'lib-deal2-3d.o=$(lib-deal2-3d.o)
' >> $@
+ @echo 'lib-deal2-3d.g=$(lib-deal2-3d.g)
' >> $@
+ @echo 'include-path-base=$(include-path-base)
' >> $@
+ @echo 'include-path-lac=$(include-path-lac)
' >> $@
+ @echo 'include-path-deal2=$(include-path-deal2)
' >> $@
+ @echo 'INCLUDE=$(INCLUDE)
' >> $@
+ @echo 'CXXFLAGS.g=$(CXXFLAGS.g)
' >> $@
+ @echo 'CXXFLAGS.o=$(CXXFLAGS.o)
' >> $@
+ @echo 'ACE_ROOT=$(ACE_ROOT)
' >> $@
+ @echo 'lib-ACE=$(lib-ACE)
' >> $@
+ @echo 'with-multithreading=$(with-multithreading)
' >> $@
+ @cat makefiles.2.html >> $@
+
+
+makefile.small.html: Makefile.small
+ @$(PERL) makefile2html < $< > $@
+
+makefile.large.html: Makefile.large
+ @$(PERL) makefile2html < $< > $@
+
+
+clean:
+ -rm -f makefiles.html makefile.small.html makefile.large.html
+
+.PHONY: default clean
diff --git a/deal.II/doc/development/Makefile.large b/deal.II/doc/development/Makefile.large
new file mode 100644
index 0000000000..e29b74a644
--- /dev/null
+++ b/deal.II/doc/development/Makefile.large
@@ -0,0 +1,152 @@
+# $Id$
+
+# The large projects Makefile looks much like the one for small
+# projects. Basically, only the following six parameters need to be
+# set by you:
+
+# The first denotes the dimension for which the program is to be
+# compiled:
+deal_II_dimension = 2
+
+# The second tells us the name of the executable. It is prefixed by
+# `lib/' to designate its destination directory. Note that the program
+# name depends on the dimension, so you can keep copies for the
+# different dimensions around:
+target = lib/application-name-$(deal_II_dimension)d
+
+# The `debug-mode' variable works as in the small projects Makefile:
+debug-mode = off
+
+# And so does the following variable. You will have to set it to
+# something more reasonable, of course.
+clean-up-files = ...
+
+# Finally, here is a variable which tells the `run' rule which
+# parameters to pass to the executable. Usually, this will be the name
+# of an input file.
+run-parameters = parameter-file.prm
+
+# Now, this is the last variable you need to set, namely the path to
+# the deal.II toplevel directory:
+D = ../../deal.II
+
+
+
+#
+#
+# Usually, you will not need to change something beyond this point.
+#
+#
+# This tells `make' where to find the global settings and rules:
+include $D/common/Make.global_options
+
+
+# First get a list of files belonging to the project. Include files
+# are expected in `include/', while implementation files are expected
+# in `source/'. Object files are placed into `lib/[123]d', using the
+# same base name as the `.cc' file.
+cc-files = $(shell echo source/*.cc)
+o-files = $(cc-files:source/%.cc=lib/$(deal_II_dimension)d/%.o)
+go-files = $(cc-files:source/%.cc=lib/$(deal_II_dimension)d/%.go)
+h-files = $(wildcard include/*.h)
+lib-h-files = $(shell echo $(include-path-base)/*.h \
+ $(include-path-lac)/*.h \
+ $(include-path-deal2)/*/*.h)
+
+# As before, define a list of libraries. This, of course depends on
+# the dimension in which we are working:
+libs.g = $(lib-deal2-$(deal_II_dimension)d.g) \
+ $(lib-lac.g) \
+ $(lib-base.g)
+libs.o = $(lib-deal2-$(deal_II_dimension)d.o) \
+ $(lib-lac.o) \
+ $(lib-base.o)
+
+
+
+# Define a nifty string to indicate in the output of the compile
+# commands whether the program is compiled in multithread mode or not:
+ifneq ($(with-multithreading),no)
+ MT = MT
+else
+ MT = ==
+endif
+
+
+
+
+# Now use the information from above to define the set of libraries to
+# link with and the flags to be passed to the compiler:
+ifeq ($(debug-mode),on)
+ libraries = $(go-files) $(libs.g)
+ flags = $(CXXFLAGS.g)
+else
+ libraries = $(o-files) $(libs.o)
+ flags = $(CXXFLAGS.o)
+endif
+
+
+# Then augment the compiler flags by a specification of the dimension
+# for which the program shall be compiled:
+flags += -Ddeal_II_dimension=$(deal_II_dimension)
+
+
+# If in multithread mode, add the ACE library to the libraries which
+# we need to link with:
+ifneq ($(with-multithreading),no)
+ libraries += $(lib-ACE)
+endif
+
+
+# The following two rules define how to compile C++ files into object
+# files:
+lib/$(deal_II_dimension)d/%.go :
+ @echo =====waves=======$(deal_II_dimension)d====debug=====$(MT)== $(The deal.II Homepage
+Your browser does not seem to understand frames. A version of this
+page that does not use frames can be found at
+toc.html.
+\n";
+ }
+
+ if ($state == $comment_mode)
+ {
+ m!\s*#\s*(.*)!;
+ print $1, "\n";
+ print "
" if $1 =~ m!^\s*$!; + } + else + { + print " $_"; + } +} + +if ($state == $program_mode) { + print "\n"; +} + + + diff --git a/deal.II/doc/development/makefiles.1.html b/deal.II/doc/development/makefiles.1.html new file mode 100644 index 0000000000..fb7e8f88ef --- /dev/null +++ b/deal.II/doc/development/makefiles.1.html @@ -0,0 +1,242 @@ + + +
+ + + +
+ The file common/Make.global_options
exports several
+ make variables to other Makefiles which
+ include it. You will want to include this file into the Makefiles of
+ your project to use the same compiler flags and to access the pathes
+ to libraries. This page documents available
+ flags, documents the values which are used
+ in your local installation, and shows two
+ generic Makefiles which you may want to use
+ in your own projects.
+
+ Following is a list of all available flags which are exported to + other Makefiles, sorted into different categories: +
+ +CXX
+ Executable name of the C++ compiler +
+CC
+ Executable name of the C compiler, which + is used to generate shared libraries +
+PERL
+ Executable name of the `perl' program +
+lib-path-base
+ Path to the library files of the /base library +
+lib-path-lac
+ Same for the /lac library +
+lib-path-deal2
+ Same for the /deal.II library +
+LIBPATH
+ All the library pathes prefixed by -L, i.e. the + flags needed by the compiler to find the libraries + when they are linked in using -lbase -llac -ldeal_II_2d + (for example). These -L paths are appended to what + was in $(LIBPATH) before. +
+lib-base.o
+ Path and filename of the base library in optimized + mode. depending on whether shared libraries were + or were not enabled, the suffix of the value of this + variable is either .so or .a +
+lib-base.g
+ Same, for the library in debug mode +
+lib-lac.o lib-lac.g
+ Same for the lac libraries +
+lib-deal2-1d.o lib-deal2-1d.g
+ lib-deal2-2d.o lib-deal2-2d.g
+ lib-deal2-3d.o lib-deal2-3d.g
+ Same for the deal.II libraries in the various dimensions +
+include-path-base
+ Same as for lib-path-base, but contains the paths + to the include files of the /base library +
+include-path-lac
+ Same for the /lac library +
+include-path-deal2
+ Same for the /deal.II library +
+INCLUDE
+ All the include pathes prefixed by -I +
+CXXFLAGS.g
+ Compiler flags for debug mode +
+CXXFLAGS.o
+ Compiler flags for optimized mode +
++ If --with-multithreading was given to ./configure, $(INCLUDE) and + $(LIBPATH) are augmented by the ACE include and library paths, and + the following symbols are meaningful: + +
ACE_ROOT
+ Path to the ACE library as given to ./configure +
+lib-ACE
+ Path and name of the ACE library +
+with-multithreading
+ This symbol is 'no' if the flag was not given + to ./configure and not 'no' (it actually equals + $(ACE_ROOT)) if -with-multithreading=... was + given +
+
+ Note that in multithread mode, the compiler flags are augmented by
+ the definition of the preprocessor variable
+ DEAL_II_USE_MT
, which you can use to find out whether
+ your program shall use multithreading or not.
+
+ In this section, we provide templates for Makefiles for + applications based on the deal.II + libraries. They show how to use the information provided by the + variables explained above. +
+ ++ At present, we have two Makefiles, one for + small projects + consisting of only one C++ file, and one for + large projects. + Both Makefiles need slight modifications before they will work in + your project. The places for modifications are marked. + +
+ Small + projects: This Makefile is targeted at applications which + are written to simply try something, or prove an + assumption. Such applications are the + step-by-step + examples. These small problems are probably not the + usual case in real life, but you may want to take a look at + this file in order to get an idea on how it works, or you + go directly to the large projects file. +
+ ++ You can find this Makefile + here. +
+ +
+ Large
+ projects: This file is targeted at larger projects, and
+ for this file to work, we already assume a certain
+ subdirectory structure of your project. In particular, it
+ assumes that in your project directory the following
+ subdirectories exist (where project
is the
+ directory in which the whole project is located):
+
project/source
+ project/include
+ project/lib
+ project/lib/1d
+ project/lib/2d
+ project/lib/3d
+ project/include
, while implementation files
+ are to be in project/source
. The executable
+ will be in project/lib
and the compiled object
+ files will be in project/lib/?d
, depending on
+ the dimension for which the project is compiled. Using this
+ directory structure, it is possible to quickly switch
+ between dimensions in which a program shall run in,
+ enabling us to develop applications which run in 1d, 2d, or
+ 3d without long compilation times. Furthermore, placing
+ object files in different directories prevents cluttering
+ directories with unnecessarily many files.
+
+
+ + The dimension for which the project shall be compiled is + not stated in the source code, as in the small projects + Makefile, but is determined by a flag which is given in the + Makefile. To determine the dimension for which a project is + compiled in your source file, use the preprocessor constant + `deal_II_dimension' which is set by the Makefile and passed + through the compiler. +
+ ++ You can find this Makefile + here. +
++Table of contents +
++ Makefiles +
++ + Back to the deal.II homepage + +
++ In case you want to stay informed about what has happened recently + to the library, we have some information for you. Note, however, + that this information is not available with the local version of + your library, but rather at the home server of the deal.II + repository. +
+ ++ At present, the following information is available: +
+ +
+ If you want to stay informed what file have been changed lately, + we keep lists which are updated each time a file is + commited. Each commit it categorized into the different parts of + the library. The files storing these files are (for the + different years): +
+ ++
+ A backlog + of changes made to the CVS archive in the last 100 days. +
+ ++ This information is generated directly from the global CVS + archive and can be used to track what changes have been made to + individual files, since it shows the diffs between the different + versions. We generate this information using the + cvs2html + script. +
++ All this information is updated automatically each night. +
+ + + + diff --git a/deal.II/doc/development/title.html b/deal.II/doc/development/title.html new file mode 100644 index 0000000000..58441e6c8e --- /dev/null +++ b/deal.II/doc/development/title.html @@ -0,0 +1,35 @@ + + + + + ++ Apart from the online API references and the tutorial, which ic + covered elsewhere, this page gathers some information that might + be of interest if you want to develop programs based on + deal.II yourself. +
+ ++ At present, we have the following resources available: +
+ +Makefiles: + The library has a file which exports several make variables + to Makefiles which include it. This information may be used + to make writing Makefiles more portable and simple. The + exported variables are explained in this page and we show two + generic Makefiles, one for small and one for larger projects. +
+ +Recent changes to + the library: If you want to stay informed about what is + going on with the library itself, your may want to take a + look at the page where we have some information about + recent changes to the library. +
+- The README file for deal.II. + The README file for deal.II
./configure
is the
creation of the file common/Make.global_options
. This
file contains compiler options, paths, etc which you may want to
- use in the Makefiles of your own projects. It is definitely a good
+ use in the Makefiles of your own
+ projects. It is definitely a good
idea to include it into your Makefile, to allow using the same
flags for compilation between library files and the files of your
project, and to access the paths of the library files. To find
@@ -233,6 +234,7 @@
your application runs stably and are used in production mode.
+
+ + Please note that running ./configure stores the paths to some + programs, such as the compilers or the Perl interpreter. The + compiler which will be used when compiling the library (or your + own application) is therefore selected at the time of + configuration and independent of the present setting of your $PATH + environment value. The reason for this is that presently there are + still too many incompatibilities between different versions of + compilers and that compiling different parts of programs with + different compilers often leads to hard-to-find problems. By + storing the absolute paths of compilers, we can at least catch + those problems where different compiler revisions are located in + different directories. + +
+ + If you want to use a new compiler version, you will therefore have + to re-run ./configure with the new compiler being in the $PATH + environment variable. + +
+
+ It is in general a good idea to run `cd common ; make clean'
+ before re-configuring.
+
+
The README
file of the library: this file explains installation,
required programs and some other topics. The tutorial:
we have a tutorial for new users of the library which
explains the basic elements of finite element programs based
on the library, and provides some small example programs. In case you want to develop your own applications using
+ deal.II, it might be worth to take a look
+ at this page which has
+ some information regarding that subject.
+ Programming interface documentation: the classes and methods
in the library are extensively documented (presently
approximately 1250 pages if printed). We write this
@@ -70,11 +78,6 @@
For developers, we have a
- little page with
- up-to-date information about the development process.
- \n";
while (<>) {
# ignore cvs tag
- next if m!/\*\s*\$Id:!;
+ next if m!^//\*\s*\$Id:!;
# substitute special characters
s/&/&/g;
diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/program2plain b/deal.II/doc/tutorial/chapter-2.step-by-step/program2plain
index 720819ba49..546da81f4c 100644
--- a/deal.II/doc/tutorial/chapter-2.step-by-step/program2plain
+++ b/deal.II/doc/tutorial/chapter-2.step-by-step/program2plain
@@ -1,6 +1,8 @@
+# Copyright (C) 1999, 2000 by Wolfgang Bangerth, Univerisity of Heidelberg.de
+
# ignore the first few lines
$_ = <>;
-while ( m!/\*\s*\$Id$!) {
+while ( m!^//\*\s*\$Id$!) {
$_ = <>;
}
@@ -19,7 +21,7 @@ END
while (<>) {
# ignore cvs tag
- next if m!/\*\s*\$Id:!;
+ next if m!^//\*\s*\$Id:!;
# ignore comment lines
next if m!^\s*//!;
diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/toc.html b/deal.II/doc/tutorial/chapter-2.step-by-step/toc.html
index e0a47cdac0..84fd3beb9b 100644
--- a/deal.II/doc/tutorial/chapter-2.step-by-step/toc.html
+++ b/deal.II/doc/tutorial/chapter-2.step-by-step/toc.html
@@ -40,7 +40,9 @@ The programs themselves can be found at a path which is indicated at
the beginning of the last section of each example. You can compile
them by typing ``make'' in the respective directory, and run them
using ``make run''. The latter command also compiles the program if
-that has not already been done.
+that has not already been done. The Makefiles in the different
+directories are based on the small program Makefile template described
+in in this section.
Compiler flags
diff --git a/deal.II/doc/toc.html b/deal.II/doc/toc.html
index 0872f3e2c2..8956a23b00 100644
--- a/deal.II/doc/toc.html
+++ b/deal.II/doc/toc.html
@@ -19,10 +19,18 @@
The commented program
\n";
# ignore the first few lines
$_ = <>;
-while ( m!/\*\s*\$Id$!) {
+while ( m!^//\*\s*\$Id$!) {
$_ = <>;
}
@@ -17,7 +19,7 @@ print "