[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog Makefile.am TODO configure.ac d... [relea
From: |
Rob Savoye |
Subject: |
[Gnash-commit] gnash ChangeLog Makefile.am TODO configure.ac d... [release_0_8_2_rc1] |
Date: |
Mon, 03 Mar 2008 23:47:02 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Branch: release_0_8_2_rc1
Changes by: Rob Savoye <rsavoye> 08/03/03 23:47:00
Modified files:
. : ChangeLog Makefile.am TODO configure.ac
doc/C : Makefile.am appendix.xml fdl-appendix.xml
sources.xml
doc/C/usermanual: acknowledgments.xml glossary.xml
installation.xml revisions.xml
specification.xml usage.xml
macros : docbook.m4
packaging : Makefile.am bsd.am deb.am snapshot.am
packaging/debian: changelog control copyright docs gnash.install
rules
packaging/redhat: gnash.spec
Added files:
doc/C/preformatted: cygnal.1.in dumpshm.1.in gnash.1.in
gnash_ref.html.in gnash_ref.info.in
gnash_user.html.in gnash_user.info.in
gnashref.html.in gnashuser.html.in
gnashuser.ref.in gprocessor.1.in
soldumper.1.in
doc/C/refmanual: amf.xml as_value.xml building.xml
code_dependencies.xml codestyle.xml
configuration.xml cross_compiling.xml
custompath_configuration.xml
documentation_dependencies.xml
feature_configuration.xml install.xml
internals.xml logging.xml memory.xml
new_as_class.xml object.xml plugin.xml
revisions.xml rtmp.xml sources.xml
testing_dependencies.xml
doc/C/refmanual/extensions: extensions.xml fileext.xml
gtkext.xml mysqlext.xml
Removed files:
doc/C/actionscript: as_value.xml main.xml new_as_class.xml
doc/C/asspec : .cvsignore Makefile.am accessibility.xml
array.xml asspec-C.omf asspec.xml boolean.xml
button.xml camera.xml color.xml contextmenu.xml
customactions.xml date.xml error.xml
fdl-appendix.xml function.xml key.xml legal.xml
loadvars.xml localconnection.xml math.xml
microphone.xml mouse.xml movieclip.xml
moviecliploader.xml netconnection.xml
netstream.xml number.xml selection.xml
sharedobject.xml sound.xml stage.xml string.xml
system.xml textfield.xml textformat.xml
textsnapshot.xml video.xml xml.xml xmlnode.xml
xmlsocket.xml
doc/C/usermanual: bugreport.xml doc_authors.xml introduction.xml
doc/C/usermanual/installation: building.xml
code_dependencies.xml
configuration.xml
cross_compiling.xml
custompath_configuration.xml
documentation_dependencies.xml
feature_configuration.xml
install.xml packagemanager.xml
sources.xml
testing_dependencies.xml
doc/C/usermanual/usage: gnashrc.xml
packaging/doc : .cvsignore Makefile.am actionscript.html.in
actionscript.info.in cygnal.1.in dumpshm.1.in
gnash.1.in gnash.html.in gnash.info.in
gprocessor.1.in soldumper.1.in
Log message:
* Makefile.am: Add packaging files to EXTRA_DIST. Drop the
dist-hook.
* packaging/debian: Minor changes to start working with HEAD.
* packaging/deb.am: Copy the debian packaging files from the
source tree to the snapshot directory do dpkg-buildpackage can
find them.
* packaging/redhat/gnash.spec: Update for current layout.
* configure.ac: Add a --disable-testsuite option for package
builders. This spends builds up, and we already tested Gnash
before packaging, right ?
* Makefile.am: Always include testsuite directory, but don't
add it
to SUBDIRS. Install the packaging files.
* doc/C/Makefile.am: Add some extra dependencies to keep
distcheck
happy.
* testsuite/samples/Makefile.am: Add AGG_LIBS.
* doc/C/Makefile.am: Tweak how images get installed so distcheck
is happy.
* po/fi.po: Finish translation by Timo Jyrinki.
* po/Makefile.am: Build finish translation.
* doc/C/preformatted: Update.
* doc/C/Makefile.am: Furthur tweaking of the .xml.texi rule so
it
works with versions to correctly produce both info files. On
Fedora, it kept only creating gnash_user.info. Fix install rule
to
deal with multiple versions of install-info. Add --dir-file=
when
removing entries.
* doc/C/refmanual/internals.xml: Use <emphasis> instead of
<code>,
as <code> doesn't appear to be supported on Fedora.
* doc/C/refmanual/extensions/extensions.xml: Use <emphasis>
instead of <code>, as <code> doesn't appear to be supported on
Fedora.
* doc/C/Makefile.am: For the perl based version of the docbook
tools, pipe directly through makeinfo to avoid file name
transformation problems.
* doc/C/Makefile.am: Print warning when linking to preformatted
versions that they may be out of date. Change path to
preformatted
versions.
* packaging/doc: Moved to doc/C/preformatted.
* doc/C/preformatted: Moved from packaging/doc, this location
makes more sense, and is simpler.
* doc/C/usermanual.bugreport.xml: Move file up one directory so
it
can be shared.
* doc/C/usermanual/glossary.xml, gnashrc.xml, installation.xml,
usage.xml: Cleanup bad internal links. Drop "colspec" from
tables
as it causes too many warnings, hiding other problems.
* doc/C/refmanual/building.xml, code_dependencies.xml,
configuration.xml, custompath_configuration.xml,
documentation_dependencies.xml, feature_configuration.xml,
install.xml, internals.xml, testing_dependencies.xml: Cleanup
bad
internal links. Drop "colspec" from tables as it causes too many
warnings, hiding other problems.
* doc/C/gnashuser.xml: Change path to bugreport.
* doc/C/gnashref.xml: Include bugreport.
* doc/C/Makefile.am: Tweak dependencies more to deal with all
the
weird variations of docbook utils and docbook2X between
platforms.
* packaging/deb.am: Add snapshot-deb target.
* testsuite/misc-ming.all/Makefile.am: Add BOOST_CFLAGS for
older
compilers.
* doc/C/refmanual/logging.xml: Add new log_*() functions. Mark
C++
streaming API as discouraged.
* doc/C/Makefile.am: Add extra dependencies for the gnash
reference manual, now that it's back to life.
* doc/C/appendix.xml: Don't include RTMP chapter here.
* doc/C/refmanual/codestyle.xml: Don't include RTMP chapter
here. Drop useless opcode section.
* doc/C/gnashref.xml: Rearrange top level chapters.
* doc/C/refmanual/configuration.xml: Don't include
featureoptions
or custompath here anymore.
* doc/C/refmanual/internals.xml: Update to match reality. Add
new
utilities.
* doc/C/refmanual/new_as_class.xml: Include asvaluie section
here
too.
* doc/C/refmanual/building.xml, code_dependencies.xml,
configuration.xml, cross_compiling.xml,
custompath_configuration.xml, documentation_dependencies.xml,
feature_configuration.xml, testing_dependencies.xml: Updated to
match reality.
* doc/C/refmanual/new_as_class.xml: changes to a chapter. Merge
main.xml into body. Include as_value.xml from here.
* doc/C/refmanual/as_value.xml: Make a sect1 for new_as_class.
* doc/C/Makefile.am: Tweak dependencies for the info files, as
they go through a name transformation, which is unfortunately
different between Ubuntu and Fedora. Additional tweaks for
Ubuntu
Hardy, the .texi names don't get transformed during this step
for
this version of the docbook tools.
* doc/C/Makefile.am: Link to the preformatted info file, which
is
messy because of the name transformation.
* configure.ac: Always Define Docbook Conditionals or make
fails.
* packaging/gnash_ref.info.in, gnash_user.info.in,
gnashuser.html.in gnashuser.ref.in: Preformatted versions of
the docs.
* doc/C/usermanual/usage, installation, actionscript: Move to
reference manual.
* macros/docbook.m4: Look for install-info program too, which we
need to add entries to the system wide info 'dirs' file.
* doc/C/gnashref.xml: New reference manual top level page. This
contains much of what was in the old manual.
* asspec/*: Move to BackLash directory.
* doc/C/Makefile.am: don't list asspec files. Add directory for
installing html file. Add separate variables for the user manual
and the reference manual. Get rid of the useless
entities. variable. Drop include xmlmake and omfmake, fix tghe
rules and move them to the main Makefile. Fix info target so
they
actually build correctly, and install in the dirs file. Install
and uninstall all the docs produced. Comment out GNOME help
support for now.
* doc/omf.make, xmldocs.make: Don't use anymore.
* doc/C/usermanual: Rewritten.
* usermanual/introduction.xml, /doc_authors.xml: Moved up one
directory so it can be shared with the reference manual.
* doc/C/usermanual/gtkext.xml, internals.xml, logging.xml,
mysqlext.xml, object.xml, opcodes.xml, plugin.xml, rtmp.xml,
sources.xml: Move to reference manual.
* doc/C/refmanual/amf.xml, internals.xml, memory.xml,
plugin.xml,
sources.xml, as_value.xml, logging.xml, new_as_class.xml,
revisions.xml, codestyle.xml, main.xml, object.xml, rtmp.xml:
Moved from the user manual and top level.
* doc/C/asspec/*: All files moved to BackLash directory.
* doc/backLash/accessibility.xml, array.xml, asspec.xml,
boolean.xml, button.xml, camera.xml, color.xml, contextmenu.xml,
customactions.xml, date.xml, error.xml, fdl-appendix.xml,
function.xml, key.xml, legal.xml, loadvars.xml,
localconnection.xml, math.xml, microphone.xml, mouse.xml,
movieclip.xml, moviecliploader.xml, netconnection.xml,
netstream.xml, number.xml, selection.xml,
sharedobject.xml,sound.xml, stage.xml, string.xml, system.xml,
textfield.xml, textformat.xml, textsnapshot.xml, video.xml,
xml.xml, xmlnode.xml, xmlsocket.xml: Move from asspec directory.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5711.2.43&r2=1.5711.2.44
http://cvs.savannah.gnu.org/viewcvs/gnash/Makefile.am?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.103.2.2&r2=1.103.2.3
http://cvs.savannah.gnu.org/viewcvs/gnash/TODO?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.12.8.1&r2=1.12.8.2
http://cvs.savannah.gnu.org/viewcvs/gnash/configure.ac?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.479.2.6&r2=1.479.2.7
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/Makefile.am?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.48&r2=1.48.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/appendix.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.12&r2=1.12.10.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/fdl-appendix.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.6&r2=1.6.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/sources.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.46&r2=1.46.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/actionscript/as_value.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/actionscript/main.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/actionscript/new_as_class.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/.cvsignore?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/Makefile.am?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/accessibility.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/array.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/asspec-C.omf?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/asspec.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/boolean.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/button.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/camera.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/color.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/contextmenu.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/customactions.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/date.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/error.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/fdl-appendix.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/function.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/key.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/legal.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/loadvars.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/localconnection.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/math.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/microphone.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/mouse.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/movieclip.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/moviecliploader.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/netconnection.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/netstream.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/number.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/selection.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/sharedobject.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/sound.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/stage.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/string.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/system.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/textfield.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/textformat.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/textsnapshot.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/video.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/xml.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/xmlnode.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/asspec/xmlsocket.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/cygnal.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/dumpshm.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnash.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnash_ref.html.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnash_ref.info.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnash_user.html.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnash_user.info.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnashref.html.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnashuser.html.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gnashuser.ref.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/gprocessor.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/preformatted/soldumper.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/amf.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/as_value.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/building.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.4.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/code_dependencies.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.4.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/codestyle.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/configuration.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.5.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/cross_compiling.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.3.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/custompath_configuration.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.3.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/documentation_dependencies.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.3.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/feature_configuration.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.3.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/install.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.4.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/internals.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.6.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/logging.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/memory.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/new_as_class.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.3.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/object.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/plugin.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.3.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/revisions.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/rtmp.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/sources.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.2.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/testing_dependencies.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.3.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/extensions/extensions.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.3.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/extensions/fileext.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/extensions/gtkext.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/refmanual/extensions/mysqlext.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&rev=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/acknowledgments.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=1.1.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/glossary.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5.2.1&r2=1.5.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.6&r2=1.6.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/revisions.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.4&r2=1.4.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/specification.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5&r2=1.5.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/usage.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.9&r2=1.9.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/bugreport.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/doc_authors.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/introduction.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/building.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/code_dependencies.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/configuration.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.7.2.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/cross_compiling.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/custompath_configuration.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.9&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/documentation_dependencies.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.4&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/feature_configuration.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.17.2.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/install.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.6&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/packagemanager.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/sources.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/installation/testing_dependencies.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.3&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/doc/C/usermanual/usage/gnashrc.xml?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.18&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/macros/docbook.m4?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.27.2.1&r2=1.27.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/Makefile.am?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1.2.1&r2=1.1.2.2
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/bsd.am?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=1.1.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/deb.am?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=1.1.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/snapshot.am?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5&r2=1.5.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/debian/changelog?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.5&r2=1.5.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/debian/control?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.6&r2=1.6.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/debian/copyright?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.2&r2=1.2.4.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/debian/docs?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=1.1.10.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/debian/gnash.install?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=1.1.10.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/debian/rules?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.3&r2=1.3.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/.cvsignore?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1.2.2&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/Makefile.am?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1.2.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/actionscript.html.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/actionscript.info.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/cygnal.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/dumpshm.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/gnash.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/gnash.html.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/gnash.info.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1.2.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/gprocessor.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/doc/soldumper.1.in?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnash/packaging/redhat/gnash.spec?cvsroot=gnash&only_with_tag=release_0_8_2_rc1&r1=1.19&r2=1.19.2.1
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5711.2.43
retrieving revision 1.5711.2.44
diff -u -b -r1.5711.2.43 -r1.5711.2.44
--- ChangeLog 3 Mar 2008 18:25:23 -0000 1.5711.2.43
+++ ChangeLog 3 Mar 2008 23:46:35 -0000 1.5711.2.44
@@ -1,3 +1,132 @@
+2008-03-03 Rob Savoye <address@hidden>
+
+ * Makefile.am: Add packaging files to EXTRA_DIST. Drop the
+ dist-hook.
+ * packaging/debian: Minor changes to start working with HEAD.
+ * packaging/deb.am: Copy the debian packaging files from the
+ source tree to the snapshot directory do dpkg-buildpackage can
+ find them.
+ * packaging/redhat/gnash.spec: Update for current layout.
+ * configure.ac: Add a --disable-testsuite option for package
+ builders. This spends builds up, and we already tested Gnash
+ before packaging, right ?
+ * Makefile.am: Always include testsuite directory, but don't add it
+ to SUBDIRS. Install the packaging files.
+ * doc/C/Makefile.am: Add some extra dependencies to keep distcheck
+ happy.
+ * testsuite/samples/Makefile.am: Add AGG_LIBS.
+ * doc/C/Makefile.am: Tweak how images get installed so distcheck
+ is happy.
+ * po/fi.po: Finish translation by Timo Jyrinki.
+ * po/Makefile.am: Build finish translation.
+ * doc/C/preformatted: Update.
+ * doc/C/Makefile.am: Furthur tweaking of the .xml.texi rule so it
+ works with versions to correctly produce both info files. On
+ Fedora, it kept only creating gnash_user.info. Fix install rule to
+ deal with multiple versions of install-info. Add --dir-file= when
+ removing entries.
+ * doc/C/refmanual/internals.xml: Use <emphasis> instead of <code>,
+ as <code> doesn't appear to be supported on Fedora.
+ * doc/C/refmanual/extensions/extensions.xml: Use <emphasis>
+ instead of <code>, as <code> doesn't appear to be supported on
+ Fedora.
+ * doc/C/Makefile.am: For the perl based version of the docbook
+ tools, pipe directly through makeinfo to avoid file name
+ transformation problems.
+ * doc/C/Makefile.am: Print warning when linking to preformatted
+ versions that they may be out of date. Change path to preformatted
+ versions.
+ * packaging/doc: Moved to doc/C/preformatted.
+ * doc/C/preformatted: Moved from packaging/doc, this location
+ makes more sense, and is simpler.
+ * doc/C/usermanual.bugreport.xml: Move file up one directory so it
+ can be shared.
+ * doc/C/usermanual/glossary.xml, gnashrc.xml, installation.xml,
+ usage.xml: Cleanup bad internal links. Drop "colspec" from tables
+ as it causes too many warnings, hiding other problems.
+ * doc/C/refmanual/building.xml, code_dependencies.xml,
+ configuration.xml, custompath_configuration.xml,
+ documentation_dependencies.xml, feature_configuration.xml,
+ install.xml, internals.xml, testing_dependencies.xml: Cleanup bad
+ internal links. Drop "colspec" from tables as it causes too many
+ warnings, hiding other problems.
+ * doc/C/gnashuser.xml: Change path to bugreport.
+ * doc/C/gnashref.xml: Include bugreport.
+ * doc/C/Makefile.am: Tweak dependencies more to deal with all the
+ weird variations of docbook utils and docbook2X between platforms.
+ * packaging/deb.am: Add snapshot-deb target.
+ * testsuite/misc-ming.all/Makefile.am: Add BOOST_CFLAGS for older
+ compilers.
+ * doc/C/refmanual/logging.xml: Add new log_*() functions. Mark C++
+ streaming API as discouraged.
+ * doc/C/Makefile.am: Add extra dependencies for the gnash
+ reference manual, now that it's back to life.
+ * doc/C/appendix.xml: Don't include RTMP chapter here.
+ * doc/C/refmanual/codestyle.xml: Don't include RTMP chapter
+ here. Drop useless opcode section.
+ * doc/C/gnashref.xml: Rearrange top level chapters.
+ * doc/C/refmanual/configuration.xml: Don't include featureoptions
+ or custompath here anymore.
+ * doc/C/refmanual/internals.xml: Update to match reality. Add new
+ utilities.
+ * doc/C/refmanual/new_as_class.xml: Include asvaluie section here
+ too.
+ * doc/C/refmanual/building.xml, code_dependencies.xml,
+ configuration.xml, cross_compiling.xml,
+ custompath_configuration.xml, documentation_dependencies.xml,
+ feature_configuration.xml, testing_dependencies.xml: Updated to
+ match reality.
+ * doc/C/refmanual/new_as_class.xml: changes to a chapter. Merge
+ main.xml into body. Include as_value.xml from here.
+ * doc/C/refmanual/as_value.xml: Make a sect1 for new_as_class.
+ * doc/C/Makefile.am: Tweak dependencies for the info files, as
+ they go through a name transformation, which is unfortunately
+ different between Ubuntu and Fedora. Additional tweaks for Ubuntu
+ Hardy, the .texi names don't get transformed during this step for
+ this version of the docbook tools.
+ * doc/C/Makefile.am: Link to the preformatted info file, which is
+ messy because of the name transformation.
+ * configure.ac: Always Define Docbook Conditionals or make fails.
+ * packaging/gnash_ref.info.in, gnash_user.info.in,
+ gnashuser.html.in gnashuser.ref.in: Preformatted versions of the docs.
+ * doc/C/usermanual/usage, installation, actionscript: Move to
+ reference manual.
+ * macros/docbook.m4: Look for install-info program too, which we
+ need to add entries to the system wide info 'dirs' file.
+ * doc/C/gnashref.xml: New reference manual top level page. This
+ contains much of what was in the old manual.
+ * asspec/*: Move to BackLash directory.
+ * doc/C/Makefile.am: don't list asspec files. Add directory for
+ installing html file. Add separate variables for the user manual
+ and the reference manual. Get rid of the useless
+ entities. variable. Drop include xmlmake and omfmake, fix tghe
+ rules and move them to the main Makefile. Fix info target so they
+ actually build correctly, and install in the dirs file. Install
+ and uninstall all the docs produced. Comment out GNOME help
+ support for now.
+ * doc/omf.make, xmldocs.make: Don't use anymore.
+ * doc/C/usermanual: Rewritten.
+ * usermanual/introduction.xml, /doc_authors.xml: Moved up one
+ directory so it can be shared with the reference manual.
+ * doc/C/usermanual/gtkext.xml, internals.xml, logging.xml,
+ mysqlext.xml, object.xml, opcodes.xml, plugin.xml, rtmp.xml,
+ sources.xml: Move to reference manual.
+ * doc/C/refmanual/amf.xml, internals.xml, memory.xml, plugin.xml,
+ sources.xml, as_value.xml, logging.xml, new_as_class.xml,
+ revisions.xml, codestyle.xml, main.xml, object.xml, rtmp.xml:
+ Moved from the user manual and top level.
+ * doc/C/asspec/*: All files moved to BackLash directory.
+ * doc/backLash/accessibility.xml, array.xml, asspec.xml,
+ boolean.xml, button.xml, camera.xml, color.xml, contextmenu.xml,
+ customactions.xml, date.xml, error.xml, fdl-appendix.xml,
+ function.xml, key.xml, legal.xml, loadvars.xml,
+ localconnection.xml, math.xml, microphone.xml, mouse.xml,
+ movieclip.xml, moviecliploader.xml, netconnection.xml,
+ netstream.xml, number.xml, selection.xml,
+ sharedobject.xml,sound.xml, stage.xml, string.xml, system.xml,
+ textfield.xml, textformat.xml, textsnapshot.xml, video.xml,
+ xml.xml, xmlnode.xml, xmlsocket.xml: Move from asspec directory.
+
2008-03-03 Sandro Santilli <address@hidden>
* server/parser/sprite_definition.{cpp,h}: delegate
Index: Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/Makefile.am,v
retrieving revision 1.103.2.2
retrieving revision 1.103.2.3
diff -u -b -r1.103.2.2 -r1.103.2.3
--- Makefile.am 22 Feb 2008 08:01:00 -0000 1.103.2.2
+++ Makefile.am 3 Mar 2008 23:46:37 -0000 1.103.2.3
@@ -52,20 +52,19 @@
gui \
plugin \
pythonmodule \
- testsuite \
doc \
po \
$(NULL)
if CYGNAL
-CYGNAL_DIRS = cygnal
+CYGNAL_DIR = cygnal
endif
-# if DOCBOOK
-# DOC_DIRS = doc
-# endif
+SUBDIRS = $(STD_DIRS) $(CYGNAL_DIR)
-SUBDIRS = $(STD_DIRS) $(CYGNAL_DIRS) $(DOC_DIRS)
+if TESTSUITE
+SUBDIRS += testsuite
+endif
if BUILD_EXTENSIONS
SUBDIRS += extensions
@@ -73,15 +72,25 @@
# man_MANS = doc/gnash.1 doc/gprocessor.1 doc/dumpshm.1 soldumper.1
-DIST_SUBDIRS = $(STD_DIRS) cygnal extensions packaging
+DIST_SUBDIRS = $(STD_DIRS) cygnal extensions testsuite
EXTRA_DIST = autogen.sh \
config.rpath \
macros/incllist macros/libslist \
- ChangeLog-0.8.0 ChangeLog-0.8.1
+ ChangeLog-0.8.0 ChangeLog-0.8.1 \
+ packaging/deb.am \
+ packaging/snapshot.am \
+ packaging/alp.am \
+ packaging/ipkg.am
+ packaging/bsd.am \
+ packaging/rpm.am
noinst_HEADERS = compatibility_include.h
+# dist-hook:
+# @test -d "$(distdir)/packaging" || $(mkinstalldirs)
"$(distdir)/packaging"
+# cp -p $(srcdir)/*.am $(top_distdir)/packaging/
+
#
# Build an RPM package
#
@@ -313,10 +322,12 @@
@echo " NPAPI (Mozilla) plugin disabled"
endif
+if TESTSUITE
check: check-recursive anal
anal testreport checksum:
$(srcdir)/testsuite/anaylse-results.sh
+endif
.PHONY : dumpconfig \
anal \
Index: TODO
===================================================================
RCS file: /sources/gnash/gnash/TODO,v
retrieving revision 1.12.8.1
retrieving revision 1.12.8.2
diff -u -b -r1.12.8.1 -r1.12.8.2
--- TODO 21 Feb 2008 18:27:02 -0000 1.12.8.1
+++ TODO 3 Mar 2008 23:46:37 -0000 1.12.8.2
@@ -1,36 +1,73 @@
TODO: (not really in order of priorities)
- - SWF9 ABC blocks interpreter
- - Performance improvements, and reducing the footprint.
- - Implement all the missing functionality.
- - Flesh out the testsuite to be a decent Flash conformance test suites.
- - Add support for external loading of png
- - SVG support ?
- - Keep improving the plugin (POST requests)
+ 1. Add support for sound and audio using MP3 and FLV at first, but
+ also supporting free formats like Ogg, Flac, and Theora.
+ 2. SWF 8 and greater support. This appears to be mostly adding a few
+ opcodes.
+ 3. Performance improvements, and reducing the footprint.
+ 4. Custom ActionScript plugins (think MySQL support in Flash).
+ 5. Implement all the missing functionality.
+ 6. Flesh out the testsuite to be a decent Flash conformance test suites.
+ 7. Add support for external loading of media.
+ 8. SVG support ?
+ 9. Keep improving the plugin (+ add GTK1 support).
Unimplemented opcodes:
----------------------
case 0x08: // toggle quality
-<others>
+case 0x2A: // throw
+case 0x2B: // cast_object (actually implemented, but untested)
+case 0x2C: // implements
+case 0x31: // mb length
+case 0x35: // mb substring
+case 0x37: // mb chr
+case 0x43: // declare object
+case 0x45: // get target
+case 0x69: // extends
+case 0x8F: // try
+
+Partially implemented classes are:
+----------------------------------
+
+MovieClipLoader
+NetConnection,
+LocalConnection
+MovieClip
+TextField
+TextFormat
+Object (generalied and exported valueOf, toString)
Unimplemented classes are:
------------------------------------------------------
-TextFormat
+--------------------------
Accessibility
Error
+Function
+LoadVars,
Microphone
+NetStream
Selection
+SharedObject
+Stage
+System
+Button,
Camera
Color
ContextMenu
CustomActions
+Video
+
+Partially implemented functions are:
+------------------------------------
+
+ASSetPropFlags (doesn't accept properties as comma-separated list string)
Others
------
-There is currently no loading of external png files.
+There is currently no FLV video, only minimal AMF data support,
+and no loading of external jpegs.
If you would like to contribute to Gnash's development, please
subscribe to the developers list at
Index: configure.ac
===================================================================
RCS file: /sources/gnash/gnash/configure.ac,v
retrieving revision 1.479.2.6
retrieving revision 1.479.2.7
diff -u -b -r1.479.2.6 -r1.479.2.7
--- configure.ac 28 Feb 2008 16:26:09 -0000 1.479.2.6
+++ configure.ac 3 Mar 2008 23:46:37 -0000 1.479.2.7
@@ -16,7 +16,7 @@
dnl
AC_PREREQ(2.50)
-AC_INIT(gnash, 0.8.2)
+AC_INIT(gnash, cvs)
AC_CONFIG_SRCDIR(server/gnash.h)
AM_CONFIG_HEADER(gnashconfig.h)
@@ -34,7 +34,6 @@
AC_PROG_INSTALL
AM_COMPILER_LIB
-
dnl Set the default values for Flash Version. These are converted into
dnl various strings to make JavaScript or ActionScript detectors
dnl recognize Gnash as a Flash Player.
@@ -286,6 +285,24 @@
fi
AM_CONDITIONAL(MENUS, test x$menus = xyes)
+dnl Disable running any tests for "make check". This may sound stupid, but
+dnl this option is designed to soley be used by maintainers in the
+dnl DISTCHECK_CONFIGURE_FLAGS when building packages. Gnash's testing
infrastructure
+dnl is complex, and often the the testsuites will work, but due to some
obscure reason,
+dnl make distcheck fails.
+AC_ARG_ENABLE(testsuite,
+ AC_HELP_STRING([--disable-testsuite],[Disable the testsuite, maintainers
option only]),
+[case "${enableval}" in
+ yes) testsuite=yes ;;
+ no) testsuite=no ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --disable-testsuite option]) ;;
+esac],testsuite=yes)
+
+if test x"$testsuite" = x"yes"; then
+ AC_DEFINE([USE_TESTSUITE], [], [Testsuite support, maintainers option only])
+fi
+AM_CONDITIONAL(TESTSUITE, test x$testsuite = xyes)
+
dnl -- dnl Enable building the gui support even when statically
dnl -- dnl linking. Normally this is only disabled when building a statically
dnl -- dnl linked gnash executable.
@@ -875,6 +892,14 @@
if test x$cross_compiling = xyes; then
AC_MSG_NOTICE([Configuring Gnash for cross compilation])
export pkgroot="`$CXX -print-search-dirs | grep "install:" | sed -e
's/install: //' -e 's:/lib/gcc/.*::'`"
+ dnl pkgroot only works correctly with builds of cross tools not in
+ dnl /usr, ie... installed from the distribution packages, or just
+ dnl plain installed in the system tools. This contaminates configure
+ dnl when building for variations of the same basic architecture,
+ dnl like i686-linux -> i586-mingw32.
+ if test x${pkgroot} = "/usr"; then
+ export pkgroot=""
+ fi
export incllist="`eval echo ${with_top_level}/include
${pkgroot}/${host_alias}/include ${pkgroot}/include`"
export libslist="`eval echo ${with_top_level}/lib
${pkgroot}/${host_alias}/lib ${pkgroot}/lib64 ${pkgroot}/lib32 ${pkgroot}/lib`"
export pathlist="`eval echo ${pkgroot}/${host_alias}/bin:${pkgroot}/bin`"
@@ -1573,6 +1598,7 @@
fi
+
if test x$build_cairo = xyes; then
GNASH_PKG_FIND(cairo, [cairo.h], [cairo render library], cairo_status)
dnl if test x"${CAIRO_CFLAGS}" != x; then
@@ -1629,7 +1655,15 @@
fi
GNASH_DOCBOOK
+AM_CONDITIONAL(ENABLE_INFO, test x${INSTALL_INFO} != x)
AM_CONDITIONAL(DOCBOOK, test x$docbook = xyes)
+AM_CONDITIONAL(ENABLE_TEXI, [ test x"$DB2X_TEXI" != x -o x"$DB2X_TEXIXML" != x
])
+AM_CONDITIONAL(ENABLE_PDF, [ test x"$DB2X_PDF" ])
+AM_CONDITIONAL(ENABLE_HTML, [ test x"$XSLTPROC" != x -a x"$docbook_styles" !=
x ])
+AM_CONDITIONAL(ENABLE_FOP, [ test x"$FOP" != x -a x"$docbook_styles" != x ])
+AM_CONDITIONAL(ENABLE_XMLTEX, [ test x"$PDFXMLTEX" != x -a x"$XSLTPROC" != x
-a x"$docbook_styles" != x ])
+dnl AM_CONDITIONAL(ENABLE_DBLATEX, [ test x"$DBLATEX" != x ])
+AM_CONDITIONAL(ENABLE_MAN, [ test x"$DB2X_MAN" != x -o x"$DB2X_MANXML" != x ])
AM_CONDITIONAL(HAVE_AGG, [test x"${AGG_LIBS}" != x])
GNASH_PATH_CURL
@@ -1898,11 +1932,6 @@
cygnal/Makefile
cygnal/testsuite/Makefile
cygnal/testsuite/cygnal.all/Makefile
-packaging/Makefile
-packaging/debian/Makefile
-packaging/redhat/Makefile
-packaging/ipkg/Makefile
-packaging/doc/Makefile
)
###
Index: doc/C/Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/doc/C/Makefile.am,v
retrieving revision 1.48
retrieving revision 1.48.2.1
diff -u -b -r1.48 -r1.48.2.1
--- doc/C/Makefile.am 20 Feb 2008 05:16:19 -0000 1.48
+++ doc/C/Makefile.am 3 Mar 2008 23:46:38 -0000 1.48.2.1
@@ -17,129 +17,117 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# Building a PDF using Apache FOP only works with fop-0.20.5 for now.
-include $(top_srcdir)/doc/xmldocs.make
-SUBDIRS = # asspec
+htmldir = ${prefix}/share/doc/gnash
infodir = ${prefix}/share/info
-figdir = images
docname = gnash
lang = C
omffile = gnash-C.omf
-entities = \
- internals.xml \
- amf.xml \
- appendix.xml \
- debugger.xml \
- extensions.xml \
- fdl-appendix.xml \
- fileext.xml \
- gtkext.xml \
- mysqlext.xml \
- object.xml \
- opcodes.xml \
- plugin.xml \
- rtmp.xml \
- app_authors.xml \
- conformance.xml \
- gpl-appendix.xml \
+
+docdir = $(datadir)/$(PACKAGE)/doc/$(docname)/$(lang)
+omf_dest_dir=$(datadir)/omf/$(PACKAGE)
+scrollkeeper_localstate_dir = $(localstatedir)/scrollkeeper
+
+# These are the top level files for each manual.
+XML_MAIN = \
+ gnashuser.xml \
+ gnashref.xml
+
+# These are the files needed to build the Gnash user
+# manual.
+COMMON = \
+ introduction.xml \
+ security.xml \
legal.xml \
- logging.xml \
- actionscript/main.xml \
- actionscript/as_value.xml \
- actionscript/new_as_class.xml \
- asspec/accessibility.xml \
- asspec/array.xml \
- asspec/asspec.xml \
- asspec/boolean.xml \
- asspec/button.xml \
- asspec/camera.xml \
- asspec/color.xml \
- asspec/contextmenu.xml \
- asspec/customactions.xml \
- asspec/date.xml \
- asspec/error.xml \
- asspec/fdl-appendix.xml \
- asspec/function.xml \
- asspec/key.xml \
- asspec/legal.xml \
- asspec/loadvars.xml \
- asspec/localconnection.xml \
- asspec/math.xml \
- asspec/microphone.xml \
- asspec/mouse.xml \
- asspec/movieclip.xml \
- asspec/moviecliploader.xml \
- asspec/netconnection.xml \
- asspec/netstream.xml \
- asspec/number.xml \
- asspec/selection.xml \
- asspec/sharedobject.xml \
- asspec/sound.xml \
- asspec/stage.xml \
- asspec/string.xml \
- asspec/system.xml \
- asspec/textfield.xml \
- asspec/textformat.xml \
- asspec/textsnapshot.xml \
- asspec/video.xml \
- asspec/xml.xml \
- asspec/xmlnode.xml \
- asspec/xmlsocket.xml \
- usermanual/installation/code_dependencies.xml \
- usermanual/installation/configuration.xml \
- usermanual/installation/custompath_configuration.xml \
- usermanual/installation/documentation_dependencies.xml \
- usermanual/installation/feature_configuration.xml \
- usermanual/installation/packagemanager.xml \
- usermanual/installation/sources.xml \
- usermanual/installation/testing_dependencies.xml \
- usermanual/installation/cross_compiling.xml \
- usermanual/installation/building.xml \
- usermanual/installation/install.xml \
- usermanual/doc_authors.xml \
+ gpl-appendix.xml \
+ app_authors.xml \
+ doc_authors.xml \
+ fdl-appendix.xml \
+ bugreport.xml
+
+USERMAN = \
+ $(COMMON) \
usermanual/installation.xml \
- usermanual/introduction.xml \
usermanual/revisions.xml \
usermanual/usage.xml \
- usermanual/usage/gnashrc.xml \
- usermanual/bugreport.xml \
+ usermanual/gnashrc.xml \
usermanual/acknowledgments.xml \
- usermanual/conventions.xml \
- $(NULL)
+ usermanual/conventions.xml
+
+# These are the files needed to build the Gnash reference
+# manual.
+REFMAN = \
+ $(COMMON) \
+ refmanual/code_dependencies.xml \
+ refmanual/configuration.xml \
+ refmanual/custompath_configuration.xml \
+ refmanual/documentation_dependencies.xml \
+ refmanual/feature_configuration.xml \
+ refmanual/sources.xml \
+ refmanual/testing_dependencies.xml \
+ refmanual/cross_compiling.xml \
+ refmanual/building.xml \
+ refmanual/install.xml \
+ refmanual/codestyle.xml
+# refmanual/packagemanager.xml
-xml_files = $(docname).xml actionscript.xml
+
+EXTRA_DIST = \
+ preformatted \
+ usermanual \
+ refmanual \
+ $(COMMON) \
+ $(XML_MAIN) \
+ $(dist_man_MANS) \
+ $(MANSRC) \
+ $(XML_MAIN:.xml=.html) \
+ $(XML_MAIN:.xml=.info)
#noinst_SCRIPT = gen-doc.sh
+# We list the texi and info pages twice, as differing versions of the
+# docbook-utils transform the name at different steps in the process.
+# This is an easy way to handle it either way, since we only need it as
+# dependency anyway.
dist_man_MANS = gnash.1 gprocessor.1 dumpshm.1 soldumper.1 cygnal.1
MANSRC = $(dist_man_MANS:.1=.man-xml)
-
-# dist_html_DATA = gnash.html actionscript.html
-# dist_info_DATA = gnash.info actionscript.info
-
-html: links gnash.html actionscript.html
-pdf: links gnash.pdf actionscript.pdf
+INFOS = gnash_user.info gnash_ref.info
+HTMLS = $(XML_MAIN:.xml=.html)
+PDFS = $(XML_MAIN:.xml=.pdf)
+TEXIS = gnash_user.texi gnashuser.texi gnash_ref.texi gnashref.texi
+
+all-local: info html man
+
+gnashuser.html gnashuser.pdf gnash_user.info gnashuser.info: gnashuser.xml
$(USERMAN)
+gnashref.html gnashref.pdf gnash_ref.info gnashref.info: gnashref.xml $(REFMAN)
+
+# Convienience rules for developers of these manuals. By default
+# all output formats are built if the Docbook tools are installed
+# and working correctly.
+html: $(HTMLS)
+pdf: $(PDFS)
man: $(dist_man_MANS)
-texi: gnash.texi actionscript.texi
-info: links gnash.info actionscript.info
-gnash.pdf gnash.html gnash.texi: links $(xml_files) $(entities)
-actionscript.pdf actionscript.html actionscript.texi: actionscript.xml
actionscript/main.xml actionscript/as_value.xml actionscript/new_as_class.xml
+info: $(INFOS)
+texi: $(TEXIS)
-SUFFIXES = .xml .html .texi .pdf .info .1 .fo .man-xml
-
-EXTRA_DIST = \
- $(xml_files) \
- $(entities) \
- $(omffile) \
- $(dist_man_MANS) \
- $(MANSRC) \
- actionscript.info \
- gnash.info \
- actionscript.html \
- gnash.html
+#
+# Gnash uses suffix rules to build all the various supported
+# output formats. This section contains all the code that does
+# the document convesion from docbook to whatever. Note that
+# all of these are conditional, as the tools may not be
+# installed on all systems, and on some systems, getting a fully
+# working Docbook tools system can problematic. In this case
+# preformatted versions are in the top level packaging/doc
+# directory, so we just link to them so they can be installed.
+# While it's a bit of a pain in the neck for developers to
+# keep the preformatted versions up to date, it's much easier
+# for end users because the documentation in xml, html, and info
+# formats is always available.
+#
+SUFFIXES = .xml .html .texi .pdf .info .1 .fo .man-xml .in
if ENABLE_FOP
.xml.pdf:
- $(FOP) -xsl $(docbook_styles)/fo/docbook.xsl -xml $< -pdf $@
+ -$(FOP) -xsl $(docbook_styles)/fo/docbook.xsl -xml $< -pdf $@
else
if ENABLE_XMLTEX
.xml.fo:
@@ -156,43 +144,39 @@
.xml.html:
if ENABLE_HTML
- $(XSLTPROC) --output $@ --nonet $(docbook_styles)/html/docbook.xsl $<
+ -$(XSLTPROC) --output $@ --nonet $(docbook_styles)/html/docbook.xsl $<
@$(RM) $*.txml
else
- @if test -d $(top_srcdir)/packaging/doc; then \
- $(LN_S) -f $(top_srcdir)/packaging/doc/address@hidden ./$@; \
+ @if test -d $(srcdir)/preformatted; then \
+ echo "WARNING: Linking to preformatted version of $@, it could be out
of date."; \
+ $(LN_S) -f $(srcdir)/preformatted/address@hidden ./$@; \
else \
touch $@; \
fi
endif
-# basefile=$(notdir $(basename $<));
+# The first test seems to be the default for Fedora/Redhat/Centos based
distributions,
+# which use a wrapper script for jade.
+# Ubuntu/Debian uses a real perl script that actually does the real work
.xml.texi:
if ENABLE_TEXI
-if test x$(DB2X_TEXI) != x; then \
- $(DB2X_TEXI) --encoding=us-ascii//TRANSLIT $< ; \
+ out=`echo $* | sed -e 's:gnash:gnash_:'`; \
+ $(DB2X_TEXI) --encoding=us-ascii//TRANSLIT --string-param
directory-description="Gnash" --string-param output-file=$${out} $<; \
+ $(MAKEINFO) --force $${out}.texi; \
else \
basefile="$*"; \
$(DB2X_XSLTPROC) -s texi $< --output $${basefile}.txml; \
- if test x"$(DB2X_VERSION)" = x"0.8.5" -o x"$(DB2X_VERSION)" =
x"0.8.7"; then \
- $(DB2X_TEXIXML) --encoding=us-ascii//TRANSLIT $${basefile}.txml; \
- sed -e "s/setfilename $${basefile}_.*\.info/setfilename
$${basefile}.info/" $${basefile}_*.texi > $${basefile}.texi ; \
- else \
- $(DB2X_TEXIXML) --encoding=us-ascii//TRANSLIT --to-stdout
$${basefile}.txml > $${basefile}.texi ; \
- fi; \
+ $(DB2X_TEXIXML) --info --encoding=us-ascii//TRANSLIT
$${basefile}.txml ; \
+ rm $${basefile}.txml; \
fi
endif
.texi.info:
if ENABLE_TEXI
-$(MAKEINFO) --force $<
- $(RM) *.texi
else
- @if test -d $(top_srcdir)/packaging/doc; then \
- $(LN_S) -f $(top_srcdir)/packaging/doc/address@hidden ./$@; \
- else \
- touch $@; \
- fi
+ touch $@;
endif
.man-xml.1:
@@ -205,72 +189,194 @@
$(RM) $*.mxml; \
fi
else
- @if test -d $(top_srcdir)/packaging/doc; then \
- $(LN_S) -f $(top_srcdir)/packaging/doc/address@hidden ./$@; \
+ @if test -d $(srcdir)/preformatted; then \
+ echo "WARNING: Linking to preformatted version of $@, it could be out
of date."; \
+ $(LN_S) -f $(srcdir)/preformatted/address@hidden ./$@; \
else \
touch $@; \
fi
endif
-alldocs: links html pdf man info
+gnash_user.info gnashuser.info: gnashuser.texi
+gnash_ref.info gnashref.info: gnashref.texi
+gnashuser.texi gnash_user.texi: gnashuser.xml
+gnashref.texi gnash_user.texi: gnashref.xml
+if ! DOCBOOK
+gnash_user.info: gnashuser.xml
+ @if test -d $(srcdir)/preformatted; then \
+ echo "WARNING: Linking to preformatted version of $@, it could be out
of date."; \
+ $(LN_S) -f $(srcdir)/preformatted/gnash_user.info.in
./gnash_user.info; \
+ fi
-# When we build in a seperate build tree, we need links to the images
-# subdirectory to have them be included in the final output.
-images:
- @if test ! -d images; then \
- $(LN_S) -f $(srcdir)/images images; \
+gnashuser.info: gnashuser.xml
+ @if test -d $(srcdir)/preformatted; then \
+ echo "WARNING: Linking to preformatted version of $@, it could be out
of date."; \
+ $(LN_S) -f $(srcdir)/preformatted/gnash_user.info.in
./gnashuser.info; \
fi
-# When we build in a seperate build tree, we need links to these
-# additional Docbook source subdirectoriers to have them be included
-# in the final output without error.
-links: images
- @if test ! -d asspec; then \
- $(LN_S) -f $(srcdir)/asspec; \
+gnash_ref.info: gnashref.xml
+ @if test -d $(srcdir)/preformatted; then \
+ echo "WARNING: Linking to preformatted version of $@, it could be out
of date."; \
+ $(LN_S) -f $(srcdir)/preformatted/gnash_ref.info.in ./gnash_ref.info;
\
fi
- @if test ! -d usermanual; then \
- $(LN_S) -f $(srcdir)/usermanual; \
+gnashref.info: gnashref.xml
+ @if test -d $(srcdir)/preformatted; then \
+ echo "WARNING: Linking to preformatted version of $@, it could be out
of date."; \
+ $(LN_S) -f $(srcdir)/preformatted/gnash_ref.info.in ./gnashref.info; \
fi
- @if test ! -d actionscript; then \
- $(LN_S) -f $(srcdir)/actionscript; \
+gnashref.html: gnashref.xml
+ @if test -d $(srcdir)/preformatted; then \
+ echo "WARNING: Linking to preformatted version of $@, it could be out
of date."; \
+ $(LN_S) -f $(srcdir)/preformatted/gnash_ref.html.in ./gnashref.html; \
+ fi
+gnashuser.html: gnashref.xml
+ @if test -d $(srcdir)/preformatted; then \
+ echo "WARNING: Linking to preformatted version of $@, it could be out
of date."; \
+ $(LN_S) -f $(srcdir)/preformatted/gnash_user.html.in
./gnashuser.html; \
+ fi
+endif
+
+# When we build in a seperate build tree, we need links to the images
+# subdirectory to have them be included in the final output.
+# images:
+# @if test ! -d images; then \
+# $(LN_S) -f $(top_srcdir)/doc/C/images images; \
+# fi
+
+lint-user:
+ @xmllint $(srcdir)/gnashuser.xml
+
+lint-ref:
+ @xmllint $(srcdir)/gnashref.xml
+
+# This target adds the images to the dist file, which is
+# produced by the dist-bzip2, dist-gzip, or snapshot targets.
+# distdir is a built in target for Automake.
+dist-hook:
+ test -d "$(distdir)/images/images" || $(mkinstalldirs)
"$(distdir)/images"
+ for file in $(srcdir)/images/*.png $(srcdir)/images/*.txt; do \
+ basefile="`basename $${file}`"; \
+ if test ! -e $(distdir)/images/$${basefile}; then \
+ $(INSTALL_DATA) $$file $(distdir)/images/; \
+ fi; \
+ done
+
+#
+# Installing documentation can be a complex process, as we build
+# multiple output formats. This section contains all of the
+# Makefile targets that are used to install or uninstall the
+# documentation.
+#
+
+install-html-hook: $(HTMLS)
+ @test -d "$(DESTDIR)$(htmldir)" || $(mkinstalldirs)
"$(DESTDIR)$(htmldir)"
+ -$(INSTALL_DATA) gnashuser.html $(DESTDIR)$(htmldir)
+ -$(INSTALL_DATA) gnashref.html $(DESTDIR)$(htmldir)
+ @test -d "$(DESTDIR)$(htmldir)/images" || $(mkinstalldirs)
"$(DESTDIR)$(htmldir)/images"
+ for file in $(srcdir)/images/*.png; do \
+ basefile=`echo $$file | sed -e 's,^.*/,,'`; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(htmldir)/images/$$basefile; \
+ done
+
+# There are two versions of install-info, with unfortunately different options.
+# Rather than test the version at configure time, we do it at runtime instead
+# so we can switch versions at installation time.
+install-info-hook: $(INFOS)
+if ENABLE_INFO
+ @test -d "$(DESTDIR)$(infodir)" || $(mkinstalldirs)
"$(DESTDIR)$(infodir)"
+ -for i in *.info; do \
+ $(INSTALL_DATA) "$$i" $(DESTDIR)$(infodir)/"$$i"; \
+ done; \
+ type="`file $(INSTALL_INFO) | grep -ic " perl " 2>&1`"; \
+ if test $${type} -gt 0; then \
+ $(INSTALL_INFO) --menuentry="\"Gnash User Manual\"" --quiet
--description="\"Gnash User Manual\"" --info-dir=$(DESTDIR)$(infodir)
$(DESTDIR)$(infodir)/gnash_user.info; \
+ $(INSTALL_INFO) --menuentry="\"Gnash Reference Manual\"" --quiet
--description="\"Gnash Reference Manual\"" --info-dir=$(DESTDIR)$(infodir)
$(DESTDIR)$(infodir)/gnash_ref.info; \
+ else \
+ $(INSTALL_INFO) --entry="\"Gnash User Manual: (gnash_user) Gnash
User Manual\"" --info-dir=$(DESTDIR)$(infodir)
$(DESTDIR)$(infodir)/gnash_user.info; \
+ $(INSTALL_INFO) --entry="\"Gnash Reference Manual (gnash_ref) Gnash
Reference Manual\"" --info-dir=$(DESTDIR)$(infodir)
$(DESTDIR)$(infodir)/gnash_ref.info; \
fi
+else
+ echo "Using preformtted output file,"
+ $(LN_S) -f $(srcdir)/preformatted/gnash_user.info.in gnash_user.info
+ $(LN_S) -f $(srcdir)/preformatted/gnash_ref.info.in gnash_ref.info
+endif
+
+uninstall-info-hook:
+if ENABLE_INFO
+ -$(INSTALL_INFO) --dir-file=$(DESTDIR)$(infodir)/dir --remove
$(DESTDIR)$(infodir)/gnash_user.info
+ -$(INSTALL_INFO) --dir-file=$(DESTDIR)$(infodir)/dir --remove
$(DESTDIR)$(infodir)/gnash_ref.info
+endif
+ -$(RM) $(DESTDIR)$(infodir)/gnash_user.info
+ -$(RM) $(DESTDIR)$(infodir)/gnash_ref.info
-lint:
- @xmllint $(srcdir)/gnash.xml
+uninstall-html-hook:
+ -$(RM) $(DESTDIR)$(htmldir)/gnashuser.html
+ -$(RM) $(DESTDIR)$(htmldir)/gnashref.html
+ -$(RM) $(DESTDIR)$(htmldir)/images/*png
+
+# install-data-hook: install-data-hook-omf
+# uninstall-local: uninstall-local-doc uninstall-local-omf
+
+install-data-hook: install-info-hook install-html-hook
+uninstall-hook: uninstall-info-hook uninstall-html-hook
+
+#
+# GNOME Help support, which currently isn't supported
+# by the Gnash GTK GUI.
+#
+
+# if GHELP
+# all-local: omf
+# INSTALL_DATA_HOOK += omf install-data-omf-hook
+# UNINSTALL_HOOK += uninstall-omf-hook
+# endif
+
+omf: omf_timestamp
+
+omf_timestamp: $(omffile)
+ for file in $(omffile); do \
+ $(SCROLLINSTALL) $(docdir)/$(docname).xml $(srcdir)/$$file
$$file.out; \
+ done
+ touch omf_timestamp
+
+install-data-omf-hook:
+ $(mkinstalldirs) $(DESTDIR)$(omf_dest_dir)
+ for file in $(omffile); do \
+ $(INSTALL_DATA) $$file.out $(DESTDIR)$(omf_dest_dir)/$$file; \
+ done
+ -$(SCROLLUPDATE) -v -o $(DESTDIR)$(omf_dest_dir)
+
+uninstall-omf-hook:
+ -for file in $(omffile); do \
+ $(RM) $(DESTDIR)$(omf_dest_dir)/$$file; \
+ done
+ -rmdir $(DESTDIR)$(omf_dest_dir)
+ -$(SCROLLUPDATE) -v
CLEANFILES = \
gnash-C.omf.out \
manpage.links \
manpage.refs \
- gnash.tex \
+ gnash_ref.texi \
+ gnashref.texi \
+ gnash_user.texi \
+ gnashuser.texi \
gnash.fo \
gnash.log \
- *.texi \
- *.txml \
- *.mxml \
+ gnashuser.txml \
+ gnashuser.mxml \
+ gnashref.txml \
+ gnashref.mxml \
omf_timestamp
MAINTAINERCLEANFILES = \
gnash.pdf \
$(MANS) \
- gnash.info \
- gnash.html \
- actionscript.html \
- actionscript.info
+ gnash_user.info \
+ gnash_ref.info \
+ gnashuser.html \
+ gnashref.html
-install-info-hook: gnash.info
- @test -d "$(DESTDIR)$(infodir)" || $(mkinstalldirs)
"$(DESTDIR)$(infodir)"
- $(INSTALL_DATA) $< $(DESTDIR)$(infodir)/gnash.info
- -if (install-info --version) >/dev/null 2>&1; then \
- version=`install-info --version | grep -c 'GNU texinfo'`; \
- if test $$version -eq 0; then \
- install-info --menuentry="Gnash" --description="GNU Flash Player"
--info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/gnash.info >/dev/null
2>&1; \
- else \
- install-info --entry="* Gnash: (gnash). GNU Flash Player"
--info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/gnash.info >/dev/null
2>&1; \
- fi; \
- fi
-
-uninstall-info-hook:
- $(RM) $(DESTDIR)$(infodir)/gnash.info
+# Always execute these targets as they have no real dependencies.
+.PHONY: images install-info-hook uninstall-info-hook install-html-hook
uninstall-html-hook uninstall-data-hook install-data-hook
-.PHONY: images
Index: doc/C/appendix.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/appendix.xml,v
retrieving revision 1.12
retrieving revision 1.12.10.1
diff -u -b -r1.12 -r1.12.10.1
--- doc/C/appendix.xml 4 Dec 2006 19:12:39 -0000 1.12
+++ doc/C/appendix.xml 3 Mar 2008 23:46:38 -0000 1.12.10.1
@@ -122,8 +122,6 @@
</para>
</sect2>
- &rtmp;
-
<!--
<sect2 id="opcodes">
<title>Shockwave Movie Opcodes</title>
Index: doc/C/fdl-appendix.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/fdl-appendix.xml,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -b -r1.6 -r1.6.2.1
--- doc/C/fdl-appendix.xml 20 Feb 2008 11:28:55 -0000 1.6
+++ doc/C/fdl-appendix.xml 3 Mar 2008 23:46:38 -0000 1.6.2.1
@@ -626,34 +626,22 @@
<blockquote>
<para>
- Copyright YEAR YOUR NAME.
+ Copyright 2008, Free Software Foundation.
</para>
<para>
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
License, Version 1.1 or any later version published by the
- Free Software Foundation; with the <link
- linkend="fdl-invariant">Invariant Sections</link> being LIST
- THEIR TITLES, with the <link
- linkend="fdl-cover-texts">Front-Cover Texts</link> being LIST,
- and with the <link linkend="fdl-cover-texts">Back-Cover
- Texts</link> being LIST. A copy of the license is included in
- the section entitled "GNU Free Documentation
- License".
+ Free Software Foundation; with no<link
+ linkend="fdl-invariant">Invariant Sections</link>, with no <link
+ linkend="fdl-cover-texts">Front-Cover Texts</link>,
+ and with no <link linkend="fdl-cover-texts">Back-Cover
+ Texts</link>. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
</para>
</blockquote>
<para>
- If you have no <link linkend="fdl-invariant">Invariant
- Sections</link>, write "with no Invariant Sections"
- instead of saying which ones are invariant. If you have no
- <link linkend="fdl-cover-texts">Front-Cover Texts</link>, write
- "no Front-Cover Texts" instead of
- "Front-Cover Texts being LIST"; likewise for <link
- linkend="fdl-cover-texts">Back-Cover Texts</link>.
- </para>
-
- <para>
If your document contains nontrivial examples of program code,
we recommend releasing these examples in parallel under your
choice of free software license, such as the <ulink type="http"
Index: doc/C/sources.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/sources.xml,v
retrieving revision 1.46
retrieving revision 1.46.2.1
diff -u -b -r1.46 -r1.46.2.1
--- doc/C/sources.xml 20 Feb 2008 05:16:19 -0000 1.46
+++ doc/C/sources.xml 3 Mar 2008 23:46:38 -0000 1.46.2.1
@@ -22,31 +22,17 @@
</para>
<para>
- If you are compiling with GCC you will probably need to use a
- machine with at least 128 megabytes of physical RAM; 64MB is not
- enough for a couple of the files, even with swap enabled and
- optimisation turned off.
- </para>
- <para>
- At present the Gnash source is about 500 MB to extracted and
- configured and requires a total of about 25 megabytes to compile
- it.
- </para>
-<!-- <para> -->
-<!-- Gnash is known to compile for most any POSIX and ANSI C++ -->
-<!-- conforming system if you have all the dependent libraries -->
-<!-- installed. Systems we test on, and which Gnash is know to -->
-<!-- run on are Ubuntu, Fedora, Debian, OpenBSD, NetBSD, FreeBSD, -->
-<!-- Win32, and Darwin (OSX) primarily. Occasionally other platforms -->
-<!-- are built, primarily by those distribution maintainers. This -->
-<!-- includes BeOS, Haiku, Syllable, OS/2, Solaris, Slackware, Gentoo.
-->
-<!-- </para> -->
- <para>
- Continue reading for detailed step-by-step instructions of the
- entire procedure. For Win32 users, you will need to install
- <emphasis>Cygwin</emphasis> to follow these directions. The
- Gnash source tree includes Microsoft Visual C++ project files,
- but they may not be as well maintained. Patches always welcome.
+ If you are compiling with GCC you will probably need to use a machine
+ with at least 128 megabytes of physical RAM; 64MB is not enough for a
+ couple of the files, even with swap enabled and optimisation turned off.
+ </para>
+ <para>
+ At present the Gnash source is about 16 MB to extracted and configured
+ and requires a total of about 100 megabytes to compile it.
+ </para>
+ <para>
+ Continue reading for detailed step-by-step instructions
+ of the entire procedure.
</para>
</sect2>
@@ -67,8 +53,6 @@
url="http://ftp.gnu.org/gnu/gnash">
http://ftp.gnu.org/gnu/gnash
</ulink>
- Gnash is released as source, binary packages of releases
- should be available from most all upstream distributions.
</para>
</sect3>
@@ -90,482 +74,15 @@
</para>
<para>
If you only have access to the internet via a web proxy,
- you will find daily source snapshots of the latest CVS tree
- at:
+ you will find daily snapshots of the latest CVS tree in
<ulink type="http"
url="http://www.gnashdev.org/dev_snapshots/">
http://www.gnashdev.org/dev_snapshots
</ulink>
</para>
- <para>
- You can also get binary snapshots for a variety of platforms
- built via our normal automated testing harness. Because these
- are built through automation, there may be problems with
- specific snapshots. You can get binary snapshots from:
- <ulink type="http"
- url="http://www.getgnash.org/packages/">
- http://www.getgnash.org/packages
- </ulink>
- </para>
- <para>
- These builds are not officially supported by anyone, but are
- provided to let people run Gnash without having to go through
- this entire build procedure.
- </para>
</sect3>
</sect2>
- <sect2 id="codedepend">
- <title>Code Dependencies</title>
-
- <para>
- Gnash has dependencies on other packages. When installing
- from a packaged release file (rpm, deb, etc.), you'll need
- to install the development versions to get the tools used to
- compile Gnash. The normal runtime packages installed are usually
- missing the headers needed to compile Gnash.
- </para>
-
- <para>
- Not all dependencies are required for all Gnash
- configurations. For example, using the GTK GUI adds dependencies
- for ATK, Pango, and Cairo.
- </para>
-
- <sect3 id="opengl">
- <title>OpenGL</title>
- <para>
- Gnash can use OpenGL for rendering the images. OpenGL is a 3D
- graphics package which supports hardware acceleration. You can
- get the free version of OpenGL at this link:
- <ulink type="http"
- url="http://www.mesa3d.org">http://www.mesa3d.org</ulink>
- </para>
-
- <para>
- To install a binary package using <emphasis>apt-get</emphasis>
- (on Debian based systems), install <emphasis>libgl1-mesa-dev</emphasis>.
- For RPM or Yum based systems, install the <emphasis>libmesa-devel
- </emphasis> package.
- </para>
-
- <para>
- Please note that the free X11 drivers currently do not support
- acceleration, so unless you are running the binary blob Nvidia
- or ATI drivers, there is no advantage to using OpenGL with
- Gnash.
- </para>
-
- </sect3>
-
- <sect3 id="agg">
- <title>AGG</title>
- <para>
- AGG is the AntiGrain low-level 2D graphics library that can be used
- instead of OpenGL. Unlike OpenGL, AGG does all rendering in software
- without requiring that much floating point calculation. This
- is the default renderer for Gnash, as it supports the highest
- quality rendering, and lower-end devices.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libagg-dev</emphasis>. For RPM or
- Yum based systems, install the <emphasis>agg-devel</emphasis>
- package. For BSD systems, install the <emphasis>agg</emphasis>
- package.
- </para>
- </sect3>
-
- <sect3 id="gtkglext">
- <title>GtkGlExt</title>
- <para>
- GtkGlExt is an optional package used to link the GTK GUI to the
- opengl renderer. Gtk enables better integration with Firefox,
- as well as better event handling and higher level GUI
- constructs like menus and dialog boxes. GTK is primary default
- GUI for Gnash.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libgtkglext1-dev</emphasis>. For
- RPM or Yum based systems, install the
- <emphasis>gtkglext-devel</emphasis> package. For BSD systems,
- install the <emphasis>gtkglext-1.2.0</emphasis> package.
- </para>
- </sect3>
-
- <sect3 id="pango">
- <title>Pango</title>
- <para>
- Pango is a dependency of Gtk, and is used for font handling.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libpango1.0-dev</emphasis>. For
- RPM or Yum based systems, install the <emphasis>pango-devel
- </emphasis> package. For BSD systems, install the
- <emphasis>pango</emphasis> package.
- </para>
- </sect3>
-
- <sect3 id="atk">
- <title>Atk</title>
- <para>
- Atk is a dependency of Gtk, and is used for accessibility
- support.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>atk-dev</emphasis>. For RPM or Yum based
- systems, install the <emphasis>atk-devel</emphasis>
- package. For BSD systems, install the <emphasis>atk</emphasis> package.
- </para>
- </sect3>
-
- <sect3 id="cairo">
- <title>Cairo</title>
- <para>
- Cairo is a dependency of Gtk, and is used for 2D
- rendering. Cairo can also be used standalone as a rendering
- backend for Gnash without the other GTK depenencies.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libcairo2-dev</emphasis>. For RPM
- or Yum based systems, install the <emphasis>cairo-devel</emphasis>
- package. For BSD systems, install the <emphasis>cairo</emphasis>
package.
- </para>
- </sect3>
-
- <sect3 id="boost">
- <title>Boost</title>
- <para>
- Boost is a library of portable C++ classes and templates which
- layer on top of STL. Boost is used for thread and mutext
- handling.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libboost-thread-dev</emphasis> and
- <emphasis>libboost-date-time</emphasis>. For RPM or Yum based
- systems, install the <emphasis>libboost-devel</emphasis>
- package. For BSD systems, install the <emphasis>boost-headers
- </emphasis> and <emphasis>boost-libs </emphasis>packages.
- </para>
- </sect3>
-
- <sect3 id="glib">
- <title>Glib</title>
- <para>
- Glib is a dependency of Gtk, and is a collection of commonly
- used lower-level functions.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>glib-dev</emphasis>. For RPM or Yum based
- systems, install the <emphasis>glib-devel</emphasis>
- package. For BSD systems, install the <emphasis>glib2</emphasis>
package.
- </para>
- </sect3>
-
- <sect3 id="gstreamer-dep">
- <title>Gstreamer</title>
- <para>
- Gstreamer is used for sound and video support. It is not
- needed to build this release. Currently only Gstreamer version
- 0.10 or higher can be used. Also when using the Gstreamer
- backend for Gnash, you must also have the
- <emphasis>gstreamer-ffmpeg </emphasis> plugin to Gstreamer
- installed, as this is where the codecs are. Gstreamer is the
- default multimedia systems used bug Gnash, so if your
- Gstreamer installation is messed up, audio or video won't work.
- </para>
- <para>
- Because Gstreamer is an entire system for multimedia, several
- packages must be installed for Gnash to work, which most
- people define as having their favorite video sharing sites
- work.
- </para>
- <para>
- To install the binary packages using apt-get (on Debian based
- systems), install <emphasis>libgstreamer0.10-dev</emphasis>,
- <emphasis>libgstreamer-plugins-base0.10</emphasis>, and
- <emphasis>gstreamer0.10-ffmpeg </emphasis>. For RPM or Yum based
- systems, install the <emphasis>gstreamer-devel</emphasis>
- package. Version 0.10 or greater will be required. For BSD
- systems, install the <emphasis>gstreamer-0.10</emphasis> and
- <emphasis>gstreamer0.10-ffmpeg</emphasis> packages.
- </para>
- </sect3>
-
- <sect3 id="ffmpeg-dep">
- <title>FFMPEG</title>
- <para>
- FFMPEG can also be used for sound and video support. It is not
- needed directly to build this release, as we use the
- Gstreamer-ffmpeg plugin primarily. For some embedded systems
- ffmpeg is prefered for size, as it can be configured to only
- support a few chosen codecs,
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libavformat-dev</emphasis>. For
- RPM or Yum based systems, install the <emphasis>libffmpeg-devel
- </emphasis> package. Version 0.10 or greater will be
- required. For BSD systems, install the <emphasis>ffmpeg
- </emphasis> package.
- </para>
- </sect3>
-
- <sect3 id="sdl">
- <title>SDL</title>
- <para>
- The Simple DirectMedia Layer is a cross-platform multimedia
- library designed to provide low level access to audio,
- keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D
- video framebuffer. You can get SDL from this link:
- <ulink type="http" url="http://www.libsdl.org">
- http://www.libsdl.org</ulink>
- </para>
- <para>
- SDL can be used directly as a GUI for Gnash, and was
- originally the only GUI support be Gnash. These days it's
- primarily used as a dependency for other libraries, namely
- AGG, and Gnash's own ffmpeg backend.
- </para>
-
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libsdl1.2-dev </emphasis>. For RPM
- or Yum based systems, install the <emphasis>SDL-devel
- </emphasis> package. For BSD systems, install the
- <emphasis>sdl-1.2 </emphasis> package.
- </para>
-
- </sect3>
-
- <sect3 id="png">
- <title>PNG</title>
- <para>
- <ulink type="http"
- url="http://www.libpng.org/pub/png/">PNG</ulink> is a
- patent-free image format that is comparable to
- <emphasis>GIF</emphasis>. This is primarily used as a
- depenency by other libraries, and not directly by Gnash.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libpng12-dev </emphasis>. For RPM
- or Yum based systems, install the <emphasis>libpng </emphasis>
- package. For BSD systems, install the <emphasis>png
- </emphasis> package.
- </para>
-
- </sect3>
-
- <sect3 id="jpeg">
- <title>JPEG</title>
- <para>
- <ulink type="http"
- url="http://www.ijg.org/">JPEG</ulink> is a lossy image
- format, heavily used for images because of the smaller size of
- the file. This is used directly by Gnash to load JPEGs.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libjpeg62-dev </emphasis>. For RPM
- or Yum based systems, install the <emphasis>libjpeg
- </emphasis> package.
- </para>
-
- </sect3>
-
- <sect3 id="libxml2">
- <title>libxml2</title>
- <para>
- Libxml2 is the GNOME XML parser library. Libxml2 is used to
- parse any incoming messages when using the XML or XMLSocket
- ActionScript classes. You can get libxml2 from this link:
- <ulink type="http" url="http://xmlsoft.org">http://xmlsoft.org</ulink>
- </para>
-
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libxml2-dev </emphasis>. For RPM
- or Yum based systems, install the <emphasis>libxml2-devel
- </emphasis> package. For BSD systems, install the
- <emphasis>libxml2 </emphasis> package.
- </para>
- </sect3>
-
- <sect3 id="ogg">
- <title>Ogg Vorbis</title>
- <para>
- <ulink type="http" url="http://www.vorbis.com/">Ogg
- Vorbis</ulink> is a patent free audio format that is
- comparable (many people say better) to MP3. You can get Ogg
- Vorbis from this
- link: <ulink type="http" url="http://www.vorbis.com/">
- http://www.vorbis.com/</ulink>. Ogg Vorbis is the prefered
- audio codec for Gnash, and is also supported by the Gstreamer
- and ffmpeg packages.
- </para>
- <para>
- To install a binary package using apt-get (on Debian based
- systems), install <emphasis>libogg-dev </emphasis>. For RPM or
- Yum based systems, install the <emphasis>libogg </emphasis>
- package. For BSD systems, install the <emphasis> </emphasis> package.
- </para>
-
- </sect3>
-
- <sect3 id="mozilla">
- <title>Mozilla/Firefox</title>
-
- <para>
- The Mozilla development package is no longer needed to build
- the plugin. The required header files are now included in
- Gnash, so it builds without Mozilla or Firefox installed at
- all.
- </para>
-
- </sect3>
- </sect2>
-
- <sect2 id="docdepend">
- <title>Documentation Dependencies</title>
-
- <sect3 id="docbook">
- <title>Docbook</title>
-
- <para>
- <ulink type="http" url="http://docbook.sourceforge.net/">
- Docbook</ulink> is an industry standard XML format for technical
- documentation. It is used by many projects, as there are free
- software implementations of the Docbook style-sheets and
- tools. It is used by both the <ulink type="http"
- url="http://www.gnome.org">GNOME</ulink> project, and the
- <ulink type="http" url="http://www.tldp.org/">Linux
- Documentation Project</ulink>. It is customizable by using
- style-sheets for each output device. Default style-sheets are
- included for a variety of print formats, like <emphasis>PDF</emphasis>
- and <emphasis>HTML</emphasis>.
- </para>
- <para>
- You can get Docbook from this link:
- <ulink type="http"
-
url="http://sourceforge.net/project/showfiles.php?group_id=21935#files">
-
http://sourceforge.net/project/showfiles.php?group_id=21935#files</ulink>.
- If Docbook is not installed, prebuilt files for a variety of
- formats, like man page and GNU info are included. Up to date
- documentation can always be found on the <ulink type="http"
- url="http://www.gnashdev.org"> http://www.gnashdev.org</ulink>.
- </para>
- <para>
- To install a binary packages using apt-get (on Debian based
- systems), install the <emphasis>docbook </emphasis>,
- <emphasis>docbook-xsl </emphasis>, <emphasis>docbook-xml </emphasis>,
- <emphasis>docbook-dsssl </emphasis>, and
- <emphasis>docbook-utils </emphasis> packages. For RPM or Yum based
- systems, install the <emphasis>docbook </emphasis>,
- <emphasis>docbook-style-xsl </emphasis>,
- <emphasis>docbook-style-dsssl</emphasis>, and
- <emphasis>docbook-utils </emphasis> packages.
- </para>
- </sect3>
-
- <sect3 id="docbook2x">
- <title>DocBook2X</title>
-
- <para>
- DocBook2X is a software package that converts DocBook
- documents into the traditional Unix man page format and the
- GNU Texinfo format. It supports tables for man pages,
- internationalization, and easy customization of the
- output using XSLT. This package is used to convert the Gnash
- documentation into HTML and <ulink type="http"
- url="http://www.gnu.org/software/texinfo/">
- Texinfo</ulink> formats. Texinfo can later be converted to
- standard GNU <emphasis>info</emphasis> pages.
- </para>
- <para>
- You can get DocBook2X from this link:
- <ulink type="http" url="http://docbook2x.sourceforge.net/">
- http://docbook2x.sourceforge.net/</ulink>. Texinfo is
- available at this link:
- <ulink type="http" url="http://ftp.gnu.org/gnu/texinfo/">
- http://ftp.gnu.org/gnu/texinfo/</ulink>.
- </para>
- <para>
- To install a binary package of DocBook2X using apt-get (on
- Debian based systems), install <emphasis>docbook2x
- </emphasis>. For RPM or Yum based
- systems, install the <emphasis>docbook2x </emphasis> package.
- To install a binary package of DocBook2X using apt-get (on
- Debian based systems), install
- <emphasis>docbook2x</emphasis>. For RPM or Yum based
- systems, install the <emphasis>docbook2x</emphasis> package.
- </para>
- </sect3>
-
- <sect3 id="fop">
- <title>FOP</title>
-
- <para>
- FOP (Formatting Objects Processor) is the world's first print
- formatter driven by XSL formatting objects (XSL-FO) and the
- world's first output independent formatter. It is a
- <emphasis>Java</emphasis> application that reads a formatting object
- (FO) tree and renders the resulting pages to a specified
- output. Output formats currently supported include PDF, PCL,
- PS, SVG, XML, Print, AWT, MIF and Text. The default output
- target is PDF.
- </para>
-
- <para>
- You can get <emphasis>fop</emphasis> from this link:
- <ulink type="http" url="http://xmlgraphics.apache.org/fop/">
- http://xmlgraphics.apache.org/fop/</ulink>. Presently only
- <emphasis>fop version 0.20.5</emphasis> works with current DocBook
- tools.
- </para>
- </sect3>
-
- <sect3 id="java">
- <title>Java</title>
-
- <para>
- The <emphasis>fop</emphasis> processor is a <emphasis>Java</emphasis>
- application, so it needs a Java runtime to work. This is
- installed on many platforms by default, but unfortunately
- <emphasis>fop</emphasis> doesn't work with the <ulink type="http"
- url="http://gcc.gnu.org/java/">GCJ</ulink> runtime. There is
- apparently work being done on FOP to make it usable, but for
- now, this means installing <ulink type="http"
- url="http://java.sun.com/">Sun Java</ulink>.
- </para>
-
- <para>
- In addition to the default <emphasis>j2re</emphasis> package, you also
- need to install <emphasis>JAI</emphasis>, the Java Advanced Imaging
- library. You can get <emphasis>JAI</emphasis> from <ulink type="http"
- url="http://java.sun.com/products/java-media/jai/iio.html">
- this link</ulink>. <emphasis>JAI</emphasis> is not required, and the
- <emphasis>PDF</emphasis> file will be generated. It will just be
- missing all the graphics.
- </para>
- <para>
- <emphasis>Fop</emphasis> also requires an environment variable to be
- set. This is JAVA_HOME. This needs to point to the top
- directory where your <emphasis>Sun j2re</emphasis> is installed. If
- you have any other problems with your Java installation, you
- can also try adding the <emphasis>Sun j2re</emphasis> path to the
- <emphasis>CLASSPATH</emphasis> environment variable.
- </para>
- </sect3>
-
- </sect2>
-
<sect2 id="configure">
<title>Configuring The Code</title>
@@ -602,34 +119,6 @@
</para>
<para>
- By default with zero configuration options, the configure
- process by default will do the right thing. For example, KDE
- support is built bt default along with GTK, but if you don't
- have the KDE development libraries installed, KDE support is
- then disabled. If you have problems with your builds, analysze
- the output from configure, as Gnash always prints a warning
- message when changing the default configuration.
- </para>
-
- <para>
- The currently default build of Gnash results in two executables,
- <emphasis>gtk-gnash </emphasis> and
- <emphasis>kde-gnash</emphasis>, supporting their respectively
- named GUIs toolkits. The AGG renderer is used by default, along
- with the Gstreamer multimedia framework. Both the NSAPI
- (Firefox/Mozilla) and Kparts (Kongueror) plugins are also built
- by default.
- </para>
-
- <para>
- Note that to install the plugins requires root access, as these
- files have to be written to system directories. When building
- packages, DESTDIR is used at install time, which avoids this
- problem by only writing to a user specified and writeable
- directory.
- </para>
-
- <para>
A configure script can support many options, but they fall
into two main types. The first type are options to enable or
disable features. The second type is used to specify custom
@@ -637,68 +126,6 @@
default searching and testing.
</para>
- <para>
- To debug configure problems requires a knowledge of bourne shell
- programming and Unix utlities. with a little m4 thrown in. This
- is because Gnash uses GNU Autotools, because it is the best
- system I've ever found for handling the complex issues involved
- in cross configuration and compilation. Debugging configure
- scripts can be made much easier by using the following
- trick. Autoconf uses the environment variable
- <emphasis>CONFIG_SHELL </emphasis> for invoking the subshell
- used for configure tests. If this variable is set in your
- environment to <emphasis>sh -x</emphasis>, then the bourne shell
- debugging commands get printed. While this file can be very
- large, every variable value, and expanded shell command is
- printed out, making it relatively easy to find where the problem
- is. To get all the shell debugging commands including the top
- level shell, just invoke configure with <emphasis>sh -x</emphasis>.
- </para>
-
- <para>
- Often configuration problems fall into a few simple
- catagories. For native builds, if <emphasis>pkg-config
- </emphasis> is installed, the values it returns for CFLAGS and
- LDFLAGS are used. As these files are maintained by the
- indivigual package maintainers themselves, they are often not
- very portable. Gnash attempts to fix the dependencies of these
- paths for known problems, but sometimes new problems appear as
- other packages get updated. For cross configuration, pkg-comfig
- is ignored, as in those cases it's never correct unless you are
- running in a fake native cross building environment like
- scratchbox or open embedded.
- </para>
-
- <para>
- The other problem for Gnash is when pkg-config is not used,
- Gnash needs to find the paths for the headers and libraries it
- needs to build itslf. As most of the default macros for
- Autotconf don't all cleanly support cross configuration, Gnash
- includes it's own that have been developed over years of
- testing. Still, packages and distributions occasionally change
- things. and even the best configure tests can't cope. Gnash's
- configure tests are as flexible as possible, but often if a
- dependant package can't be found, and you know it's installed
- and working, the our configure test is broken. If you find a
- configure test is failing on your machine, please <ulink type="http"
- url="https://savannah.gnu.org/bugs/?group=gnash">submit a patch</ulink>
- or <ulink type="http"
- url="https://savannah.gnu.org/bugs/?group=gnash">file a bug
- report</ulink>.
- </para>
-
- <para>
- For cross configuring, the problem initially can be in the cross
- toolchain used. before getting too worried, first make sure a
- simple "Hello World" program can be compiled and run on your
- target. If this works, build and run the example programs
- included in most of the packages source distributions to make
- sure your installation is fully functional. For a new toolchain
- on a new target, it is very common to have issues getting the
- entire system up and working to the level it needs to for full,
- support of multimedia.
- </para>
-
<sect3 id="confoptions">
<title>Configure Options</title>
@@ -707,20 +134,20 @@
various features of Gnash. The major configuration options are:
</para>
<para>
- GUI: see --enable-gui (default is GTK and KDE)
+ GUI: see --enable-gui (default is GTK)
</para>
<para>
Renderer: see --enable-renderer (default is AGG)
</para>
<para>
- Media handler: see --enable-media (default is Gstreamer)
+ Media handler: see --enable-media (default is FFMPEG thru SDL sound)
</para>
<para>
The smallest working standalone version is obtained with:
<programlisting>
./configure --disable-debugger --disable-cygnal --disable-docbook \
- --disable-plugin --enable-gui=fltk.
+ --disable-plugin --enable-media=mad --enable-gui=sdl
</programlisting>
</para>
@@ -730,8 +157,7 @@
<listitem>
<para>
Disable support for the Flash debugger. The debugger is
- mainly of interest to Flash developers, or Gnash
- developers, and is currently a work in progress.
+ mainly of interest to Flash developers.
</para>
</listitem>
</varlistentry>
@@ -787,6 +213,17 @@
</varlistentry>
<varlistentry>
+ <term>--disable-glext</term>
+ <listitem>
+ <para>
+ Disable using GtkGlExt, which forces the use of SDL
+ instead. By default if the GtkGL extension for Gtk is found
+ by configure, the GTK enabled GUI is built.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>--enable-gui=gtk|sdl|kde|fltk|fb</term>
<listitem>
<para>
@@ -848,7 +285,7 @@
</varlistentry>
<varlistentry>
- <term>--disable-kparts</term>
+ <term>--disable-klash</term>
<listitem>
<para>
Disable support for Konqueror plugin. If
@@ -874,18 +311,20 @@
<term>--enable-mac</term>
<listitem>
<para>
- Link to Qt/Mac (don't use X). This is only used by Klash.
+ Link to Qt/Mac (don't use X). This is only used by
+ Klash.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>--enable-media=ffmpeg|gst</term>
+ <term>--enable-media=ffmpeg|mad|gst</term>
<listitem>
<para>
Select the specified media decoder and sound engine.
- FFMPEG uses the SDL sound engine, GST uses its own.
- Using <emphasis>Gstreamer</emphasis> is the default decoder.
+ FFMPEG and MAD use the SDL sound engine; GST uses its own.
+ Mixing this with --enable-sound=gst is invalid. Using
+ <emphasis>ffmpeg</emphasis> is the default decoder.
</para>
<para>
You should only select one media decoder.
@@ -894,13 +333,14 @@
</varlistentry>
<varlistentry>
- <term>--disable-nsapi</term>
+ <term>--enable-plugin</term>
<listitem>
<para>
- Disable building the NSAPI plugin, which is built by
- default. Configure
- <emphasis>--with-plugindir=</emphasis> to specify where
- the plugin should be installed.
+ Enable building the plugin. By default the
+ Mozilla Firefox plugin won't be built, even if all the required
+ files are found by configure. Configure
+ <emphasis>--with-plugindir=</emphasis> to specify where the
+ plugin should be installed.
</para>
</listitem>
</varlistentry>
@@ -933,13 +373,21 @@
</varlistentry>
<varlistentry>
+ <term>--enable-sdk-install</term>
+ <listitem>
+ <para>
+ Enable installing the libraries and headers as an SDK.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>--disable-shared</term>
<listitem>
<para>
- Disble building the Gnash libraries as shared libraries.
+ Enable installing the shared libraries and headers.
Note that the extensions mechanism may not work if shared
- libraries are disabled, nor will the plugins get
- built. This option is primarily used by developers.
+ libraries are disabled.
</para>
</listitem>
</varlistentry>
@@ -954,6 +402,25 @@
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>--enable-testing</term>
+ <listitem>
+ <para>
+ Enable testing-specific methods.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>--enable-xmlreader</term>
+ <listitem>
+ <para>
+ When using the XML library, parse the messages using a
+ SAX based parser.
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</sect3>
@@ -1152,6 +619,24 @@
</varlistentry>
<varlistentry>
+ <term>--with-mad_incl</term>
+ <listitem>
+ <para>
+ Directory where libmad header is installed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>--with-mad_lib</term>
+ <listitem>
+ <para>
+ Directory where libmad library is installed.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>--with-ogg_incl</term>
<listitem>
<para>
@@ -1483,18 +968,11 @@
</para>
<para>
- There is also up to date information on the Gnash Developers
- web site at: <ulink type="http" url="http://www.gnashdev.org">
- http://www.gnashdev.org</ulink>. This is the best place for
- detailed informatin on various systems.
- </para>
-
- <para>
After I built up an ARM system in /usr/arm using the shell
script from this web site, I then cross compiled all the
other libraries I needed. The fun part is trying to get
libMesa to cross compile, because it's not really set up for
- that. It's much easier to use the Gnash default, AGG.
+ that.
</para>
<para>
@@ -1503,9 +981,7 @@
</para>
<programlisting>
- ../../gnash/configure --build=i686-pc-linux-gnu
- --host=arm-linux --prefix=/usr/local/arm/oe --disable-nsapi
- --disable-kparts --enable-gui=fb --enable-renderer=agg --disable-shared
+ ../../gnash/configure --build=i686-pc-linux-gnu --host=arm-linux
--prefix=/usr/local/arm/oe --disable-plugin --enable-renderer=agg
--disable-shared
</programlisting>
<para>
@@ -1564,16 +1040,15 @@
<title>Compiling The Code</title>
<para>
- After configuring, typing <emphasis>make</emphasis> will
- compile the code. No options are necessary. If desired, you
- can redefine the variables used by <emphasis>make</emphasis>
- on the command line when invoking the program. The few flags
- of interest are <emphasis>CFLAGS</emphasis> and
- <emphasis>CXXFLAGS</emphasis>, often used to turn on debugging
- or turn off optimizing. Invoking make as in this example would
- build all the code with debugging turned on, and optimizing
- turned off. The default values for both of these variables is
- <emphasis>-O2 -g</emphasis>.
+ After configuring, typing <emphasis>make</emphasis> will compile the
+ code. No options are necessary. If desired, you can redefine
+ the variables used by <emphasis>make</emphasis> on the command line
+ when invoking the program. The few flags of interest are
+ <emphasis>CFLAGS</emphasis> and <emphasis>CXXFLAGS</emphasis>, often
used to
+ turn on debugging or turn off optimizing. Invoking make as in
+ this example would build all the code with debugging turned
+ on, and optimizing turned off. The default values for both of
+ these variables is <emphasis>-O2 -g</emphasis>.
<programlisting>
make CFLAGS=-g CXXFLAGS=-g
@@ -1592,30 +1067,19 @@
<para>
By default, the documentation isn't built at all. It isn't
- even built when typing <emphasis>make install</emphasis> from
- the top level build directory. It's only built when specified
- with a specific target in the generated
- <emphasis>Makefile</emphasis> in the
- <emphasis>doc/C/</emphasis> sub-directory. All the documents
- are built in this directory when executing a <emphasis>make
- install</emphasis>.
- </para>
-
- <para>
- By default, gnash merely links to prebuilt vesion of the
- documentation, so without needing to have a working Docbook
- installation, basic man pages and info pages work. This is
- used primarily to support systems that may not have a working
- docbook installtion when building binary packages. If these
- files don't exist, most packaging system will fail.
+ even built when typing <emphasis>make install</emphasis> from the top
+ level build directory. It's only built when specified with a
+ specific target in the generated <emphasis>Makefile</emphasis> in the
+ <emphasis>doc/C/</emphasis> sub-directory. All the documents are built
in
+ this directory when executing a <emphasis>make install</emphasis>.
</para>
<para>
There is a target for each output format, <emphasis>make
- html</emphasis>, <emphasis>make pdf</emphasis>, <emphasis>make
- info </emphasis>, and <emphasis>make man</emphasis>. A higher
- level target, <emphasis>make alldocs</emphasis>, builds the
- four main formats for the documentation.
+ html</emphasis>, <emphasis>make pdf</emphasis>, <emphasis>make
info</emphasis>,
+ and <emphasis>make man</emphasis>. A higher level target, <emphasis>make
+ alldocs</emphasis>, builds the four main formats for the
+ documentation.
</para>
<para>
Index: doc/C/usermanual/acknowledgments.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/usermanual/acknowledgments.xml,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -b -r1.1 -r1.1.2.1
--- doc/C/usermanual/acknowledgments.xml 20 Feb 2008 05:16:20 -0000
1.1
+++ doc/C/usermanual/acknowledgments.xml 3 Mar 2008 23:46:53 -0000
1.1.2.1
@@ -21,7 +21,7 @@
<para>
&app; is based on the public domain program
- <application>GameSWF</application>, which is a graphics library
+ <application>GameSWF</application>, a graphics library
for games that contains the heart of a SWF interpreter. In December
2005, &app; was forked from <application>GameSWF</application> and
repackaged in the GNU project style, and a major recoding started.
Index: doc/C/usermanual/glossary.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/usermanual/glossary.xml,v
retrieving revision 1.5.2.1
retrieving revision 1.5.2.2
diff -u -b -r1.5.2.1 -r1.5.2.2
--- doc/C/usermanual/glossary.xml 28 Feb 2008 08:16:17 -0000 1.5.2.1
+++ doc/C/usermanual/glossary.xml 3 Mar 2008 23:46:53 -0000 1.5.2.2
@@ -146,12 +146,11 @@
</glossterm>
<glossdef>
<para>
- A &app; <emphasis>extension</emphasis> is a plugin (not
- a browser plugin) which
- implements additional
- functionality beyond what is covered by
- <emphasis>Flash</emphasis> specification.
- These are shared libraries which are loaded at runtime.
+ A &app; <emphasis>extension</emphasis> is a plugin (not a
+ browser plugin) which implements additional functionality
+ beyond what is covered by <emphasis>Flash</emphasis>
+ specification. These are shared libraries which are loaded
+ at runtime.
</para>
</glossdef>
</glossentry>
@@ -182,8 +181,9 @@
<para>
The term <emphasis>Flash</emphasis> is used to describe both the
Adobe IDE for creating <emphasis>SWF</emphasis>
- files, and the technology itself.
- &app; documentation uses the latter definition.
+ files, and the technology itself. Flash is a trademarked
+ term of Adobe's, we prfer to use SWF to refer to the files
+ themselves, as well as the format, instead of flash(tm).
</para>
</glossdef>
</glossentry>
@@ -287,7 +287,7 @@
library provides a wrapper for mouse and keyboard events,
menus, windowing (where available) and a drawing area.
You must choose a GUI library during the
- <link linkend="pre-configuration">configuration</link> stage.
+ configuration stage of building Gnash.
</para>
</glossdef>
</glossentry>
@@ -318,8 +318,7 @@
<glossdef>
<para>
<emphasis>Kpart</emphasis> is a plugin for Konqueror which is
- enabled with the <link linkend="features">configuration option</link>
- <emphasis>--enable-klash</emphasis>.
+ enabled with the configuration option --enable-kparts.
</para>
</glossdef>
</glossentry>
@@ -476,7 +475,7 @@
<para>
The <emphasis>renderer</emphasis> is the subsystem of &app;
which renders content. Only one renderer may be used; it is
- chosen during <link linkend="pre-configuration">configuration</link>.
+ selected at configuration time if building from source.
</para>
<para>
Available renderers are: AGG, OpenGL, and Cairo. In terms of
@@ -565,7 +564,7 @@
which handles both event sounds and streaming sound. Audio
from external sources are also handled through the sound handler
when SDL is used. The sound handler must be selected during
- <link linkend="pre-configuration">configuration</link>.
+ configuration of Gnash when compiling.
</para>
<para>
There are currently two sound handlers available in &app;:
@@ -597,8 +596,7 @@
</glossterm>
<glossdef>
<para>
- The visible area of a Flash movie. The name derives from a
- theater analogy. Graphical elements are referred to as
+ The visible area of a Flash movie. The name derives from a
theater analogy. Graphical elements are referred to as
characters.
</para>
</glossdef>
Index: doc/C/usermanual/installation.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/usermanual/installation.xml,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -b -r1.6 -r1.6.2.1
--- doc/C/usermanual/installation.xml 19 Feb 2008 02:06:30 -0000 1.6
+++ doc/C/usermanual/installation.xml 3 Mar 2008 23:46:54 -0000 1.6.2.1
@@ -1,17 +1,17 @@
<chapter id="build">
- <title>Installing and Configuring &app;</title>
+ <title>Installing and Configuring Gnash</title>
<para>
- There are two ways of installing &app;:
- <link linkend="packagemanager">using a package manager</link>
- or <link linkend="gettingsource">installing from source</link>.
+ There are two ways of installing Gnash:
+<!-- <link linkend="packagemanager">using a package manager</link> -->
+ using a package manager, or <link linkend="gettingsource">installing from
source</link>.
</para>
<sect1 id="requirements">
<title>Requirements</title>
<para>
- Before downloading and installing &app;, check that your
+ Before downloading and installing Gnash, check that your
hardware and software meet the following requirements.
</para>
@@ -19,12 +19,12 @@
<title>Hardware Requirements</title>
<para>
- One of the goals of &app; is to make it portable enough to install on
- small devices. As a result, the hardware requirements are
- minimal. &app; has even run on an ARM9 at 200 MHz with 64 MB of RAM!
- (It ran without video support in this case.) While firm minimums
- have not been established, &app; has been shown to run successfully
- with the following:
+ One of the goals of Gnash is to make it portable enough to
+ install on small devices. As a result, the hardware
+ requirements are minimal. Gnash has even run on an ARM9 at 200
+ MHz with 32 MB of RAM! (It ran without video support in this
+ case.) While firm minimums have not been established, Gnash
+ has been shown to run successfully with the following:
</para>
<itemizedlist>
@@ -35,31 +35,29 @@
</listitem>
<listitem>
<para>
- 256 MB RAM
+ 128 MB RAM
</para>
</listitem>
<listitem>
<para>
- Video — &app; will run on anything from a raw frame buffer up
to
- an OpenGL-supporting graphics card.
+ Gnash will run on anything from a raw frame
+ buffer up to an OpenGL-supporting graphics card.
</para>
</listitem>
</itemizedlist>
<para>
The following table provides a list of the Operating System/CPU
- combinations on which &app; has been shown to run.
+ combinations on which Gnash has been shown to run.
</para>
<table id="tb-os-cpu">
<title>Build Matrix</title>
<tgroup cols='2' align='left' colsep='1' rowsep='1'>
- <colspec colname='Operating System' />
- <colspec colname='CPU' />
<thead>
<row>
- <entry>Render GUI</entry>
- <entry>Virtual Memory</entry>
+ <entry>Operating System</entry>
+ <entry>Processor</entry>
</row>
</thead>
<tbody>
@@ -69,14 +67,6 @@
</entry>
</row>
<row>
- <entry>ALTLinux</entry>
- <entry>i586</entry>
- </row>
- <row>
- <entry>Arklinux</entry>
- <entry>i586</entry>
- </row>
- <row>
<entry>Debian</entry>
<entry>Alpha AXP, AMD64, ARM, hppa, i386, Itanium, MIPS,
PowerPC, IBM zSeries (s390), SPARC
@@ -108,10 +98,10 @@
<row>
<entry>Mandriva
</entry>
- <entry>i386</entry>
+ <entry>i386, x86-64, MIPS</entry>
</row>
<row>
- <entry>Open Embedded
+ <entry>Open Embedded, OpenMoko, Poky
</entry>
<entry>ARM
</entry>
@@ -129,7 +119,7 @@
</entry>
</row>
<row>
- <entry>Red Hat Enterprise and CentOS
+ <entry>Red Hat Enterprise, CentOS
</entry>
<entry>x86-32, x86-64
</entry>
@@ -145,6 +135,10 @@
<entry>i386</entry>
</row>
<row>
+ <entry>Syllable</entry>
+ <entry>i386</entry>
+ </row>
+ <row>
<entry>Irix 6.5
</entry>
<entry>MIPS R10K
@@ -157,16 +151,7 @@
</entry>
</row>
<row>
- <entry>NetBSD</entry>
- <entry>many, including VAX
- </entry>
- </row>
- <row>
- <entry>OpenBSD</entry>
- <entry>many, including VAX, OS/2 and eComstation</entry>
- </row>
- <row>
- <entry>Windows</entry>
+ <entry>Windows XP, Windows Vista</entry>
<entry>x86-32</entry>
</row>
</tbody>
@@ -179,57 +164,45 @@
<title>Software Requirements</title>
<para>
- The &appversion; release of &app; has been designed to run on
+ The &appversion; release of Gnash has been designed to run on
UNIX/Linux variants, and has been run on most of the free ones.
- However, &app; has successfully run on Windows, Darwin (Mac OS X),
- Irix, Solaris, BeOs, OS/2, and Haiku. &app; has also run on the
+ However, Gnash has successfully run on Windows, Darwin (Mac OS X),
+ Irix, Solaris, BeOs, OS/2, and Haiku. Gnash has also run on the
following 64-bit systems: PowerPC, Itanium, UltraSparc, and AMD64.
For now, it is important to be sure that the following code, testing,
- and documentation dependencies are met before installing &app;. If
- you will be downloading &app; with a package manager, these
+ and documentation dependencies are met before installing Gnash. If
+ you will be downloading Gnash with a package manager, these
dependencies may be solved by the package manager. Otherwise, you
must first verify that each of these dependencies are installed on the
target system.
</para>
- <sect3 id="codedepend">
- &codedependencies;
- </sect3>
-
- <sect3 id="testdepend">
- &testdependencies;
- </sect3>
-
- <sect3 id="docdepend">
- &docdependencies;
- </sect3>
-
</sect2>
</sect1>
<sect1 id="downloading">
- <title>Downloading &app;</title>
+ <title>Downloading Gnash</title>
<para>
- There are two ways to download &app;: using a package manager or by
+ There are two ways to download Gnash: using a package manager or by
downloading the source code and building it on your system. If
- possible, it is advisable to use a package manager to download &app;,
+ possible, it is advisable to use a package manager to download Gnash,
as it will resolve dependencies for you. However, if you want the
- very latest features, or a &app; package is not available for your
+ very latest features, or a Gnash package is not available for your
operating system, it is better to download the source code and build
- &app; locally.
+ Gnash locally.
</para>
- <sect2 id="packagemanager">
- &pkgmanager;
- </sect2>
+<!-- <sect2 id="packagemanager"> -->
+<!-- &pkgmanager; -->
+<!-- </sect2> -->
<sect2 id="gettingsource">
<title>Getting the Source</title>
<para>
- &app; is available as a <link linkend="sourcereleases">release
+ Gnash is available as a <link linkend="sourcereleases">release
tarball</link>, a <link linkend="sourcerepo">development
checkout</link>, or a <link linkend="sourcesnapshot">development
snapshot</link>.
@@ -255,6 +228,19 @@
</para>
</sect3>
+ <sect3 id="sourcesnapshot">
+ <title>Snapshot</title>
+
+ <para>
+ The daily development snapshot can be downloaded from
+ <ulink url="http://www.gnashdev.org/dev_snapshots/"
+ type="http">http://www.gnashdev.org/dev_snapshots/</ulink>.
+ This is the best option if you need changes which were introduced
+ after the <link linkend="sourcereleases">last release</link> of
+ Gnash, but are unable to <link linkend="sourcerepo">download
+ directly from the repository.</link>
+ </para>
+ </sect3>
<sect3 id="sourcerepo">
<title>Repository</title>
@@ -285,38 +271,27 @@
</para>
</sect3>
- <sect3 id="sourcesnapshot">
- <title>Snapshot</title>
+ </sect2>
+
+ <sect2 id="getcodecs">
+ <title>Getting Codec Support</title>
<para>
- The daily development snapshot can be downloaded from
- <ulink url="http://www.gnashdev.org/dev_snapshots/"
- type="http">http://www.gnashdev.org/dev_snapshots/</ulink>.
- This is the best option if you need changes which were introduced
- after the <link linkend="sourcereleases">last release</link> of
- &app;, but are unable to <link linkend="sourcerepo">download
- directly from the repository.</link>
+ Gnash requires codec support to handle audio and video
+ correctly. Some platforms like Ubuntu or Fedora under the
+ GNOME desktop will automatically notify the user that the
+ proper codecs aren't installed, and pop up a dialog box to
+ let the user download the codecs Gnash needs to make site
+ like YouTube work correctly. If you have installed Gnash on
+ any other platform, and video doesn't work, it's highly
+ likely you need to install the proper codecs. For most
+ platforms, this is the Gstreamer-ffmpeg plugin, available
+ from your distributions repository.
</para>
- </sect3>
</sect2>
</sect1>
- <sect1 id="pre-configuration">
- <title>Pre-Compile Configuration</title>
-
- &configuration;
-
- </sect1>
-
- <sect1 id="compiling">
- &building;
- </sect1>
-
- <sect1 id="install">
- &install;
- </sect1>
-
</chapter>
Index: doc/C/usermanual/revisions.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/usermanual/revisions.xml,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -b -r1.4 -r1.4.2.1
--- doc/C/usermanual/revisions.xml 13 Feb 2008 02:30:10 -0000 1.4
+++ doc/C/usermanual/revisions.xml 3 Mar 2008 23:46:54 -0000 1.4.2.1
@@ -1,42 +1,18 @@
- <revhistory>
+<revhistory>
<revision>
- <revnumber>&appname; Manual version 0.3.0</revnumber>
- <date>Oct 2006</date>
- <revdescription>
- <para role="author">Rob Savoye
- <email>address@hidden</email>
- Updated for the alpha release.
- </para>
-
- <para role="publisher">Free Software Foundation</para>
- </revdescription>
- </revision>
-
- <revision>
- <revnumber>&appname; Manual version 0.4.0</revnumber>
- <date>June 2007</date>
- <revdescription>
- <para role="author">Ann Barcomb
- <email>address@hidden</email>
- Rewritten for software version 0.8.0.
- </para>
-
- <para role="publisher">Free Software Foundation</para>
- </revdescription>
- </revision>
-
- <revision>
- <revnumber>&appname; Manual version 0.4.1</revnumber>
+ <revnumber>Gnash User Manual version 0.1</revnumber>
<date>Feb 2008</date>
<revdescription>
<para role="author">Rob Savoye
- <email>address@hidden</email>
- Updated for the 0.8.2 release.
+ <email>address@hidden</email>
+ The end user parts of the manual have been pulled out of
+ the original version of the manual and rewritten.
</para>
- <para role="publisher">Free Software Foundation</para>
+ <para role="publisher">Open Media Now! Foundation</para>
</revdescription>
</revision>
- </revhistory>
+</revhistory>
+
Index: doc/C/usermanual/specification.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/usermanual/specification.xml,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -b -r1.5 -r1.5.2.1
--- doc/C/usermanual/specification.xml 20 Feb 2008 05:16:20 -0000 1.5
+++ doc/C/usermanual/specification.xml 3 Mar 2008 23:46:54 -0000 1.5.2.1
@@ -257,14 +257,14 @@
object, and a final purge releases all
still-<guilabel>UNREACHABLE</guilabel> resources.
</para>
-
+<!--
<para>
This garbage collector has reduced the memory footprint of &app;.
However, the most current, available test data indicated the following
runtime memory footprint:
</para>
- <!--
+
<table frame='all'>
<title>Memory Footprint</title>
<tgroup cols='4' align='left' colsep='1' rowsep='1'>
@@ -365,22 +365,22 @@
<title>Local Shared Objects</title>
<para>
- SWF movies support a form of persistant storage called Local
+ SWF movies support a form of persistent storage called Local
Shared Objects. These are stored in the subdirectories of one's
<emphasis>~/.macromedia</emphasis> configuration. These files
- are comonly called "Flash Cookies", as they don't get
+ are commonly called "Flash Cookies", as they don't get
deleted when the SWF movie that created or writes data to them
stops executing. These files often store things like game
- scores.
+ scores, but can also store a unique identifier for tracking purposes.
</para>
<para>
Till recently, what was contained in these files wasn't widely
known. There are several LSO file utilities floating around on
- the Web. Gnash has it's own <emphasis>soldumper</emphasis>
+ the Web. &app; has its own <emphasis>soldumper</emphasis>
program that lets one find and dump the contents of these
files. As of yet, I haven't discovered any nasty privacy issues
- yet, but as Gnash's SharedObject support is new, I may have just
+ yet, but as &app;'s SharedObject support is new, I may have just
been lucky.
</para>
@@ -389,17 +389,17 @@
stored in binary, big endian format. While one can look at the
data in any binary editor or hex dumper, it's easier to use
soldumper, which knows how to decode all the objects. The data
- is stored in AMF format, a simple data interhange formats used
+ is stored in AMF format, a simple data interchange format used
in several other places in SWF.
</para>
<para>
- The one security setting Gnash supports is the
+ The one security setting &app; supports is the
<emphasis>SOLReadOnly</emphasis> setting for your $HOME/.gnashrc
- file. This makes Gnash never write to a .sol file, it only reads
+ file. This prevents &app; from ever writing to a .sol file, but can
still read
them. You can also set <emphasis>SOLSafeDir</emphasis> to a safe
- subdirectory,or even remove it later, although most people
- willwant to set this path to the default one created bythe other
+ subdirectory, or even remove it later, although most people
+ will want to set this path to the default one created by the other
SWF player.
</para>
@@ -411,12 +411,12 @@
<para>
SWF movies support a form of data interchange between running
SWF movies called LocalConnection. This uses a shared memory
- segment to exchange AMF objects. While the specification claim
+ segment to exchange AMF objects. While the specification claims
an application has to register as a Listener, it turns out in
reality this isn't required. Even YouTube violates this
requirement. While one would think that data written to this
memory segment would go away when the SWF movies are done
- playing, but they are persistant, and on some systems, the data
+ playing, they are in fact persistent, and on some systems, the data
even survives a reboot. Thank you Solaris...
</para>
@@ -424,10 +424,10 @@
The Gnash utility <emphasis>dumpshm</emphasis> can be used to do
several things with these shared memory segments. This utility
can find the shared memory segment left by using other SWF
- players to see what has been left. it can then dump the contents
+ players to see what has been left. It can then dump the contents
of the shared mempory segment either by decoding the AMF objects
and printing the values, or by dumping the raw file to disk
- where you can analysze it with any other program you wish. If
+ where you can analyze it with any other program you wish. If
you run dumpshm repeatedly, you can even do a crude packet
sniffing between two SWF movies playing.
</para>
Index: doc/C/usermanual/usage.xml
===================================================================
RCS file: /sources/gnash/gnash/doc/C/usermanual/usage.xml,v
retrieving revision 1.9
retrieving revision 1.9.2.1
diff -u -b -r1.9 -r1.9.2.1
--- doc/C/usermanual/usage.xml 20 Feb 2008 11:13:31 -0000 1.9
+++ doc/C/usermanual/usage.xml 3 Mar 2008 23:46:54 -0000 1.9.2.1
@@ -16,7 +16,7 @@
may view them in the terminal window by executing the following at
the command line:
<programlisting>
- gnash --help |less
+ gnash --help | less
</programlisting>
</para>
@@ -68,8 +68,6 @@
<table id="tb-command-line-options">
<title>Gnash Command Line Options</title>
<tgroup cols='2' align='left' colsep='1' rowsep='1'>
- <colspec colname='Option' />
- <colspec colname='Function' />
<thead>
<row>
<entry>Option</entry>
@@ -116,26 +114,18 @@
</row>
<row>
<entry>
- <option>-p</option>
- </entry>
- <entry>
- Run full speed (no sleep) and log frame rate.
- </entry>
- </row>
- <row>
- <entry>
- <option>-a</option>
+ <option>-v</option>
</entry>
<entry>
- Enable Actionscript debugging.
+ Be verbose; i.e. print important messages to stdout.
</entry>
</row>
<row>
<entry>
- <option>-v</option>
+ <option>-vv</option>
</entry>
<entry>
- Be verbose; i.e. print debug messages to stdout.
+ Be very verbose; i.e. also print debug messages to stdout.
</entry>
</row>
<row>
@@ -143,7 +133,8 @@
<option>-va</option>
</entry>
<entry>
- Be verbose about movie Actions.
+ Be verbose about movie actions (for ActionScript debugging). This
+ generates very large amounts of text and will affect &app;'s
performance.
</entry>
</row>
<row>
@@ -212,7 +203,7 @@
</entry>
<entry>
Play once; exit when/if movie reaches the last
- frame. This is the default.
+ frame.
</entry>
</row>
<row>
@@ -272,6 +263,7 @@
in; this is mainly used by plugins.
</entry>
</row>
+<!--
<row>
<entry>
<option>-b bits</option>
@@ -279,12 +271,9 @@
<entry>
Bit depth of output window (for example, 16 or 32). Appropriate
bit depths depend on the renderer and GUI library used.
- <!--
- TODO: add information about which depths are suitable for each
- renderer.
- -->
</entry>
</row>
+-->
<row>
<entry>
<option>-u url</option>
@@ -307,11 +296,11 @@
</row>
<row>
<entry>
- <option>-P entrymeter</option>
+ <option>-P parameter</option>
</entry>
<entry>
- Parameters are given in ParamName=Value syntax and are mostly
- useful to the plugin to honour EMBED tags attributes
+ Parameters are given in the syntax "ParamName=Value"
and are mostly
+ useful for the plugin to honour EMBED tags attributes
or explicit OBJECT PARAM tags. A common use for -P
is to provide FlashVars
(ie: -P "FlashVars=home=http://www.gnu.org").
@@ -347,8 +336,6 @@
<table id="tb-control-keys">
<title>Gnash Interactive Control Keys</title>
<tgroup cols='2' align='left' colsep='1' rowsep='1'>
- <colspec colname='Key Combination' />
- <colspec colname='Function' />
<thead>
<row>
<entry>Key Combination</entry>
@@ -396,6 +383,8 @@
Restart the movie.
</entry>
</row>
+
+<!--
<row>
<entry>
<option>CTRL-[ or kp-</option>
@@ -412,6 +401,7 @@
Step forward one frame.
</entry>
</row>
+-->
<row>
<entry>
<option>CTRL-L</option>
@@ -455,6 +445,7 @@
Debug. Test the call_method() function.
</entry>
</row>
+<!--
<row>
<entry>
<option>CTRL-B</option>
@@ -463,6 +454,7 @@
Toggle the background color.
</entry>
</row>
+-->
</tbody>
</tgroup>
</table>
Index: macros/docbook.m4
===================================================================
RCS file: /sources/gnash/gnash/macros/docbook.m4,v
retrieving revision 1.27.2.1
retrieving revision 1.27.2.2
diff -u -b -r1.27.2.1 -r1.27.2.2
--- macros/docbook.m4 22 Feb 2008 08:35:46 -0000 1.27.2.1
+++ macros/docbook.m4 3 Mar 2008 23:46:56 -0000 1.27.2.2
@@ -25,6 +25,11 @@
DB2X_VERSION=
if test x"$docbook" = x"yes"; then
+ dnl install-info is used to update entries in the dirs file, used by
+ dnl info to find all of it files.
+ AC_PATH_PROG(INSTALL_INFO, install-info, $PATH:/usr/sbin)
+ AC_SUBST(INSTALL_INFO)
+ AM_CONDITIONAL(ENABLE_INFO, test x${INSTALL_INFO} != x)
docbook_styles=
AC_ARG_WITH(docbook_styles, AC_HELP_STRING([--with-docbook-styles],
[directory where Docbook stylesheets are]), with_docbook_styles=${withval})
if test x"${with_docbook_styles}" != x ; then
Index: packaging/Makefile.am
===================================================================
RCS file: /sources/gnash/gnash/packaging/Makefile.am,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -b -r1.1.2.1 -r1.1.2.2
--- packaging/Makefile.am 21 Feb 2008 22:32:15 -0000 1.1.2.1
+++ packaging/Makefile.am 3 Mar 2008 23:46:56 -0000 1.1.2.2
@@ -16,6 +16,16 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-SUBDIRS = debian doc ipkg redhat
+SCRIPTS = install-gnash.sh
-EXTRA_DIST = alp.am bsd.am deb.am rpm.am snapshot.am ipkg.am install-gnash.sh
+AMFILES = \
+ alp.am \
+ bsd.am \
+ deb.am \
+ rpm.am
+ snapshot.am \
+ ipkg.am
+
+EXTRA_DIST = \
+ $(AMFILES) \
+ $(SCRIPTS)
Index: packaging/bsd.am
===================================================================
RCS file: /sources/gnash/gnash/packaging/bsd.am,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -b -r1.1 -r1.1.2.1
--- packaging/bsd.am 7 Feb 2008 03:20:45 -0000 1.1
+++ packaging/bsd.am 3 Mar 2008 23:46:57 -0000 1.1.2.1
@@ -27,5 +27,18 @@
$(MAKE) plist
$(MAKE) package
+# Build a .deb snapshot, which means we have to munge the date
+# into the proper files to build a package with the version in
+# all the right places. This involves editing the debian/changelog
+# file. Configure.ac is edited by the snapshot target.
+snapshot-bsd: # snapshot
+ now=`date "+%Y%m%d"`; \
+ snapshot_dir="gnash-$${now}cvs"; \
+ mv -f $${snapshot_dir}/packaging/debian/changelog
$${snapshot_dir}/packaging/debian/changelog.orig; \
+ sed -e "s:(.*):($${now}cvs):"
$${snapshot_dir}/packaging/debian/changelog.orig >
$${snapshot_dir}/packaging/debian/changelog; \
+ sed -e "s:(.*):($${now}cvs):"
$${snapshot_dir}/packaging/debian/changelog.orig >
$${snapshot_dir}/packaging/debian/changelog; \
+ ln -s $${snapshot_dir}/packaging/debian $${snapshot_dir}/debian;\
+ (cd $${snapshot_dir}; dpkg-buildpackage)
+
.PHONY: bsd-pkg
Index: packaging/deb.am
===================================================================
RCS file: /sources/gnash/gnash/packaging/deb.am,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -b -r1.1 -r1.1.2.1
--- packaging/deb.am 7 Feb 2008 03:20:45 -0000 1.1
+++ packaging/deb.am 3 Mar 2008 23:46:57 -0000 1.1.2.1
@@ -22,6 +22,23 @@
cp -fr $(srcdir)/packaging/debian gnash-${VERSION}/
(cd gnash-${VERSION}; dpkg-buildpackage)
-.PHONY : deb debian
-
+# Build a .deb snapshot, which means we have to munge the date
+# into the proper files to build a package with the version in
+# all the right places. This involves editing the debian/changelog
+# file. Configure.ac is edited by the snapshot target.
+snapshot-deb: # snapshot
+ now=`date "+%Y%m%d"`; \
+ snapshot_dir="gnash-$${now}cvs"; \
+ if test ! -d $${snapshot_dir}/debian; then \
+ cp -rp $(srcdir)/packaging/debian $${snapshot_dir}/; \
+ fi; \
+ if test -e $${snapshot_dir}/debian/changelog; then \
+ mv -f $${snapshot_dir}/debian/changelog
$${snapshot_dir}/debian/changelog.orig; \
+ sed -e "s:(.*):($${now}cvs):" $${snapshot_dir}/debian/changelog.orig
> $${snapshot_dir}/debian/changelog; \
+ fi; \
+ (cd $${snapshot_dir}; dpkg-buildpackage -rfakeroot \
+ -e"\"Rob Savoye <address@hidden>\""
+ -m"\"Rob Savoye <address@hidden>\""
+ )
+.PHONY : deb debian
Index: packaging/snapshot.am
===================================================================
RCS file: /sources/gnash/gnash/packaging/snapshot.am,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -b -r1.5 -r1.5.2.1
--- packaging/snapshot.am 16 Feb 2008 23:12:59 -0000 1.5
+++ packaging/snapshot.am 3 Mar 2008 23:46:57 -0000 1.5.2.1
@@ -32,7 +32,7 @@
# This uses the default version for Gnash. which is 'cvs'. So we
# rename it to the dir we want to stay clear. Then we change the default
# version from 'cvs' to a date stamped version of cvs, like '20080202cvs'
-snapshot: distdir
+snapshot: distdir dist-hook
address@hidden "+%Y%m%d"`; \
pkgname="gnash-$${now}cvs"; \
snapshot_dir="$${pkgname}"; \
@@ -47,7 +47,7 @@
$${snapshot_dir}/configure.ac.orig > $${snapshot_dir}/configure.ac;
\
cd $${snapshot_dir} ; ./autogen.sh; cd .. ;\
fi; \
- tar zcvf $${snapshot_tar} --exclude=$${snapshot_dir}/autom4te.cache \
+ tar zcvf $${snapshot_tar} --exclude="*CVS"
--exclude=$${snapshot_dir}/autom4te.cache \
--exclude=$${snapshot_dir}/configure.ac.orig $${snapshot_dir}
# $(RM) -fr $${snapshot_dir}
@@ -65,12 +65,15 @@
plugindir=/usr/lib/mozilla/plugins; \
fi; \
cd $${snapshot_build}; ../configure \
- --disable-dependency-tracking --disable-rpath \
+ $(SNAPSHOT_CONFIGURE_FLAGS) \
+ --disable-dependency-tracking\
+ --disable-rpath \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--with-plugindir=$${plugindir} \
- --disable-static
+ --disable-static \
+ --enable-shared
# --with-extensions=all
# --enable-gui=all
@@ -80,7 +83,8 @@
snapshot_dir="$${pkgname}"; \
snapshot_build="$${snapshot_dir}/_build"; \
$(LN_S) -f $${snapshot_build}/packaging/doc
$${snapshot_build}/packaging/; \
- $(MAKE) $(AM_MAKEFLAGS) -C $${snapshot_build} all
+ $(MAKE) $(AM_MAKEFLAGS) -C $${snapshot_build}; \
+ $(MAKE) $(AM_MAKEFLAGS) -C $${snapshot_build}/doc/C info man html
# Install a package. Afterwards we link to the prebuilt man pages incase
# DocBook and DocBook2X aren't installed on this machine.
Index: packaging/debian/changelog
===================================================================
RCS file: /sources/gnash/gnash/packaging/debian/changelog,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -b -r1.5 -r1.5.2.1
--- packaging/debian/changelog 13 Feb 2008 03:15:17 -0000 1.5
+++ packaging/debian/changelog 3 Mar 2008 23:46:57 -0000 1.5.2.1
@@ -1,20 +1,367 @@
-gnash (20080112cvs) unstable; urgency=low
+gnash (0.8.2~cvs20080302t0056-0cvs) snapshot; urgency=low
- * klash is now called kde-gnash. Configure options have changed also.
+ * be able to make our own deb packages.
- -- Rob Savoye <address@hidden> Fri, 25 Apr 2006 4:20:00 +0600
+ -- Rob Savoye <address@hidden> Sun, 3 March 2008 04:20:00 +0100
- * Initial release Closes: #347352
+gnash (0.8.2~cvs20080223t0056-0ubuntu1) UNRELEASED; urgency=low
- -- Rob Savoye <address@hidden> Fri, 25 Apr 2006 4:20:00 +0600
+ * package 0.8.2 preview
+ * drop pkglibs that don't exist anymore from gnash-common.install
+ and add new libgnashmedia-*.so to package
+ - update debian/gnash-common.install
+ * update binaries installed by gnash-tools.install: drop usr/bin/gparser
+ and add usr/bin/soldumper as well as usr/bin/dumpshm
+ - update debian/gnash-tools.install
+ * disable tests by configure flags and drop obsolete disable-testsuite
+ patch
+ - update debian/rules
+ - drop debian/patches/disable-testsuite
+ - update debian/patches/series
+ * run make install-plugins to install the plugins and use /usr/lib/gnash
+ as --with-npapi-plugindir= in during configure
+ - update debian/rules
- * Install the info file.
+ -- Alexander Sack <address@hidden> Sat, 23 Feb 2008 01:58:44 +0100
- -- Rob Savoye <address@hidden> Fri, 7 Apr 2006 4:20:00 +0600
+gnash (0.8.1-0ubuntu3) gutsy; urgency=low
- * Revised to match how the plugin gets installed, and add klash.
+ * fix package description and use SWF instead of Flash
- -- Miriam Ruiz <address@hidden> Fri, 20 Jan 2006 23:07:01 +0100
+ -- Michael Vogt <address@hidden> Wed, 10 Oct 2007 14:25:42 +0200
- * Revised to match how the plugin gets installed, and add klash.
+gnash (0.8.1-0ubuntu2) gutsy; urgency=low
+ * update gnash license to GPLv3 in debian/copyright. (LP: #147913)
+
+ -- Alexander Sack <address@hidden> Thu, 04 Oct 2007 11:22:21 +0200
+
+gnash (0.8.1-0ubuntu1) gutsy; urgency=low
+
+ * New upstream version 0.8.1 final - UVFe acked in LP: #144396
+
+ [ Mario Danic ]
+ * debian/mozilla-plugin-gnash.prerm: Fixed upgrade procedures
+ for people with ubuntu3 and ubuntu4 packages
+
+ [ Alexander Sack ]
+ * debian/mozilla-plugin-gnash.prerm: run update-alternative --remove-all
+ when no other alternative was installed. (LP: #133197)
+ * debian/mozilla-plugin-gnash.postinst: install gnash flash alternative for
+ midbrowser.
+ * debian/mozilla-plugin-gnash.prerm: remove midbrowser alternative in prerm
+ accordingly.
+ * debian/mozilla-plugin-gnash.dirs: take care that midbrowser plugins dir
+ exists during postinst
+ * update patches in turn of changes to upstream code base:
+ - drop use_pkglibdir_for_unversioned_libs patch - applied upstream
+ - update disable-testsuite which didn't apply because of change code base
+ in proximity
+ * debian/gnash-common.install: install shared libs of final releases as well
+
+ -- Alexander Sack <address@hidden> Thu, 13 Sep 2007 10:10:38 +0200
+
+gnash (0.8.1~trunk.070802-0ubuntu5) gutsy; urgency=low
+
+ * Rebuild for boost 1.34.0 -> 1.34.1 transistion.
+
+ -- Steve Kowalik <address@hidden> Thu, 13 Sep 2007 11:05:21 +1000
+
+gnash (0.8.1~trunk.070802-0ubuntu4) gutsy; urgency=low
+
+ * Fixed postinst and prerm procedures
+
+ -- Mario Danic <address@hidden> Sun, 12 Aug 2007 00:56:48 +0200
+
+gnash (0.8.1~trunk.070802-0ubuntu3) gutsy; urgency=low
+
+ * debian/control: Addeed browsers ID's to mozilla-plugin-gnash
+ * debian/mozilla-plugin-gnash.postinst: cleanup of update-alternative
+ installation procedures
+ * debian/mozilla-plugin-gnash.prerm: cleanup of update-alternatives
+ removal procedures
+
+ -- Mario Danic <address@hidden> Sat, 11 Aug 2007 15:29:52 +0200
+
+gnash (0.8.1~trunk.070802-0ubuntu2) gutsy; urgency=low
+
+ * debian/mozilla-plugin-gnash.postinst: use right path for alternative
+ * debian/mozilla-plugin-gnash.prerm: fix wrong path for alternatives
+
+ -- Alexander Sack <address@hidden> Fri, 3 Aug 2007 04:08:28 +0200
+
+gnash (0.8.1~trunk.070802-0ubuntu1) gutsy; urgency=low
+
+ Update source for trunk build 070802 aka preview 0.8.1:
+ bzr repo: https://code.launchpad.net/~vcs-imports/gnash/trunk
+ revno: 5534
+
+ Redo and cleanup packaging in consequence of upstream buildsystem
+ refactoring:
+
+ * debian/rules: dropping obsolete --enable-sound and --enable-mp3 and
+ the bogus --enable-static switch; fixing --enable-gui switch
+ * debian/patches/series: don't apply no-kde-ldflags anymore ... applied
+ upstream
+ * debian/patches/series: don't apply easy-codec-install anymore ... applied
+ upstream
+ * debian/rules: use agg renderer
+ * debian/patches/{disable-testsuite,series}: disable testsuite patch
+ * debian/control: drop firefox-dev from build-depends
+ * debian/patches/*: drop ming headers patch - not used
+ * debian/rules: use enable-gui='gtk,kde'
+ * debian/rules: dropping obsolete --enable-sound and --enable-mp3 and the
+ bogus --enable-static switch; fixing --enable-gui switch
+ * debian/patches/use_pkglibdir_for_unversioned_libs, debian/patches/series:
+ install libs in pkglibdir instead of just libdir - as they are unversioned
+ * reorganize gnash packaging to take upstream changes into account:
+ all common files are now stored in pkglibdir and provided by gnash-common
+ package; in turn no libgnash0 nor libklash0 package exist anymore; gui
+ code is not linked into the binaries, which are provided by gnash and klash
+ package respectively; since no stable lib api is provided anymore
+ libgnash-dev package is now just gnash-dev (though its currently disabled
+ completely).
+ * debian/gnash-common.install: install those libs we need explicitly to
+ prevent libgnashplugin.so from getting pulled into gnash-common package
+ * debian/rules: don't run dh_makeshlibs for libgnash0 libklash0 anymore ...
+ as they don't exist
+ * debian/control: make gnash-common conflicts/replaces on libklash0,
+ libgnash0, gnash << 0.8.1~
+ * debian/gnash.manpages: remove manpages for gnash package as gnash manpage
+ is now shipped in gnash-common
+ * debian/TODO,debian/overrides/libgnash0,debian/overrides/libklash0:
+ dropping these old/unused files from bzr.
+
+ Support ubuntu flashplugin-alternative:
+ * debian/mozilla-plugin-gnash.postinst,debian/mozilla-plugin-gnash.prerm:
+ use flashplugin-alternative to i nstall plugin for browsers
+ * debian/mozilla-plugin-gnash.links: remove links to plugin-host applications
+ as they are now installed by alternatives
+ * debian/mozilla-plugin-gnash.dirs: ensure existence of plugin host
directories
+
+ -- Alexander Sack <address@hidden> Thu, 02 Aug 2007 16:49:57 +0000
+
+gnash (0.8.0~cvs20070611.1016-1ubuntu3) gutsy; urgency=low
+
+ * Rebuild for the libcurl transition mess.
+
+ -- Steve Kowalik <address@hidden> Thu, 5 Jul 2007 01:35:59 +1000
+
+gnash (0.8.0~cvs20070611.1016-1ubuntu2~mt1) feisty; urgency=low
+
+ * feisty backport for mozillateam preview archive
+
+ -- Alexander Sack <address@hidden> Sun, 17 Jun 2007 17:37:00 +0200
+
+gnash (0.8.0~cvs20070611.1016-1ubuntu2) gutsy; urgency=low
+
+ * debian/control: add libgstreamer-plugins-base0.10-dev to fix ftbfs
+
+ -- Alexander Sack <address@hidden> Wed, 13 Jun 2007 09:41:59 +0200
+
+gnash (0.8.0~cvs20070611.1016-1ubuntu1) gutsy; urgency=low
+
+ * debian/patches/gnash_easy_codec_install: initial version of easy codec
+ install patch for gnash
+ * debian/patches/series: adapt quilt series file accordingly
+ * debian/control: adapt Maintainer field for ubuntu upload
+ * debian/control: Depends, Recommends and Suggests for libgnash0 and
libklash0
+ changed in preparation of easy-codec-installation:
+ demote gstreamer0.10-fluendo-mp3, gstreamer0.10-ffmpeg from Recommends
to Suggests
+ promote gstreamer0.10-plugins-base, gstreamer0.10-alsa from Recommends
to Depends
+
+ -- Alexander Sack <address@hidden> Tue, 12 Jun 2007 15:50:37 +0200
+
+gnash (0.8.0~cvs20070611.1016-1) unstable; urgency=low
+
+ * New CVS snapshot 20070611.1016 from release-0-8-0 branch
+ * debian/libklash0.install, debian/control, debian/rules: produce libklash0
+ package and provide proper shlibs version info
+ * debian/patches/ming_headers.patch: resurrect ming_headers patch that was
+ previously reverted
+ * debian/patches/exclude-testsuite-from-built: add patch to exclude
+ testsuite from being build
+ * debian/patches/no-kde-ldflags: take care that gnash binaries don't pull in
+ kde libs/depends
+ * debian/patches/series: update quilt series accordingly
+ * debian/rules: use --enable-renderer=opengl for now in order to build klash
+ without doing hackish stuff> * debian/control: omit extra whitespace before
+ Homepage: line *all* package descriptions
+ * debian/control: drop swfmill from build-depends (since we don't build the
+ testsuite atm)
+ * debian/control: add Alexander Sack <address@hidden> to Uploaders field
+ * debian/control: new packages for kde: libklash0 and klash; fix depends of
+ konqueror-plugin-gnash package accordingly
+ * debian/control: drop libsdl1.2-dev, libsdl-mixer1.2-dev, libfltk1.1-dev
+ from build-depends
+ * debian/control: use automake1.9 | automake in Build-Depends
+ * debian/control: don't support gstreamer 0.8 anymore -> drop from
Build-Depends
+
+ -- Alexander Sack <address@hidden> Tue, 12 Jun 2007 14:10:00 +0200
+
+gnash (0.7.2+cvs20070525.0721-1) unstable; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ * Added ming_headers.patch patch so that the missing definitions in ming
+ headers are available for the check. Closes: #425888
+
+ -- Miriam Ruiz <address@hidden> Fri, 25 May 2007 07:21:23 +0000
+
+gnash (0.7.2+cvs20070518.1557-1) unstable; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ * Depending on libcurl?-gnutls-dev instead of libcurl?-openssl-dev for
+ not depending on OpenSSL (incompatible with GPL license). Closes: #423884
+ * Closes: #423433 , memory corruption vulnerability in gnash, due to a out
+ of bounds memory access ( http://savannah.gnu.org/bugs/?19774 )
+ * gstreamer0.10-audiosink is a virtual package, modifying control.
+ * Updated dependencies to use libcurl4 instead of libcurl3.
+ * Depending on swfmill for check (as well as from ming and mtasc)
+ * Make check is fatal error now.
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Fri, 18 May 2007 15:57:38 +0000
+
+gnash (0.7.2+cvs20070512.1527-1) unstable; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ + YouTube seems to be working now
+ http://lists.gnu.org/archive/html/gnash-dev/2007-05/msg00000.html
+ * Enabled gstreamer in configure: --enable-gstreamer --enable-media=gst
+ * Changed to use AGG renderer now: --enable-renderer=agg
+ * Added build dependency: libagg-dev
+ * gstreamer0.10-plugins-base, gstreamer0.10-alsa, gstreamer0.10-ffmpeg,
+ and gstreamer0.10-audiosink are needed for YouTube. Added as recommends
+ http://www.mail-archive.com/address@hidden/msg00624.html
+ * Added gstreamer0.10-fluendo-mp3 to recommends in libgnash0
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Sat, 12 May 2007 17:27:45 +0200
+
+gnash (0.7.2+cvs20070428.1515-2) experimental; urgency=low
+
+ * Added binary package: cygnal (media server)
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Sat, 28 Apr 2007 21:45:12 +0200
+
+gnash (0.7.2+cvs20070428.1515-1) unstable; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ * Added dependencies: libtool, libltdl3, libboost-date-time-dev,
+ libavcodec-dev, libavformat-dev
+ * Added dependencies for checking: libming-dev, libming-util, mtasc
+ * Removed binary package: klash (KDE-based standalone player)
+ * Added binary package: cygnal (media server)
+ * Added #include <cctype> to server/StringPredicates.h so that it
+ compiles with gcc 4.3. Patch: gcc4.3.patch (Closes: #417210)
+ * Added link to iceweasel plugins directory (Closes: #399920)
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Thu, 26 Apr 2007 10:29:52 +0200
+
+gnash (0.7.2-1) unstable; urgency=low
+
+ * New Alpha Release from Upstream:
+ + Polling main loop replaced with event driven framework for GTK.
+ + New GUI abstraction layer supporting GTK2, KDE, SDL, and a bare
+ framebuffer.
+ + Movies are parsed by a background thread, so they start playing
+ while still loading.
+ + Plugin supports web navigation and starts playing while the stream
+ is loading.
+ + New AntiGrain (AGG) 2D backend added for framebuffer devices without
+ OpenGL support.
+ + New Framebuffer GUI for devices without X11.
+ + Sound now works using ffmpeg, Gstreamer, or libMad.
+ + Supports cross configuration and cross compiling for embedded targets.
+ + A whole slew of minor bugs that kept various movies from playing.
+
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Sat, 18 Nov 2006 11:57:04 +0000
+
+gnash (0.7.1+cvs20061014.1744-1) unstable; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ * New soundhandler for gnash. It uses SDL (not SDL_mixer) for
+ soundhandling, uses ffmpeg or libmad for mp3 decoding and replaces
+ the old SDL_mixer based soundhandler. Changed --enable-sound=sdl in
+ configure.
+ * Changed Firefox plugin directory from /usr/lib/mozilla-firefox/plugins/
+ to /usr/lib/firefox/plugins/
+
+ -- Miriam Ruiz <address@hidden> Sat, 14 Oct 2006 17:45:57 +0000
+
+gnash (0.7.1+cvs20061006.1521-1) unstable; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ * Added usr/lib/kde3/libklashpart.la to konqueror-plugin-gnash so that
+ Konqueror can detect the plugin. Thanks to J.Rinas <address@hidden>.
+ Closes: #384477. Closes: #389445.
+ * Added --without-gcc-arch to ./configure in debian/rules so that the
+ build script don't pass options like "-march=prescot" to gcc even if
+ the CPU of the build system supports those. Thanks to Timo Juhani
+ Lindfors <address@hidden>. Closes: #390919
+ * Added libboost-dev and libboost-thread-dev to Build-Depends.
+ * Added cmdline.patch to solve problem of cmdline parser failure
+ with "a=b.swf". Thanks to Robert Millan <address@hidden>.
+ Closes: #383770
+ * Removed patches: amf.patch getopt.patch
+ * Leaving the CVS dirs in package. They might be useful for updating the
+ source tree for testing stuff. Closes: #390283
+ * Added make check to debian/rules, even though the build won't stop if
+ failures are found.
+ * Beautify debian/rules so that output can be more easily analyzed.
+
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Fri, 6 Oct 2006 17:22:59 +0200
+
+gnash (0.7.1+cvs20060924.1330-1) unstable; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ * Modified building system for using quilt.
+ * Added gnash dependency to mozilla-plugin-gnash. Closes: #389141
+ * Added libfltk1.1-dev as a build dependency.
+ * Modified desktop files, they had a wrong program name. Closes: #384628
+ * Added copyright notice for Bitstream Vera Fonts to debian/copyright
+
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Sun, 24 Sep 2006 15:31:43 +0200
+
+gnash (0.7.1+cvs20060920.2136-1) unstable; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ * Added build dependency: libcurl3-gnutls-dev | libcurl3-openssl-dev
+ * Temporarily removed the -dev package until the API + ABI are more stable
+ * Temporarily added a versioned dependency on libgnash0
+ * Make package bin-NMU-able by using ${binary:Version} and Build-Depend on
+ dpkg-dev (>= 1.13.19)
+
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Wed, 20 Sep 2006 21:37:43 +0000
+
+gnash (0.7.1+cvs20060820.2237-1) experimental; urgency=low
+
+ * New Upstream Release. Downloaded from CVS.
+ * Added icon and .desktop file shortcut.
+ * Build-Depend on libxul-dev instead of mozilla-dev.
+ * Made minor modifications to the code to make it compile.
+ * Updated Standards-Version to 3.7.2 (no changes needed).
+ * Upstream confirms that the code that kills the processes has
+ been rewritten. Closes: #374996
+
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Mon, 21 Aug 2006 00:38:53 +0200
+
+gnash (0.7.1-1) experimental; urgency=low
+
+ * Initial release. Closes: #347352
+
+ * Upload sponsored by Petter Reinholdtsen.
+
+ -- Miriam Ruiz <address@hidden> Sun, 7 May 2006 00:54:46 +0000
Index: packaging/debian/control
===================================================================
RCS file: /sources/gnash/gnash/packaging/debian/control,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -b -r1.6 -r1.6.2.1
--- packaging/debian/control 13 Feb 2008 03:15:17 -0000 1.6
+++ packaging/debian/control 3 Mar 2008 23:46:58 -0000 1.6.2.1
@@ -1,64 +1,143 @@
Source: gnash
Priority: optional
-Maintainer: Miriam Ruiz <address@hidden>
-Build-Depends: debhelper (>= 4.0.0), autoconf, automake, libxmu-dev,
- dejagnu, autotools-dev, libxml2-dev, libjpeg-dev, libpng-dev
-# libsdl1.2-dev libgtkglext1-dev
-Standards-Version: 3.6.2
+Maintainer: Alexander Sack <address@hidden>
+XSBC-Original-Maintainer: Miriam Ruiz <address@hidden>
+Uploaders: Alexander Sack <address@hidden>
+Build-Depends: dpkg-dev (>= 1.13.19), debhelper (>= 4.0.0), quilt, autoconf,
automake1.9 | automake, libtool, libltdl3-dev, help2man, libxmu-dev, dejagnu,
autotools-dev, libboost-dev, libboost-thread-dev, libxml2-dev, libjpeg-dev,
libpng12-dev | libpng-dev, libagg-dev, libgstreamer0.10-dev, libpango1.0-dev |
pango-devel, libgtkglext1-dev, libmad0-dev, libdirectfb-dev, libkonq4-dev,
libcurl4-gnutls-dev | libcurl3-gnutls-dev | libcurl4-openssl-dev |
libcurl3-openssl-dev, libcaca-dev, libboost-date-time-dev, libavcodec-dev,
libavformat-dev, libming-dev, libming-util, mtasc,
libgstreamer-plugins-base0.10-dev
+Standards-Version: 3.7.2
Section: utils
+Xs-Vcs-Bzr: http://bazaar.launchpad.net/~ubuntu-core-dev/gnash/ubuntu
-Package: libgnash0
+Package: gnash-common
Section: libs
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: free Flash movie player - shared libraries
- Gnash is a Free Flash movie player, which works either standalone, or
- as a Firefox/Mozilla plugin. This package includes the shared
- libraries.
+Depends: ${shlibs:Depends}, ${misc:Depends}, gstreamer0.10-plugins-base,
gstreamer0.10-alsa
+Suggests: gstreamer0.10-fluendo-mp3, gstreamer0.10-ffmpeg
+Conflicts: libgnash0 (<< 0.8.1~), gnash (<< 0.8.1~), libklash0 (<< 0.8.1~)
+Replaces: libgnash0 (<< 0.8.1~), gnash (<< 0.8.1~), libklash0 (<< 0.8.1~)
+Description: free SWF movie player - common files/libraries
+ Gnash is a free Flash movie player, which works either standalone, or as
+ plugin for Firefox/Mozilla or Konqueror.
+ .
+ This package includes the common, gui-independent files/libraries
.
Homepage: http://www.gnu.org/software/gnash/
Package: gnash
Section: utils
Architecture: any
-Depends: libgnash0 (= ${Source-Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: free Flash movie player
- Gnash is a Free Flash movie player, which works either standalone, or as a
- Firefox/Mozilla plugin.
+Depends: gnash-common (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: free SWF movie player
+ Gnash is a free Flash movie player, which works either standalone, or as
+ plugin for Firefox/Mozilla or Konqueror. Currently it is in a alpha state.
+ The plugins are under heavy development at this time.
+ .
+ Gnash supports the majority of Flash opcodes up to SWF version 7, and
+ a wide sampling of ActionScript classes for SWF version 8.5. All the
+ core ones are implemented, and many of the newer ones work, but may be
+ missing some of their methods.
+ .
+ Included in the Gnash is an XML based messaging system, as specified in
+ the Flash specification. This lets a flash movie communicate over a TCP/IP
+ socket, and parse the incoming XML message. This lets a movie be a remote
+ control for other devices or applications.
+ .
+ This package includes the standalone GTK+-based OpenGL player.
.
- Gnash supports the current Shockwave format, version 7 reasonably well,
- and some version 8 and 9 files. Support for v8/9 is under development.
- While all the ActionScript 2 classes exist, not all of the methods
- defined by the SWF format documentation are implemented however, so
- not all flash movies work 100% if they utilize any of the
- unimplemented methods. This is one of the areas to work on to achieve
- full version 9 compliance.
+ Homepage: http://www.gnu.org/software/gnash/
+
+Package: klash
+Section: utils
+Architecture: any
+Depends: gnash-common (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: free SWF movie player - standalone player for KDE
+ Gnash is a free Flash movie player, which works either standalone, or as
+ plugin for Firefox/Mozilla or Konqueror. Currently it is in a alpha state.
+ The plugins are under heavy development at this time.
+ .
+ Gnash supports the majority of Flash opcodes up to SWF version 7, and
+ a wide sampling of ActionScript classes for SWF version 8.5. All the
+ core ones are implemented, and many of the newer ones work, but may be
+ missing some of their methods.
+ .
+ Included in the Gnash is an XML based messaging system, as specified in
+ the Flash specification. This lets a flash movie communicate over a TCP/IP
+ socket, and parse the incoming XML message. This lets a movie be a remote
+ control for other devices or applications.
.
- Included in the Gnash is an XML based messaging system, as specified
- in the Flash specification. This lets a flash movie communicate over
- a TCP/IP socket, and parse the incoming XML message. This lets a
- movie be a remote control for other devices or applications.
+ Klash is a free standalone Flash movie player for KDE.
.
Homepage: http://www.gnu.org/software/gnash/
-Package: gnash-plugin
+Package: gnash-tools
Section: utils
Architecture: any
-Depends: libgnash0 (= ${Source-Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: free Flash movie player - Plugin
- Gnash is a Free Flash movie player, which works either standalone, or
- as a Firefox/Mozilla plugin. This package includes the plugin for
- Mozilla Web Browser.
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: free SWF movie player - Command-line Tools
+ Gnash is a free Flash movie player, which works either standalone, or as
+ plugin for Firefox/Mozilla or Konqueror. Currently it is in a alpha state.
+ The plugins are under heavy development at this time.
+ .
+ Gnash supports the majority of Flash opcodes up to SWF version 7, and
+ a wide sampling of ActionScript classes for SWF version 8.5. All the
+ core ones are implemented, and many of the newer ones work, but may be
+ missing some of their methods.
+ .
+ Included in the Gnash is an XML based messaging system, as specified in
+ the Flash specification. This lets a flash movie communicate over a TCP/IP
+ socket, and parse the incoming XML message. This lets a movie be a remote
+ control for other devices or applications.
+ .
+ This package includes command-line utilities based in gnash.
.
Homepage: http://www.gnu.org/software/gnash/
-Package: gnash-klash
+Package: gnash-cygnal
Section: utils
Architecture: any
-Depends: libgnash0 (= ${Source-Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: free Flash movie player - Plugin
- Gnash is a Free Flash movie player, which works either standalone, or
- as a Firefox/Mozilla plugin. This package includes the plugin for the
- Konqueror Web Browser.
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: free SWF movie player - Media server
+ Gnash is a free Flash movie player, which works either standalone, or as
+ plugin for Firefox/Mozilla or Konqueror. Currently it is in a alpha state.
+ The plugins are under heavy development at this time.
+ .
+ Gnash supports the majority of Flash opcodes up to SWF version 7, and
+ a wide sampling of ActionScript classes for SWF version 8.5. All the
+ core ones are implemented, and many of the newer ones work, but may be
+ missing some of their methods.
+ .
+ Included in the Gnash is an XML based messaging system, as specified in
+ the Flash specification. This lets a flash movie communicate over a TCP/IP
+ socket, and parse the incoming XML message. This lets a movie be a remote
+ control for other devices or applications.
+ .
+ Cygnal is Gnash's media server.
+ .
+ Homepage: http://www.gnu.org/software/gnash/
+
+Package: mozilla-plugin-gnash
+Section: utils
+Architecture: any
+Depends: gnash (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
+Xb-Npp-Applications:
ec8030f7-c20a-464f-9b0e-13a3a9e97384,92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a,aa5ca914-c309-495d-91cf-3141bbb04115
+Xb-Npp-MimeType: application/x-shockwave-flash
+Xb-Npp-Name: Gnash SWF Player
+Description: free SWF movie player - Plugin for Mozilla and derivatives
+ Gnash is a free Flash movie player, which works either standalone, or as
+ plugin for Firefox/Mozilla or Konqueror.
+ .
+ This package includes the plugin for Firefox/Mozilla Web Browser.
+ .
+ Homepage: http://www.gnu.org/software/gnash/
+
+Package: konqueror-plugin-gnash
+Section: utils
+Architecture: any
+Depends: klash (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
+Description: free SWF movie player - Plugin for Konqueror
+ Gnash is a free Flash movie player, which works either standalone, or as
+ plugin for Firefox/Mozilla or Konqueror.
+ .
+ This package includes the plugin for Konqueror.
.
Homepage: http://www.gnu.org/software/gnash/
Index: packaging/debian/copyright
===================================================================
RCS file: /sources/gnash/gnash/packaging/debian/copyright,v
retrieving revision 1.2
retrieving revision 1.2.4.1
diff -u -b -r1.2 -r1.2.4.1
--- packaging/debian/copyright 1 Jul 2007 10:54:14 -0000 1.2
+++ packaging/debian/copyright 3 Mar 2008 23:46:58 -0000 1.2.4.1
@@ -1,9 +1,11 @@
This package was debianized by Miriam Ruiz <address@hidden> on
-Fri, 20 Jan 2006 23:07:01 +0100.
+Sun, 7 May 2006 00:54:46 +0000.
-It was downloaded from http://www.gnu.org/software/gnash/
+It was downloaded from ftp://ftp.gnu.org/pub/gnu/gnash/
-Copyright Holder: Rob Savoye <address@hidden>
+Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+
+Main Author: Rob Savoye <address@hidden>
Authors of Gameswf, which was the original code base for Gnash:
Thatcher Ulrich <address@hidden>
@@ -18,7 +20,7 @@
This package 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
+ the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This package is distributed in the hope that it will be useful,
@@ -27,9 +29,557 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this package; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
On Debian systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-licenses/GPL'.
+Public License can be found in '/usr/share/common-licenses/GPL-3'.
+
+
+
+Other licenses:
+
+** Server:
+
+ Linking Gnash statically or dynamically with other modules is making
+ a combined work based on Gnash. Thus, the terms and conditions of
+ the GNU General Public License cover the whole combination.
+
+ In addition, as a special exception, the copyright holders of Gnash give
+ you permission to combine Gnash with free software programs or
+ libraries that are released under the GNU LGPL and/or with Mozilla,
+ so long as the linking with Mozilla, or any variant of Mozilla, is
+ through its standard plug-in interface. You may copy and distribute
+ such a system following the terms of the GNU GPL for Gnash and the
+ licenses of the other code concerned, provided that you include the
+ source code of that other code when and as the GNU GPL requires
+ distribution of source code.
+
+ Note that people who make modified versions of Gnash are not obligated
+ to grant this special exception for their modified versions; it is
+ their choice whether to do so. The GNU General Public License gives
+ permission to release a modified version without this exception; this
+ exception also makes it possible to release a modified version which
+ carries forward this exception.
+
+** Tuffy Fonts:
+
+ Tuffy fonts have been created by Thatcher Ulrich (http://tulrich.com)
+ with FontForge 1.0 (http://fontforge.sf.net).
+ The fonts, including hint instructions, have been donated to the Public
Domain.
+ Do whatever you want with them.
+
+** plugin/mozilla-sdk/include/npruntime.h:
+
+ Copyright © 2004, Apple Computer, Inc. and The Mozilla Foundation.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla
+ Foundation ("Mozilla") nor the names of their contributors may be used
+ to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS
+ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR
+ THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+** Parts of plugin/mozilla-sdk/include/prerror.h:
+
+ Copyright (C) 1987, 1988 Student Information Processing Board of the
+ Massachusetts Institute of Technology.
+
+ Permission to use, copy, modify, and distribute this software and its
+ documentation for any purpose and without fee is hereby granted, provided
+ that the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation, and that the names of M.I.T. and the M.I.T. S.I.P.B. not be
+ used in advertising or publicity pertaining to distribution of the software
+ without specific, written prior permission. M.I.T. and the M.I.T. S.I.P.B.
+ make no representations about the suitability of this software for any
+ purpose. It is provided "as is" without express or implied warranty.
+
+
+
+** Documentation (It is not included in binary packages, but it is in source)
+
+Copyright (c) 2005, 2006 Rob Savoye
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1 or
+ any later version published by the Free Software Foundation with no
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+
+
+ GNU Free Documentation License
+ Version 1.2, November 2002
+
+
+ Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The "Document", below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as "you". You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".) To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+
+** testsuite/media/Bitstream Vera Sans.fdb
+
+Font Definition Block (fdb) for embedding in SWF. Taken from
http://ming.sf.net.
+
+Bitstream Vera Fonts Copyright:
+
+The fonts have a generous copyright, allowing derivative works (as
+long as "Bitstream" or "Vera" are not in the names), and full
+redistribution (so long as they are not *sold* by themselves). They
+can be be bundled, redistributed and sold with any software.
+
+The fonts are distributed under the following copyright:
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream
+Vera is a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute
+the Font Software, including without limitation the rights to use,
+copy, merge, publish, distribute, and/or sell copies of the Font
+Software, and to permit persons to whom the Font Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Bitstream" or the word "Vera".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the
+"Bitstream Vera" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
+SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font
+Software without prior written authorization from the Gnome Foundation
+or Bitstream Inc., respectively. For further information, contact:
+fonts at gnome dot org.
Index: packaging/debian/docs
===================================================================
RCS file: /sources/gnash/gnash/packaging/debian/docs,v
retrieving revision 1.1
retrieving revision 1.1.10.1
diff -u -b -r1.1 -r1.1.10.1
--- packaging/debian/docs 8 Apr 2006 04:09:44 -0000 1.1
+++ packaging/debian/docs 3 Mar 2008 23:46:58 -0000 1.1.10.1
@@ -1,2 +1,4 @@
NEWS
README
+README.amf
+AUTHORS
Index: packaging/debian/gnash.install
===================================================================
RCS file: /sources/gnash/gnash/packaging/debian/gnash.install,v
retrieving revision 1.1
retrieving revision 1.1.10.1
diff -u -b -r1.1 -r1.1.10.1
--- packaging/debian/gnash.install 8 Apr 2006 04:09:44 -0000 1.1
+++ packaging/debian/gnash.install 3 Mar 2008 23:46:58 -0000 1.1.10.1
@@ -1 +1,3 @@
-usr/bin/*
+usr/bin/gtk-gnash
+usr/share/pixmaps/gnash.xpm
+usr/share/applications/gnash.desktop
Index: packaging/debian/rules
===================================================================
RCS file: /sources/gnash/gnash/packaging/debian/rules,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -b -r1.3 -r1.3.2.1
--- packaging/debian/rules 16 Jan 2008 00:42:55 -0000 1.3
+++ packaging/debian/rules 3 Mar 2008 23:46:58 -0000 1.3.2.1
@@ -10,6 +10,8 @@
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+MAIN_VERSION = $(shell head -n 1 debian/changelog | cut '-d ' -f 2 | sed
's/[()]//g')
+
CFLAGS = -Wall -g -Werror-implicit-function-declaration
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
@@ -19,8 +21,8 @@
endif
# shared library versions, option 1
-version=2.0.5
-major=2
+#version=2.0.5
+#major=2
# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so
#version=`ls src/.libs/lib*.so.* | \
# awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'`
@@ -29,31 +31,51 @@
# CONFIGURE
-configure: configure.ac
+config.status: configure.ac
dh_testdir
-# for i in debian/patches/*.diff; do \
-# test -e "$$i.stamp" || patch -p1 <"$$i" && touch "$$i.stamp"; \
-# done
+
+ @printf "\n == APPLYING PATCHES
============================================ \n\n"
+ $(MAKE) -f /usr/share/quilt/quilt.make patch
+ @printf "\n ----------------------------------- End of APPLYING PATCHES
---- \n\n"
+
+ifneq "$(wildcard /usr/share/misc/config.sub)" ""
+ cp -f /usr/share/misc/config.sub config.sub
+endif
+ifneq "$(wildcard /usr/share/misc/config.guess)" ""
+ cp -f /usr/share/misc/config.guess config.guess
+endif
+
+ @printf "\n == AUTOGEN
===================================================== \n\n"
./autogen.sh
+ @printf "\n -------------------------------------------- End of AUTOGEN
---- \n\n"
-config.status: configure
- dh_testdir
- # Add here commands to configure the package.
- CXXFLAGS="-g" ./configure --host=$(DEB_HOST_GNU_TYPE) \
- --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr \
- --mandir=\$${prefix}/share/man \
+ @printf "\n == CONFIGURE
=================================================== \n\n"
+ # In the future, I want to add LDFLAGS="-Wl,-z,defs"
+ ./configure CFLAGS="$(CFLAGS)" \
+ --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \
+ --prefix=/usr --mandir=\$${prefix}/share/man \
--infodir=\$${prefix}/share/info \
- --enable-sdk-install \
- --with-plugindir=\$${prefix}/lib/mozilla/plugins \
- --disable-static --enable-klash
+ --enable-cygnal --enable-media=gst --enable-renderer=agg \
+ --with-npapi-plugindir=\$${prefix}/lib/gnash \
+ --enable-shared --disable-static --disable-testsuite \
+ --disable-rpath CXXFLAGS=-O0
+ @printf "\n ------------------------------------------- End of
CONFIGURE ---- \n\n"
+
+ cp libamf/README README.amf
# BUILD
build: build-stamp
build-stamp: config.status
dh_testdir
- # Add here commands to compile the package.
+
+ @printf "\n == MAKE
======================================================== \n\n"
$(MAKE)
+ @printf "\n ----------------------------------------------- End of MAKE
---- \n\n"
+
+# @printf "\n == CHECK
======================================================= \n\n"
+# $(MAKE) check
+# @printf "\n ---------------------------------------------- End of CHECK
---- \n\n"
touch build-stamp
@@ -64,30 +86,37 @@
dh_testroot
rm -f build-stamp
+ifeq (Makefile,$(wildcard Makefile))
+ -$(MAKE) maintainer-clean
-$(MAKE) distclean
-ifneq "$(wildcard /usr/share/misc/config.sub)" ""
- cp -f /usr/share/misc/config.sub config.sub
-endif
-ifneq "$(wildcard /usr/share/misc/config.guess)" ""
- cp -f /usr/share/misc/config.guess config.guess
endif
- dh_clean
-
-maintainer-clean:
- dh_testdir
- dh_testroot
- -for i in debian/patches/*.diff; do \
- test -e "$$i.stamp" && patch -p1 -R <"$$i" && rm -f
"$$i.stamp"; \
- done
- rm -f build-stamp
-ifeq (Makefile,$(wildcard Makefile))
- $(MAKE) maintainer-clean
-endif
ifneq ($(wildcard ${AUTO_JUNK}),)
rm $(wildcard ${AUTO_JUNK})
endif
- find . -name Makefile.in -exec rm {} \;
+
+ rm -f config.{sub,guess,log,status}
+ rm -f libtool
+ rm -f `find . -name "Makefile"| grep -v "debian/"`
+ rm -f `find . -name "*.o"`
+ rm -rf `find . -name ".libs"`
+ rm -rf `find . -name ".deps"`
+
+ rm -f configure aclocal.m4 config.h.in
+ #-find . -name Makefile.in -exec rm {} \;
+ -rm `find . -name Makefile.in`
+
+ -rm -rf libltdl/autom4te.cache
+ -rm -f libltdl/* ltmain.sh
+
+ #cd debian/h2m; $(MAKE) clean
+
+ -rm -f README.amf
+
+ @printf "\n == CLEANING PATCHES
============================================ \n\n"
+ $(MAKE) -f /usr/share/quilt/quilt.make unpatch
+ @printf "\n ----------------------------------- End of CLEANING PATCHES
---- \n\n"
+
dh_clean
# INSTALL
@@ -100,9 +129,24 @@
install -d $(CURDIR)/debian/tmp/usr/bin
install -d $(CURDIR)/debian/tmp/usr/lib
+ install -d $(CURDIR)/debian/tmp/usr/lib/gnash/
install -d $(CURDIR)/debian/tmp/usr/lib/mozilla/plugins/
- install -d $(CURDIR)/debian/tmp/usr/include/gnash
- $(MAKE) install install-plugin DESTDIR=$(CURDIR)/debian/tmp
+ install -d $(CURDIR)/debian/tmp/usr/lib/firefox/plugins/
+
+ @printf "\n == INSTALL
===================================================== \n\n"
+ $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
+ $(MAKE) install-plugins DESTDIR=$(CURDIR)/debian/tmp
+ @printf "\n -------------------------------------------- End of INSTALL
---- \n\n"
+
+ #cd debian/h2m; $(MAKE)
+
+ install -d $(CURDIR)/debian/tmp/usr/share/lintian/overrides/
+ cp debian/overrides/* $(CURDIR)/debian/tmp/usr/share/lintian/overrides/
+
+ install -d $(CURDIR)/debian/tmp/usr/share/pixmaps/
+ cp debian/*.xpm $(CURDIR)/debian/tmp/usr/share/pixmaps/
+ install -d $(CURDIR)/debian/tmp/usr/share/applications/
+ cp debian/*.desktop $(CURDIR)/debian/tmp/usr/share/applications/
# CREATE PACKAGES
@@ -119,27 +163,31 @@
dh_installexamples
dh_install --sourcedir=$(CURDIR)/debian/tmp
# dh_installmenu
-# dh_installdebconf
-# dh_installlogrotate
-# dh_installemacsen
-# dh_installpam
# dh_installmime
-# dh_installinit
-# dh_installcron
- dh_installinfo
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
-# dh_perl
-# dh_python
-# dh_makeshlibs
+ dh_makeshlibs
dh_installdeb
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
+VERSION_DATE = $(shell /bin/date --utc +%0Y%0m%0d.%0k%0M)
+VERSION_ID = 0.8.2+cvs$(VERSION_DATE)
+get-orig-source:
+ echo Downloading gnash $(VERSION_ID) from CVS...
+ #test -e gnashd && exit
+ export CVS_RSH="ssh"; cvs -z3 -d:pserver:address@hidden:/sources/gnash
co gnash
+ #cd gnash; rm -rf `find . -name CVS`
+ tar cvfz "gnash_$(VERSION_ID).orig.tar.gz" gnash
+ mv gnash "gnash-$(VERSION_ID)"
+ cp debian "gnash-$(VERSION_ID)" -a
+ cd "gnash-$(VERSION_ID)"; dch -v "$(VERSION_ID)-1" "New Upstream
Release. Downloaded from CVS."
+
+
binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install
+.PHONY: build clean binary-indep binary-arch binary install get-orig-source
Index: packaging/redhat/gnash.spec
===================================================================
RCS file: /sources/gnash/gnash/packaging/redhat/gnash.spec,v
retrieving revision 1.19
retrieving revision 1.19.2.1
diff -u -b -r1.19 -r1.19.2.1
--- packaging/redhat/gnash.spec 14 Feb 2008 01:11:14 -0000 1.19
+++ packaging/redhat/gnash.spec 3 Mar 2008 23:47:00 -0000 1.19.2.1
@@ -1,4 +1,4 @@
-%define version 20080104
+%define version 20080216
Name: gnash
Version: %{version}cvs
Release: 1%{?dist}
@@ -15,22 +15,21 @@
#AutoReqProv: no
BuildRequires: libpng-devel libjpeg-devel libogg-devel
-BuildRequires: gtk2-devel libX11-devel libXt-devel
-# BuildRequires: agg-devel libxml2-devel boost-devel curl-devel libXt-devel
-# the opengl devel packages are required by gtkglext-devel
-# monolithic Xorg
-#BuildRequires: xorg-x11-devel
-# modular Xorg
-#BuildRequires: libGLU-devel libGL-devel
-#BuildRequires: gtkglext-devel
-BuildRequires: mysql-devel mysqlclient14-devel
+BuildRequires: gtk2-devel libX11-devel libXt-devel glib2-devel
+BuildRequires: cairo-devel atk-devel pango-devel
+BuildRequires: agg-devel libxml2-devel boost-devel curl-devel libXt-devel
+# the opengl devel packages are required by monolithic Xorg
+BuildRequires: xorg-x11-proto-devel gtkglext-devel
+BuildRequires: libGLU-devel libGL-devel
BuildRequires: SDL-devel
-BuildRequires: kdelibs-devel
-BuildRequires: docbook2X
-BuildRequires: gstreamer >= 0.10
+BuildRequires: kdelibs-devel kdebase-devel qt-devel
+BuildRequires: gstreamer >= 0.10, gstreamer-ffmpeg
+
# Installation requirements
Requires: gstreamer >= 0.10
Requires: gstreamer-plugins-base, gstreamer-plugins-ugly, gstreamer-plugins-bad
+Requires: gtk2 libX11 libpng libjpeg cairo atk pango Xt
+
# BuildRequires: scrollkeeper
#Requires(post): scrollkeeper
@@ -46,7 +45,7 @@
%package plugin
Summary: Web-client flash movie player plugin
Requires: %{name} = %{version}-%{release}
-Requires: xulrunner
+Requires: gstreamer >= 0.10 gnash
Group: Applications/Internet
%description plugin
@@ -55,6 +54,7 @@
%package klash
Summary: Konqueror flash movie player plugin
Requires: %{name} = %{version}-%{release}
+Requires: kdelibs kdelibs qt gnash
Group: Applications/Multimedia
%description klash
@@ -86,13 +86,14 @@
%else
%define cross_compile 0
%endif
-%{?do_cross_compile:%define cross_compile 1}
+# if not defined, assume this is a native package.
+%{?do_cross_compile:%define cross_compile 0}
# FIXME: this ia a bad hack! Although all this does work correctly and
# build an RPM, it's set for an geode-olpc, so the actual hardware
# won't let us install it.
-%define cross_compile 0
-%define olpc 0
+# %define cross_compile 0
+# %define olpc 0
# Build rpms for an ARM based processor, in our case the Nokia 770/800
# tablet.
@@ -137,7 +138,8 @@
$CROSS_OPTS \
$SOUND $GUI \
$RENDERER \
- --disable-dependency-tracking --disable-rpath \
+ --disable-dependency-tracking \
+ --disable-rpath \
--with-plugindir=%{_libdir}/mozilla/plugins
make %{?_smp_mflags} dumpconfig all
@@ -149,8 +151,14 @@
--disable-dependency-tracking \
--disable-rpath \
--disable-cygnal \
- --prefix=%{_prefix} \
- --with-plugindir=%{_libdir}/mozilla/plugins
+ --prefix=/usr \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --with-plugindir=/usr/lib/mozilla/plugins \
+ --disable-static \
+ --enable-shared \
+ --disable-testsuite
+# --enable-docbook
make dumpconfig all
%endif
@@ -160,8 +168,7 @@
strip utilities/.libs/dumpshm utilities/.libs/g* utilities/.libs/soldumper
rm -rf $RPM_BUILD_ROOT
make install install-plugins DESTDIR=$RPM_BUILD_ROOT
-rm $RPM_BUILD_ROOT%{_libdir}/gnash/*.la
-rm $RPM_BUILD_ROOT%{_libdir}/gnash/*.a
+rm $RPM_BUILD_ROOT%{_libdir}/gnash/*.*a
%if !%{cross_compile}
rm -rf $RPM_BUILD_ROOT%{_localstatedir}/scrollkeeper
@@ -194,7 +201,7 @@
%dump
%doc README AUTHORS COPYING NEWS
%{_bindir}/gnash
-%{_bindir}/*-gnash
+%{_bindir}/gtk-gnash
%{_bindir}/gprocessor
%{_bindir}/soldumper
%{_bindir}/dumpshm
@@ -203,17 +210,18 @@
%{_prefix}/include/ltdl.h
%{_prefix}/share/gnash/GnashG.png
%{_prefix}/share/gnash/gnash_128_96.ico
-%if !%{cross_compile}
-%{_datadir}/man/man1/gnash.1*
+%{_datadir}/man/man1/*.1*
%{_datadir}/locale/*/LC_MESSAGES/gnash.mo
-%doc doc/C/gnash.html
+%if !%{cross_compile}
+%{_prefix}/share/info/*.info*
+%{_prefix}/share/doc/gnash/*.html
+%{_prefix}/share/doc/gnash/images/*.png
+# %{_infodir}/*.info*
+#%doc doc/C/gnash*.html
+#%doc doc/C/images/*.png
+#%doc doc/C/images/*.txt
# %doc %{_prefix}/share/gnash/doc/gnash/C/images
-# %{_datadir}/omf/gnash/gnash-C.omf
-# %{_datadir}/omf/gnash/asspec-C.omf
-# %{_infodir}/*.info.gz
-# %{_prefix}/share/gnash/doc/gnash/C/*.xml
-# %{_prefix}/share/gnash/doc/asspec/C/*.xml
-# %{_prefix}/share/gnash/doc/asspec/images/*.png
+# %doc %{_prefix}/share/gnash/doc/gnash/C/*.xml
%endif
%files plugin
@@ -222,8 +230,8 @@
%files klash
%defattr(-,root,root,-)
-%{_bindir}/gnash
%if !%{cross_compile}
+%{_bindir}/kde-gnash
%{_libdir}/kde3/libklashpart.*
%{_datadir}/apps/klash/
%{_datadir}/services/klash_part.desktop
@@ -234,7 +242,7 @@
# %{_bindir}/cygnal
%changelog
-* Sat Feb 9 2008 Rob Savoye <address@hidden> - %{version}-%{release}
+* Sat Feb 16 2008 Rob Savoye <address@hidden> - %{version}-%{release}
- Adjust dependencies for current cvs HEAD
* Sat Mar 6 2007 Rob Savoye <address@hidden> - %{version}-%{release}
Index: doc/C/preformatted/cygnal.1.in
===================================================================
RCS file: doc/C/preformatted/cygnal.1.in
diff -N doc/C/preformatted/cygnal.1.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/cygnal.1.in 3 Mar 2008 23:46:42 -0000 1.1.2.2
@@ -0,0 +1,34 @@
+.\" -*- coding: us-ascii -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH cygnal 1 "19 February 2008"
+.SH NAME
+cygnal \- Cygnal
+.SH Synopsis
+.nf
+
+cygnal (options)...
+.fi
+.SH DESCRIPTION
+Cygnal is a multimedia media server for streaming audio, video, and
+video conferencing. Cygnal supports several protocols used by SWF
+file players, including RTMP, RTMPTS, and RTMPT, while encouring the
+use of patent free codecs.
+.TP
+(-h) --help
+Print usage info.
+.TP
+--version
+Print version information.
+.TP
+(-v) --verbose
+Verbose output.
+.TP
+(-p) --port-offset
+Port offset. This number gets added to the default
+ports for RTMPS and RTMPS. This is only used by
+developers.
Index: doc/C/preformatted/dumpshm.1.in
===================================================================
RCS file: doc/C/preformatted/dumpshm.1.in
diff -N doc/C/preformatted/dumpshm.1.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/dumpshm.1.in 3 Mar 2008 23:46:42 -0000 1.1.2.2
@@ -0,0 +1,35 @@
+.\" -*- coding: us-ascii -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH dumpshm 1 "13 February 2008"
+.SH NAME
+dumpshm \- Gnash LocalConnection memory Dumper
+.SH Synopsis
+.nf
+
+dumpshm (options)... (file)...
+.fi
+.SH DESCRIPTION
+Dump information about the shared memory segment used by the
+LocalConnection ActionScript class. This memory segment is comprised
+of a header, and a collection of SWF AMF Objects, normally not
+viewable by the user.
+.TP
+-h
+Print usage info.
+.TP
+-i
+Find the key for an existing memory segment.
+.TP
+-r
+Dump memory segment to the terminal.
+.TP
+-c
+Dump memory segment to a disk file, segment.raw.
+.TP
+-v
+Verbose output.
Index: doc/C/preformatted/gnash.1.in
===================================================================
RCS file: doc/C/preformatted/gnash.1.in
diff -N doc/C/preformatted/gnash.1.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnash.1.in 3 Mar 2008 23:46:42 -0000 1.1.2.2
@@ -0,0 +1,135 @@
+.\" -*- coding: us-ascii -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH gnash 1 "13 February 2008"
+.SH NAME
+gnash \- GNU Flash (SWF) Player
+.SH Synopsis
+.nf
+
+gnash (options)... (file)...
+.fi
+.SH DESCRIPTION
+Run the SWF movie player.
+.TP
+-h
+Print usage info.
+.TP
+-s factor
+Scale the movie up/down by the specified factor.
+.TP
+-c
+Produce a core file instead of letting SDL trap it.
+.TP
+-d num
+Number of milliseconds to delay in main loop.
+.TP
+-a
+Enable ActionScript debugging.
+.TP
+-x
+The XID of the parent window Gnash should use instead of
+creating a new one.
+.TP
+-j
+Set the width of the window. This is only used when embedding
+the player into another window.
+.TP
+-k
+Set the height of the window. This is only used when embedding
+the player into another window.
+.TP
+-v
+Be verbose; i.e. print log messages to stdout.
+.TP
+-va
+Be verbose about movie Actions.
+.TP
+-vp
+Be verbose about parsing the movie.
+.TP
+-ml bias
+Specify the texture LOD bias (float, default is -1).
+.TP
+-p
+Run full speed (no sleep) and log frame rate.
+.TP
+-g
+Start Gnash with a Flash debugger console so one can set
+break points or watchpoints.
+.TP
+-w
+Write the gnash-dbg.log debug log to disk. By default the
+plugin writes its log in your home directory when using a
+launcher from GNOME or KDE.
+.TP
+-1
+Play once; exit when/if movie reaches the last frame.
+.TP
+-r [0|1|2]
+0 disables rendering and sound (good for batch tests).
+
+1 enables rendering and sound (default setting).
+
+2 enables rendering and disables sound.
+.TP
+-t sec
+Timeout and exit after the specified number of seconds.
+.TP
+-u
+Set "real" url of the movie (useful for downloaded movies).
+.TP
+-U
+Set "base" url for this run (used to resolve relative urls,
+defaults to movie url)
+.TP
+-P
+Set parameter (ie. "FlashVars=A=1&b=2")
+.TP
+-F
+Set filedescriptor to use for external communications.
+.TP
+--version
+Print the version number, and the configuration of the
+Gnash player. Please use this info when submitting bug
+reports.
+.SS KEYS
+.TP
+CTRL-Q
+Quit/Exit.
+.TP
+CTRL-W
+Quit/Exit.
+.TP
+ESC
+Quit/Exit.
+.TP
+CTRL-P
+Toggle Pause.
+.TP
+CTRL-R
+Restart the movie.
+.TP
+CTRL-[ or kp-
+Step back one frame.
+.TP
+CTRL-] or kp+
+Step forward one frame.
+.TP
+CTRL-T
+Debug. Test the set_variable() function.
+.TP
+CTRL-G
+Debug. Test the get_variable() function.
+.TP
+CTRL-M
+Debug. Test the call_method() function.
+.TP
+CTRL-B
+Toggle background color.
+.PP
+Flash is Trademarked by Adobe Corporation.
Index: doc/C/preformatted/gnash_ref.html.in
===================================================================
RCS file: doc/C/preformatted/gnash_ref.html.in
diff -N doc/C/preformatted/gnash_ref.html.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnash_ref.html.in 3 Mar 2008 23:46:42 -0000
1.1.2.1
@@ -0,0 +1,3506 @@
+<html><head><meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1"><title>Gnash Reference Manual</title><meta name="generator"
content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white"
text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"
lang="en"><div class="titlepage"><div><div><h1 class="title"><a
name="index"></a>Gnash Reference Manual</h1></div><div><p class="releaseinfo">
+ This manual describes version 0.8.2 of Gnash.
+ </p></div><div><p class="copyright">Copyright © 2005, 2006, 2007, 2008
Free Software Foundation</p></div><div><div class="legalnotice"><a
name="legalnotice"></a><p>
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the <a class="link" href="#fdl" title="Appendix A. GNU
Free Documentation License"><em class="citetitle">GNU
+ Free Documentation License</em></a>, Version 1.1 or any later
+ version published by the Free Software Foundation with no Invariant
+ Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find
+ a copy of the GFDL at this
+ <a class="link" href="#fdl" title="Appendix A. GNU Free Documentation
License">link</a> or in the file COPYING-DOCS
+ distributed with this manual.
+ </p></div></div><div><div class="revhistory"><table border="1" width="100%"
summary="Revision history"><tr><th align="left" valign="top"
colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision
Gnash User Manual version 0.4</td><td align="left">Feb 2008</td></tr><tr><td
align="left" colspan="2">
+ <p class="author">Rob Savoye
+ <code class="email"><<a class="email"
href="mailto:address@hidden">address@hidden</a>></code>
+ The end user parts of the manual have been pulled out of
+ the original version of the manual, and rewritten. This
+ is now a reference manual only.
+ </p>
+
+ <p class="publisher">Open Media Now! Foundation</p>
+ </td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table
of Contents</b></p><dl><dt><span class="chapter"><a href="#intro">1.
Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a
href="#audience">Audience</a></span></dt><dt><span class="sect1"><a
href="#runs-on">What Is Supported?</a></span></dt></dl></dd><dt><span
class="chapter"><a href="#build">2. Building from
Source</a></span></dt><dd><dl><dt><span class="sect1"><a
href="#building_overview">Overview</a></span></dt><dt><span class="sect1"><a
href="#gettingsource">Getting The Source</a></span></dt><dd><dl><dt><span
class="sect2"><a href="#sourcereleases">Releases</a></span></dt><dt><span
class="sect2"><a href="#sourcecvs">CVS
Access</a></span></dt></dl></dd><dt><span class="sect1"><a
href="#dependencies">Code Dependencies</a></span></dt><dt><span
class="sect1"><a href="#testdep">Testing Dependencies</a></span></dt><dt><span
class="sect1"><a href="#docdepend">Documentation
Dependencies</a></span></dt><dt><span class="sect1"><a
href="#configure">Configuring Gnash</a></span></dt><dt><span class="sect1"><a
href="#compile">Compiling the Code</a></span></dt><dt><span class="sect1"><a
href="#processdoc">Creating the Documentation</a></span></dt><dt><span
class="sect1"><a href="#runtests">Running the
Tests</a></span></dt><dd><dl><dt><span class="sect2"><a href="#dejagnu">Using
DejaGnu</a></span></dt><dt><span class="sect2"><a href="#manually">Running The
Tests Manually</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a
href="#internals">3. Software Internals</a></span></dt><dd><dl><dt><span
class="sect1"><a href="#tour">A Tour of Gnash</a></span></dt><dd><dl><dt><span
class="sect2"><a href="#The%20Libraries">The Libraries</a></span></dt><dt><span
class="sect2"><a href="#apps">The Applications</a></span></dt><dt><span
class="sect2"><a href="#plugin">The Plugin</a></span></dt><dt><span
class="sect2"><a href="#logging">The Debug Logging
System</a></span></dt></dl></dd><dt><span class="sect1"><a
href="#soundhandlers">Sound handling in Gnash</a></span></dt><dd><dl><dt><span
class="sect2"><a href="#soundtypes">Sound types</a></span></dt><dt><span
class="sect2"><a href="#soundparsing">Sound parsing</a></span></dt><dt><span
class="sect2"><a href="#soundplayback">Sound playback</a></span></dt><dt><span
class="sect2"><a href="#sdlsound">The SDL sound
backend</a></span></dt><dt><span class="sect2"><a href="#gstreamer">The
Gstreamer backend</a></span></dt><dt><span class="sect2"><a
href="#audio-future">Future audio backends</a></span></dt><dt><span
class="sect2"><a href="#gstreamer-details">Detailed description of the
Gstreamer backend</a></span></dt></dl></dd><dt><span class="sect1"><a
href="#testing">Testing </a></span></dt><dd><dl><dt><span class="sect2"><a
href="#testtools">Testing Tools</a></span></dt><dt><span class="sect2"><a
href="#testcases">Test Cases</a></span></dt><dt><span class="sect2"><a
href="#writeastests">Writing ActionScript Tests</a></span></dt><dt><span
class="sect2"><a href="#writemingtests">Writing Ming-based self-contained SWF
tests</a></span></dt><dt><span class="sect2"><a
href="#writing_dejagnu_so_tests">Writing self-contained SWF tests with other
compilers</a></span></dt><dt><span class="sect2"><a
href="#writing_test_runners">Writing Test
Runners</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a
href="#bugreport">5. Reporting Bugs</a></span></dt><dd><dl><dt><span
class="sect1"><a href="#bugstep_package">Get a Fresh Binary
Package</a></span></dt><dt><span class="sect1"><a
href="#bugstep_search">Determine if the bug was previously
reported</a></span></dt><dt><span class="sect1"><a
href="#bugstep_guidelines">Review the bug writing
guidelines</a></span></dt><dt><span class="sect1"><a
href="#bugstep_file">Filing a bug report</a></span></dt></dl></dd><dt><span
class="chapter"><a href="#extensions">6. Gnash
Extensions</a></span></dt><dd><dl><dt><span class="sect1"><a
href="#newext">Creating A New Extension</a></span></dt><dd><dl><dt><span
class="sect2"><a href="#craftext">Crafting an
Extension</a></span></dt></dl></dd><dt><span class="sect1"><a
href="#debuext">Debugging An Extension</a></span></dt><dt><span
class="sect1"><a href="#inclext">Included
Extensions</a></span></dt></dl></dd><dt><span class="chapter"><a
href="#rtmp">7. RTMP Protocol</a></span></dt><dd><dl><dt><span class="sect1"><a
href="#amf">AMF Format</a></span></dt></dl></dd><dt><span class="chapter"><a
href="#nsapi">8. Mozilla/Firefox NPAPI Plugin</a></span></dt><dd><dl><dt><span
class="sect1"><a href="#plugincapi">Plugin C API</a></span></dt><dt><span
class="sect1"><a href="#plugincppapi">Plugin C++ API</a></span></dt><dt><span
class="sect1"><a href="#glthread">OpenGL and Threads</a></span></dt><dt><span
class="sect1"><a href="#eventhandle">Plugin Event
Handling</a></span></dt></dl></dd><dt><span class="chapter"><a
href="#authors">9. Authors</a></span></dt><dt><span class="appendix"><a
href="#fdl">A. GNU Free Documentation License</a></span></dt><dd><dl><dt><span
class="sect1"><a href="#fdl-preamble">0. PREAMBLE</a></span></dt><dt><span
class="sect1"><a href="#fdl-section1">1. APPLICABILITY AND
DEFINITIONS</a></span></dt><dt><span class="sect1"><a href="#fdl-section2">2.
VERBATIM COPYING</a></span></dt><dt><span class="sect1"><a
href="#fdl-section3">3. COPYING IN QUANTITY</a></span></dt><dt><span
class="sect1"><a href="#fdl-section4">4. MODIFICATIONS</a></span></dt><dt><span
class="sect1"><a href="#fdl-section5">5. COMBINING
DOCUMENTS</a></span></dt><dt><span class="sect1"><a href="#fdl-section6">6.
COLLECTIONS OF DOCUMENTS</a></span></dt><dt><span class="sect1"><a
href="#fdl-section7">7. AGGREGATION WITH INDEPENDENT
WORKS</a></span></dt><dt><span class="sect1"><a href="#fdl-section8">8.
TRANSLATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section9">9.
TERMINATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section10">10.
FUTURE REVISIONS OF THIS LICENSE</a></span></dt><dt><span class="sect1"><a
href="#fdl-using">Addendum</a></span></dt></dl></dd></dl></div><div
class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>2.1. <a
href="#codedeps">Code Dependency Table</a></dt><dt>2.2. <a
href="#testdeps">Testing Dependency Table</a></dt><dt>2.3. <a
href="#docdeps">Documentation Dependency Table</a></dt><dt>2.4. <a
href="#tb-config-features">Configuration Options - Features</a></dt><dt>2.5. <a
href="#tb-configure-paths">Custom Path Options</a></dt></dl></div><div
class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a
name="intro"></a>Chapter 1. Introduction</h2></div></div></div><div
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a
href="#audience">Audience</a></span></dt><dt><span class="sect1"><a
href="#runs-on">What Is Supported?</a></span></dt></dl></div><p>
+ <span class="application">Gnash</span> is a free SWF movie player. It is
available as a
+ stand-alone application or as a plugin for several popular
+ web browsers. It supports playing media from a disk or streaming
+ over a network connection. Some popular video sharing sites like
+ YouTube are supported on a wide variety of devices from
+ embedded ones to modern desktops.
+ </p><p>
+ <span class="application">Gnash</span> has a better focus on security,
allowing the user tight
+ control of all network or disk based I/O. Gnash also supports
+ extending ActionScript by creating your own classes. You can write
+ wrappers for any development library, and import them into the
+ player much like Perl or Python does.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a
name="audience"></a>Audience</h2></div></div></div><p>
+ This manual is primarily focused on users interested in how to
+ get Gnash installed from a package, and basic usage as a web
+ browser plugin. For more technical details, please refer to the
+ Gnash Reference manual.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="runs-on"></a>What Is Supported?</h2></div></div></div><p>
+ Gnash is known to compile for most any POSIX and ANSI C++
+ conforming system if you have all the dependent libraries
+ installed. Systems we test on, and which Gnash is known to
+ run on are Ubuntu, Fedora, Debian, Mandriva, OpenBSD, NetBSD, FreeBSD,
+ Win32, and Darwin (OSX) primarily. Occasionally other platforms
+ are built, primarily by those distribution maintainers. This
+ includes BeOS, Haiku, Syllable, OS/2, Solaris, Slackware, and
+ Gentoo.
+ </p><p>
+ Gnash is capable of reading up to SWF v9 files and opcodes,
+ but primarily supports SWF v7, with better SWF v8 and v9
+ support under heavy development. With the 0.8.2 release,
+ Gnash includes initial parser support for SWF v8 and v9.
+ Not all ActionScript 2 classes are implemented yet, but all of the
+ most heavily used ones are. Many ActionScript 2 classes are
+ partially implemented; there is support for all of the
+ commonly used methods of each class.
+ </p><p>
+ Gnash has implemented about 80% of ActionScript v2.0, and has
+ begun implementing ActionScript v3.0. Gnash supports the
+ majority of Flash opcodes up to SWF v9, and a wide
+ sampling of ActionScript classes for SWF v8.
+ </p><p>
+ As ActionScript 3 is a more developed version of
+ ActionScript 2, many of the same classes work for
+ both. Support has been added to Gnash's ActionScript library
+ to support the new ActionScript 3 filters, which get applied
+ to every class. Implementing ActionScript clases is often the
+ easiest way for new Gnash developers to make a contribution
+ without a deep internal knpowledge of Gnash.
+ </p><p>
+ Gnash has included video support since early 2007, but this is
+ an ever changing field of reverse engineering. Many of the
+ popular video sharing sites use SWF v8 or v9, which Gnash
+ still has imperfect support for. This is improving all the
+ time, so often builds from a development snapshot will work
+ when using the older release packaged in your distribution
+ doesn't. You can find daily snapshots of the latest CVS tree
+ at: <a class="ulink" href="http://www.gnashdev.org/dev_snapshots/"
target="_top">
+ http://www.gnashdev.org/dev_snapshots</a>.
+ </p><p>
+ Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+ should work with Gnash. Gnash supports the loading of patent
+ free codecs like Ogg Vorbis or Theora from disk based files,
+ while work is being done to support these codecs when embedded
+ in a SWF file. Ffmpeg contains the codecs used by the current
+ SWF defintion, FLV, VP6 (ON2), H.263, H.264, and MP3.
+ </p></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="build"></a>Chapter 2.
Building from Source</h2></div></div></div><div class="toc"><p><b>Table of
Contents</b></p><dl><dt><span class="sect1"><a
href="#building_overview">Overview</a></span></dt><dt><span class="sect1"><a
href="#gettingsource">Getting The Source</a></span></dt><dd><dl><dt><span
class="sect2"><a href="#sourcereleases">Releases</a></span></dt><dt><span
class="sect2"><a href="#sourcecvs">CVS
Access</a></span></dt></dl></dd><dt><span class="sect1"><a
href="#dependencies">Code Dependencies</a></span></dt><dt><span
class="sect1"><a href="#testdep">Testing Dependencies</a></span></dt><dt><span
class="sect1"><a href="#docdepend">Documentation
Dependencies</a></span></dt><dt><span class="sect1"><a
href="#configure">Configuring Gnash</a></span></dt><dt><span class="sect1"><a
href="#compile">Compiling the Code</a></span></dt><dt><span class="sect1"><a
href="#processdoc">Creating the Documentation</a></span></dt><dt><span
class="sect1"><a href="#runtests">Running the
Tests</a></span></dt><dd><dl><dt><span class="sect2"><a href="#dejagnu">Using
DejaGnu</a></span></dt><dt><span class="sect2"><a href="#manually">Running The
Tests Manually</a></span></dt></dl></dd></dl></div><div class="sect1"
lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear:
both"><a name="building_overview"></a>Overview</h2></div></div></div><p>
+ The typical process of building from source will involve
+ <a class="link" href="#gettingsource" title="Getting The Source">getting
the source</a>,
+ <a class="link" href="#dependencies" title="Code Dependencies">build
dependencies</a>,
+ <a class="link" href="#configure" title="Configuring
Gnash">configuration</a>,
+ <a class="link" href="#compile" title="Compiling the
Code">compilation</a>,
+ <a class="link" href="#runtests" title="Running the Tests">testing</a>,
and
+ <a class="link" href="#install" title="Installation">installation</a>.
+ A simplified overview of the process would be:
+ </p><pre class="programlisting">
+ ./autogen.sh
+ ./configure
+ make
+ make check
+ make install
+ </pre><p>
+ </p><p>
+ If you are compiling with GCC you will probably need to use a machine
+ with at least 128 megabytes of physical RAM; 64MB is not enough for a
+ couple of the files, even with swap enabled and optimisation turned off.
+ </p><p>
+ At present the Gnash source is about 30 MB extracted and configured
+ and requires a total of about 125 megabytes to compile it.
+ </p><p>
+ Continue reading for detailed step-by-step instructions
+ of the entire procedure.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="gettingsource"></a>Getting The Source</h2></div></div></div><div
class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a
name="sourcereleases"></a>Releases</h3></div></div></div><p>
+ Tarballs of official releases can be found in the download area
+ of the project's GNU Savannah page at
+ <a class="ulink" href="http://savannah.gnu.org/projects/gnash"
target="_top">
+ http://savannah.gnu.org/projects/gnash
+ </a>
+ or under
+ <a class="ulink" href="http://ftp.gnu.org/gnu/gnash" target="_top">
+ http://ftp.gnu.org/gnu/gnash
+ </a>
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="sourcecvs"></a>CVS
Access</h3></div></div></div><p>
+ The latest Gnash development sources are available via anonymous CVS.
+ Use the following commands to check them out
+ (just hit return when you are prompted for the password):
+ </p><pre class="programlisting">
+ export CVS_RSH=ssh
+ cvs -z3 -d:pserver:address@hidden:/sources/gnash co gnash
+ </pre><p>
+ You will then be able to update your copy from the repository using
+ </p><pre class="programlisting">
+ cd gnash
+ cvs update -d
+ </pre><p>
+ </p><p>
+ If you only have access to the internet via a web proxy,
+ you will find daily source snapshots of the latest CVS tree in
+ <a class="ulink" href="http://www.gnashdev.org/dev_snapshots/"
target="_top">
+ http://www.gnashdev.org/dev_snapshots
+ </a>
+ </p></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="dependencies"></a>Code Dependencies</h2></div></div></div><p>
+ <span class="application">Gnash</span> has a number of dependencies on
other packages.
+ If you install the dependencies using a package
+ manager, be certain to install the development versions
+ of the packages. The normal versions are often missing
+ the headers <span class="application">Gnash</span> needs to compile.
+ </p><p>
+ Some dependencies have other dependencies, like GTk also needs
+ glib2, atk, and pango to produce a fully linked
+ executable. Different distributions also use differing
+ dependencies, sometimes a package will depend on libxml2 on one
+ system, but libexpat on another.
+ </p><div class="table"><a name="codedeps"></a><p class="title"><b>Table 2.1.
Code Dependency Table</b></p><div class="table-contents"><table summary="Code
Dependency Table"
border="1"><colgroup><col><col><col><col><col><col><col></colgroup><thead><tr><th
align="left">Name</th><th align="left">Level</th><th
align="left">Version</th><th align="left">Description</th><th
align="left">Explanation</th><th align="left">apt-get package</th><th
align="left">RPM/Yum package</th><th align="left">BSD
package</th></tr></thead><tbody><tr><td align="left">Boost</td><td
align="left">Required</td><td align="left">1.32 or higher</td><td align="left">
+ Boost is a library of portable C++ classes and
+ templates.
+ </td><td align="left">
+ In <span class="application">Gnash</span>, Boost libraries are used
extensively, primarily
+ boost-gthread and boost-date-time. Boost is used for thread and
mutext
+ handling.
+ </td><td align="left">
+ <code class="filename">libboost-thread-dev, libboost-date-time-dev
libboost-dev
+ </code>
+ </td><td align="left">
+ <code class="filename">
+ libboost-thread-devel, libboost-date-time-devel
+ </code>
+ </td><td align="left">
+ <code class="filename">
+ boost-headers, boost-libs, or just boost
+ </code></td></tr><tr><td align="left">libxml2</td><td
align="left">Required</td><td align="left"> </td><td align="left">
+ Libxml2 is the GNOME XML parser library and
+ is available at <a class="ulink" href="http://xmlsoft.org"
target="_top">http://xmlsoft.org</a>.
+ </td><td align="left">
+ This library is used to parse messages for the
+ XML XMLNode, or XMLSocket ActionScript classes.
+ </td><td align="left"><code
class="filename">libxml2-dev</code></td><td align="left"><code
class="filename">libxml2-devel</code></td><td align="left"><code
class="filename">libxml2</code></td></tr><tr><td align="left">AGG</td><td
align="left">Possibly Required</td><td align="left">2.4 or higher</td><td
align="left">
+ AGG is the AntiGrain low-level 2D graphics
+ library.
+ </td><td align="left">
+ <span class="application">Gnash</span> requires the installation of
at least one
+ renderer. AGG is considered the <span class="emphasis"><em>best
+ supported</em></span> renderer for <span
class="application">Gnash</span>.
+ </td><td align="left"><code
class="filename">libagg-dev</code></td><td align="left"><code
class="filename">agg-devel</code></td><td align="left"><code
class="filename">agg</code></td></tr><tr><td align="left">OpenGL</td><td
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+ OpenGL is a standard specification defining a
+ cross-language cross-platform API for writing
+ applications which produce 3D and 2D graphics.
+ It supports hardware acceleration.
+ You can download a free implementation from
+ <a class="ulink" href="http://www.mesa3d.org"
target="_top">http://www.mesa3d.org</a>,
+ although it doesn't support hardware acceleration.
+ </td><td align="left">
+ <span class="application">Gnash</span> requires the installation of
at least one
+ renderer. If you don't have a hardware accelerated driver,
+ you're better off using AGG for the renderer.
+ </td><td align="left"><code
class="filename">libgl1-mesa-dev</code></td><td align="left"><code
class="filename">libmesa-devel</code></td><td align="left"><code
class="filename">mesa</code></td></tr><tr><td align="left">Cairo</td><td
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+ Cairo is a 2D graphics library with support for
+ multiple output devices. It will automatically use
+ graphic card acceleration when available, and has
+ an experimental OpenGL backend.
+ </td><td align="left">
+ <span class="application">Gnash</span> requires the installation of
at least one
+ renderer. Cairo is considered
+ the <span class="emphasis"><em>least supported</em></span> renderer
+ for <span class="application">Gnash</span>.
+ </td><td align="left"><code
class="filename">libcairo2-dev</code></td><td align="left"><code
class="filename">cairo-devel</code></td><td align="left"><code
class="filename">cairo</code></td></tr><tr><td align="left">GTK</td><td
align="left">Possibly Required</td><td align="left">2.2 or higher</td><td
align="left">
+ GTK is the GIMP Toolkit GUI library used by the GNOME
+ desktop. It uses Cairo internally. Gtk enables better
+ integration with Firefox, as well as better event handling
+ and higher level GUI constructs like menus and dialog
+ boxes.
+ </td><td align="left">
+ <span class="application">Gnash</span> requires the installation of
at least one
+ GUI library. GTK is considered to be the
+ <span class="emphasis"><em>best supported</em></span> GUI library
+ option for <span class="application">Gnash</span>.
+ </td><td align="left"><code
class="filename">libgtk2.0-dev</code></td><td align="left"><code
class="filename">gtk-devel</code></td><td align="left"><code
class="filename">gtk+2</code></td></tr><tr><td align="left">GtkGlExt</td><td
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+ GtkGlExt integrates OpenGL into GTK.
+ </td><td align="left">
+ This library is required in order to use
+ the GTK GUI library in conjunction with the
+ OpenGL renderer.
+ </td><td align="left"><code
class="filename">libgtkglext1-dev</code></td><td align="left"><code
class="filename">gtkglext-devel</code></td><td align="left"><code
class="filename">gtkglext</code></td></tr><tr><td align="left">SDL</td><td
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+ The Simple DirectMedia Layer is a cross-platform
+ multimedia library which provides abstraction for
+ audio, graphics, sound and input APIs.
+ SDL is available from
+ <a class="ulink" href="http://www.libsdl.org" target="_top">
+ http://www.libsdl.org</a>.
+ </td><td align="left">
+ <span class="application">Gnash</span> requires the installation of
at least one
+ GUI library. SDL may also be used as a sound
+ handler regardless of whether it is employed as
+ a GUI library. The GUI
+ library is <span class="emphasis"><em>poorly supported</em></span>
+ in <span class="application">Gnash</span>, but the sound handler is
the
+ <span class="emphasis"><em>best supported</em></span> in <span
class="application">Gnash</span>.
+ </td><td align="left"><code
class="filename">libsdl1.2-dev</code></td><td align="left"><code
class="filename">SDL-devel</code></td><td align="left"><code
class="filename">SDL-1.2</code></td></tr><tr><td align="left">FLTK</td><td
align="left">Possibly Required</td><td align="left">2.0 or higher</td><td
align="left">
+ The Fast Light ToolKit is a portable GUI library
+ which is intended as a replacement for the SDL GUI.
+ </td><td align="left">
+ <span class="application">Gnash</span> requires the installation of
at least one
+ GUI library. FLTK may be used in conjunction with
+ the Cairo and AGG renderers.
+ </td><td align="left">No distribution packages are available.</td><td
align="left">No distribution packages are available.</td><td align="left">No
distribution packages are available.</td></tr><tr><td align="left">KDE</td><td
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+ Kdelibs is a collection of libraries needed to
+ compile KDE applications.
+ </td><td align="left">
+ <span class="application">Gnash</span> requires the installation of
at least one
+ GUI library. Kdelibs is also required for the
+ Kpart plugin for Konqueror.
+ </td><td align="left"><code class="filename">kdelibs3-dev,
kdebase-dev</code></td><td align="left"><code class="filename">kdelibs-devel,
kdebase-devel</code></td><td align="left"><code class="filename">kdelibs,
kdebase</code></td></tr><tr><td align="left">Gstreamer</td><td
align="left">Optional</td><td align="left"> </td><td align="left">
+ Gstreamer is a video handler.
+ </td><td align="left">
+ If you would like video playback, you must
+ install one of the video handlers.
+ </td><td align="left"><code
class="filename">libgstreamer0.8-dev</code></td><td align="left"><code
class="filename">gstreamer-devel</code></td><td align="left"><code
class="filename">gstreamer-0.10</code></td></tr><tr><td
align="left">gst-ffmpeg</td><td align="left">Possibly Required</td><td
align="left"> </td><td align="left">
+ gst-ffmpeg allows you to use the FFMPEG decoder
+ with Gstreamer.
+ </td><td align="left">
+ This package is required if you would like to
+ use Gstreamer as a video handler.
+ </td><td align="left"><code
class="filename">gstreamer0.8-ffmpeg-dev</code></td><td align="left"><code
class="filename">gstreamer-ffmpeg-devel</code></td><td align="left"><code
class="filename">gstreamer-ffmpeg</code></td></tr><tr><td
align="left">FFMPEG</td><td align="left">Possibly Required</td><td
align="left"> </td><td align="left">
+ FFMPEG is a video handler.
+ </td><td align="left">
+ If you would like video playback, you must
+ install one of the video handlers. When using the
+ gstreamer-ffmpeg plugin, ffmpeg doesn't need to be
+ installed, as it's part of the plugin. For systems
+ without Gstreamer support, ffmpeg can be used directly.
+ </td><td align="left"><code
class="filename">ffmpeg-dev</code></td><td align="left"><code
class="filename">ffmpeg-devel</code></td><td align="left"><code
class="filename">ffmpeg</code></td></tr><tr><td align="left">JPEG</td><td
align="left">Optional</td><td align="left"> </td><td align="left">
+ <a class="ulink" href="http://www.ijg.org/" target="_top">JPEG</a>
+ is a lossy image format which is heavily used for images.
+ </td><td align="left">
+ This library is used for rendering JPEGs.
+ </td><td align="left"><code
class="filename">libjpeg62-dev</code></td><td align="left"><code
class="filename">libjpeg</code></td><td align="left"><code
class="filename">jpeg</code></td></tr><tr><td align="left">PNG</td><td
align="left">Optional</td><td align="left"> </td><td align="left">
+ <a class="ulink" href="http://www.libpng.org/pub/png/"
target="_top">PNG</a> is
+ a patent-free image format which is comparable to
+ <span class="emphasis"><em>GIF</em></span>.
+ </td><td align="left">
+ This library is used for rendering PNGs.
+ </td><td align="left"><code
class="filename">libpng12-dev</code></td><td align="left"><code
class="filename">libpng</code></td><td align="left"><code
class="filename">png</code></td></tr><tr><td align="left">libcurl</td><td
align="left">Optional</td><td align="left"> </td><td align="left">
+ libcurl is the multiprotocal file transfer library.
+ </td><td align="left">
+ This library is used for URL downloading.
+ </td><td align="left"><code
class="filename">libcurl4-gnutls</code></td><td align="left"><code
class="filename">libcurl</code></td><td align="left"><code
class="filename">curl</code></td></tr><tr><td align="left">Glib2</td><td
align="left">Optional</td><td align="left"> </td><td align="left">
+ Glib2 is a dependency of Gtk, and is a collection of
+ commonly used functions.
+ </td><td align="left">
+ This library is used for convenience.
+ </td><td align="left"><code class="filename">glib2-dev</code></td><td
align="left"><code class="filename">glib2-devel</code></td><td
align="left"><code class="filename">glib2</code></td></tr><tr><td
align="left">Atk</td><td align="left">Optional</td><td align="left"> </td><td
align="left">
+ Atk is a dependency of Gtk, and is used for accessibility
+ support.
+ </td><td align="left">
+ This library is used for accessiblity..
+ </td><td align="left"><code class="filename">atk-dev</code></td><td
align="left"><code class="filename">atk-devel</code></td><td align="left"><code
class="filename">atk</code></td></tr><tr><td align="left">Pango</td><td
align="left">Optional</td><td align="left"> </td><td align="left">
+ Pango is a dependency of Gtk, and is used for font handling.
+ </td><td align="left">
+ This library is used for font handling.
+ </td><td align="left"><code class="filename">pango-dev</code></td><td
align="left"><code class="filename">pango-devel</code></td><td
align="left"><code class="filename">pango</code></td></tr><tr><td
align="left">automake</td><td align="left">Possibly Required</td><td
align="left">1.6.0</td><td align="left">
+ Automake is a tool for generating
+ <span class="emphasis"><em>Makefile.in</em></span> files.
+ </td><td align="left">
+ This package is required to run
+ <span class="emphasis"><em>autogen.sh</em></span>, which is a
requirement
+ if you are using the development source from CVS.
+ </td><td align="left"><code class="filename">automake</code></td><td
align="left"><code class="filename">automake</code></td><td align="left"><code
class="filename">automake</code></td></tr><tr><td align="left">autoconf</td><td
align="left">Possibly Required</td><td align="left">2.59</td><td align="left">
+ Autoconf is a package for generating configure
+ scripts.
+ </td><td align="left">
+ This package is required to run
+ <span class="emphasis"><em>autogen.sh</em></span>, which is a
requirement
+ if you are using the development source from CVS.
+ </td><td align="left"><code class="filename">autoconf</code></td><td
align="left"><code class="filename">autoconf</code></td><td align="left"><code
class="filename">autoconf</code></td></tr><tr><td align="left">gettext</td><td
align="left">Possibly Required</td><td align="left">0.14.6</td><td align="left">
+ Gettext is part of the GNU Translation Project.
+ </td><td align="left">
+ This package is required to run
+ <span class="emphasis"><em>autogen.sh</em></span>, which is a
requirement
+ if you are using the development source from CVS.
+ </td><td align="left"><code class="filename">gettext</code></td><td
align="left"><code class="filename">gettext</code></td><td align="left"><code
class="filename">gettext</code></td></tr><tr><td align="left">libtool</td><td
align="left">Possibly Required</td><td align="left">1.5.22</td><td align="left">
+ This is a generic library support script.
+ </td><td align="left">
+ This package is required to run
+ <span class="emphasis"><em>autogen.sh</em></span>, which is a
requirement
+ if you are using the development source from CVS.
+ </td><td align="left"><code
class="filename">libltdl3-dev</code></td><td align="left"><code
class="filename">libtool</code></td><td align="left"><code
class="filename">libtool</code></td></tr></tbody></table></div></div><br
class="table-break"></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="testdep"></a>Testing Dependencies</h2></div></div></div><p>
+ <span class="application">Gnash</span> tries to run as many tests as
possible, but will
+ simply skip tests if the tools to run them are unavailable.
+ </p><div class="table"><a name="testdeps"></a><p class="title"><b>Table 2.2.
Testing Dependency Table</b></p><div class="table-contents"><table
summary="Testing Dependency Table"
border="1"><colgroup><col><col><col><col><col><col><col></colgroup><thead><tr><th
align="left">Name</th><th align="left">Level</th><th
align="left">Version</th><th align="left">Description</th><th
align="left">Explanation</th><th align="left">apt-get package</th><th
align="left">RPM/Yum package</th><th align="left">BSD
package</th></tr></thead><tbody><tr><td align="left">Ming</td><td
align="left">Optional</td><td align="left">0.4.0_beta4 or higher</td><td
align="left">
+ Ming is an ActionScript compiler.
+ </td><td align="left">
+ Ming is the primary compiler for ActionScript testcases.
+ </td><td align="left">No distribution packages are available.</td><td
align="left">No distribution packages are available.</td><td align="left">No
distribution packages are available.</td></tr><tr><td
align="left">Mtasc</td><td align="left">Optional</td><td align="left">1.12 or
higher</td><td align="left">
+ Mtasc is an ActionScript compiler.
+ </td><td align="left">
+ Mtasc is used in some tests.
+ </td><td align="left"><code class="filename">mtasc</code></td><td
align="left">No distribution packages are available.</td><td align="left">No
distribution packages are available.</td></tr><tr><td align="left">swfc</td><td
align="left">Optional</td><td align="left">part of swftools 0.8.1</td><td
align="left">
+ Swfc a swf decompiler.
+ </td><td align="left">
+ Swfc is used in some testcases.
+ </td><td align="left">No distribution packages are available.</td><td
align="left">No distribution packages are available.</td><td align="left">No
distribution packages are available.</td></tr><tr><td
align="left">swfmill</td><td align="left">Optional</td><td align="left">
0.2.12</td><td align="left">
+ Swfmill is an XML-based SWF (Shockwave Flash) processing tool.
+ </td><td align="left">
+ Swfmill is used in some testcases.
+ </td><td align="left">No distribution packages are available.</td><td
align="left">No distribution packages are available.</td><td align="left">No
distribution packages are available.</td></tr><tr><td
align="left">Python</td><td align="left">Optional</td><td align="left">2.4 or
higher</td><td align="left">
+ Python is a scripting language.
+ </td><td align="left">
+ Python is used by part of the testing framework.
+ </td><td align="left"><code class="filename">python</code></td><td
align="left"><code class="filename">python</code></td><td align="left"><code
class="filename">python</code></td></tr><tr><td align="left">DejaGnu</td><td
align="left">Optional</td><td align="left">1.4 or higher</td><td align="left">
+ DejaGnu is a testing framework.
+ </td><td align="left">
+ DejaGnu is used to run multiple tests in an
+ automated fashion.
+ </td><td align="left"><code class="filename">dejagnu</code></td><td
align="left"><code class="filename">dejagnu</code></td><td align="left"><code
class="filename">dejagnu</code></td></tr></tbody></table></div></div><br
class="table-break"></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="docdepend"></a>Documentation Dependencies</h2></div></div></div><p>
+ The following packages are used to build <span
class="application">Gnash</span>'s documentation.
+ </p><div class="table"><a name="docdeps"></a><p class="title"><b>Table 2.3.
Documentation Dependency Table</b></p><div class="table-contents"><table
summary="Documentation Dependency Table"
border="1"><colgroup><col><col><col><col><col><col><col></colgroup><thead><tr><th
align="left">Name</th><th align="left">Level</th><th
align="left">Version</th><th align="left">Description</th><th
align="left">Explanation</th><th align="left">apt-get package</th><th
align="left">RPM/Yum package</th><th align="left">BSD
package</th></tr></thead><tbody><tr><td align="left">Docbook</td><td
align="left">Required</td><td align="left"> </td><td align="left">
+ <a class="ulink" href="http://http://docbook.sourceforge.net/"
target="_top">Docbook</a> is
+ is an industry-standard XML format for technical
+ documentation. You can download it from
+ <a class="ulink"
href="http://sourceforge.net/project/showfiles.php?group_id=21935#files"
target="_top">http://sourceforge.net/project/showfiles.php?group_id=21935#files</a>.
+ </td><td align="left">
+ <span class="application">Gnash</span> documentation is written in
Docbook.
+ </td><td align="left">
+ <code class="filename">docbook-utils</code> and <code
class="filename">docbook-dsssl</code>
+ </td><td align="left">
+ <code class="filename">docbook-dtd41-sgml</code> and <code
class="filename">docbook-style-dsssl</code>
+ </td><td align="left">docbook</td></tr><tr><td
align="left">DocBook2X</td><td align="left">Optional</td><td align="left">
</td><td align="left">
+ This software package converts Docbook documents to
+ the traditional man page format, GNU Texinfo
+ format, and HTML (via Texinfo) format.
+ It is available at <a class="ulink"
href="http://docbook2x.sourceforge.net/"
target="_top">http://docbook2x.sourceforge.net/</a>.
+ </td><td align="left">
+ DocBook2X is required to produce HTML and Texinfo
+ formats.
+ </td><td align="left"><code class="filename">docbook2x</code></td><td
align="left"><code class="filename">docbook2x</code></td><td align="left"><code
class="filename">docbook2x</code></td></tr><tr><td
align="left">DocBook-utils</td><td align="left">Optional</td><td align="left">
</td><td align="left">
+ This software package converts Docbook documents to
+ the traditional man page format, GNU Texinfo
+ format, and HTML (via Texinfo) format.
+ </td><td align="left">
+ DocBook-utils is required to produce HTML and Texinfo
+ formats.
+ </td><td align="left"><code
class="filename">docbook-utils</code></td><td align="left"><code
class="filename">docbook-utils</code></td><td align="left"><code
class="filename">docbook-utils</code></td></tr><tr><td
align="left">Texinfo</td><td align="left">Possibly Required</td><td
align="left"> </td><td align="left">
+ Texinfo can be used to convert DocBook2X output
+ into GNU info pages. You can download it from
+ <a class="ulink" href="http://ftp.gnu.org/gnu/texinfo/"
target="_top">http://ftp.gnu.org/gnu/texinfo/</a>.
+ </td><td align="left">
+ Texinfo is required if you wish to product GNU info
+ pages.
+ </td><td align="left"><code class="filename">texinfo</code></td><td
align="left"><code class="filename">texinfo</code></td><td align="left"><code
class="filename">texinfo</code></td></tr><tr><td align="left">FOP</td><td
align="left">Optional</td><td align="left">0.20.5</td><td align="left">
+ Formatting Objects Processor is a print formatter
+ driven by XSL formatting objects. It is a Java
+ application which can output PDF, PCL, PS, SVG, XML,
+ Print, AWT, MIF, and Text. It is available at
+ <a class="ulink" href="http://xmlgraphics.apache.org/fop/"
target="_top">http://xmlgraphics.apache.org/fop/</a>.
+ </td><td align="left">
+ FOP is required for PDF output.
+ </td><td align="left"><code class="filename">fop</code></td><td
align="left"><code class="filename">fop</code></td><td align="left"><code
class="filename">fop</code></td></tr><tr><td align="left">Java (j2re)</td><td
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+ FOP requires Sun's Java runtime (GCJ does not work with
+ FOP). You can download it from
+ <a class="ulink" href="http://java.sun.com"
target="_top">http://java.sun.com</a>.
+ </td><td align="left">
+ Sun's Java runtime (j2re) is required to use FOP.
+ </td><td align="left">
+ Download the package from <a class="ulink"
href="http://java.sun.com" target="_top">Sun</a>.
+ </td><td align="left">
+ Download the package from <a class="ulink"
href="http://java.sun.com" target="_top">Sun</a>.
+ </td><td align="left"> </td></tr><tr><td align="left">JAI</td><td
align="left">Possibly Required</td><td align="left"> </td><td align="left">
+ Sun's Java Advanced Imaging API can be downloaded from
+ <a class="ulink"
href="http://java.sun.com/products/java-media/jai/iio.html"
target="_top">http://java.sun.com/products/java-media/jai/iio.html</a>.
+ </td><td align="left">
+ JAI is required
+ if you wish to include graphics in a PDF file being
+ generated with FOP.
+ </td><td align="left">
+ Download the package from <a class="ulink"
href="http://java.sun.com/products/java-media/jai/iio.html"
target="_top">Sun</a>.
+ </td><td align="left">
+ Download the package from <a class="ulink"
href="http://java.sun.com/products/java-media/jai/iio.html"
target="_top">Sun</a>.
+ </td><td align="left"> </td></tr></tbody></table></div></div><br
class="table-break"><p>
+ If you install j2re, set the <span
class="emphasis"><em>JAVA_HOME</em></span>
+ environment variable to the top directory of the j2re
+ installation. If you encounter problems with the Java
+ installation, you may also need to add this path to the
+ <span class="emphasis"><em>CLASSPATH</em></span> environment variable.
+ </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a name="configure"></a>Configuring
Gnash</h2></div></div></div><p>
+ <span class="application">Gnash</span>, like most GNU projects, allows a
user to select various
+ options before compiling its source code. These options include
+ selecting from the available features, specifying custom paths for
+ installation, and cross compiling support uses <a class="ulink"
href="http://www.gnu.org/software/autoconf/" target="_top">GNU Autoconf</a>
+ for configuration.
+ </p><p>
+ If you opted to download the development snapshot
+ of <span class="application">Gnash</span>, the <span
class="emphasis"><em>configure</em></span> script will
+ not be included. It can be created by running
+ <span class="emphasis"><em>autogen.sh</em></span> from the source root
directory:
+ </p><pre class="programlisting">
+ ./autogen.sh
+ </pre><p>
+ Note that there are some
+ <a class="link" href="#dependencies" title="Code
Dependencies">dependencies</a> for
+ autogen.
+ </p><p>
+ All the standard <span class="command"><strong>configure</strong></span>
options
+ are available. In addition, <span class="application">Gnash</span> has
two types of
+ options: those that <a class="link" href="#configfeatures"
title="Features">enable or disable
+ features</a>, and
+ those that <a class="link" href="#custompath" title="Specifying Custom
Paths">specify custom paths for
+ development packages</a>
+ which are not found during the default search. A complete
+ list of <span class="emphasis"><em>all</em></span> configuration options,
including
+ standard ones, can be seen by typing:
+ </p><pre class="programlisting">
+ ./configure --help | less
+ </pre><p>
+ Read further for a more detailed explanation of <span
class="application">Gnash</span>-specific
+ options.
+ </p><p>
+ The syntax for running <span class="emphasis"><em>configure</em></span> is
as follows:
+ </p><pre class="programlisting">
+ configure <em class="replaceable"><code><options></code></em>
+ </pre><p>
+ The example below shows the <span
class="command"><strong>configure</strong></span> options
+ which create the smallest working standalone version of <span
class="application">Gnash</span>. In
+ this example, <span class="command"><strong>configure</strong></span> is
being run from the
+ source root directory:
+ </p><pre class="programlisting">
+ ./configure --disable-debugger --disable-cygnal \
+ --disable-plugin --enable-media=ffmpeg --enable-gui=sdl
+ </pre><p>
+ By default, you shouldn't need to supply any options to
+ configure. The configure script will attempt to determine what to
+ build based on the development libraries you have installed. The
+ default configuration for Gnash is both GTK and KDE GUIs, the AGG
+ renderer, and Gstreamer for multimedia support, with no extensions
+ built.
+ </p><p>
+ Being highly portable, <span class="application">Gnash</span> has many
configuration options
+ available, and not all are supposed to work together. A common
+ mistake when configuring <span class="application">Gnash</span> is to
supply too many options,
+ overdriving <span class="application">Gnash</span>'s ability to do the
right thing.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a
name="configfeatures"></a>Features</h2></div></div></div><p>
+ Some switches can be used during configuration to enable or disable
+ features of <span class="application">Gnash</span>. Some of the most
important configuration options
+ are:
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type: circle"><p>
+ <code class="option">--enable-gui</code> lets you specify your GUI of
choice.
+ The default option is GTK.
+ </p></li><li style="list-style-type: circle"><p>
+ <code class="option">--enable-renderer</code> allows a renderer to be
+ chosen. The default renderer is AGG.
+ </p></li><li style="list-style-type: circle"><p>
+ <code class="option">--enable-media</code> permits a media handler to be
+ selected. The default is Gstreamer.
+ </p></li></ul></div><p>
+ A complete list of available features follows.
+ </p><div class="table"><a name="tb-config-features"></a><p
class="title"><b>Table 2.4. Configuration Options - Features</b></p><div
class="table-contents"><table summary="Configuration Options - Features"
border="1"><colgroup><col><col></colgroup><thead><tr><th
align="left">Option</th><th
align="left">Function</th></tr></thead><tbody><tr><td align="left"><code
class="option">--enable-debugger</code></td><td align="left">Enable support for
the Flash debugger. The debugger is
+ mainly of interest to Flash developers, and is still under
development.</td></tr><tr><td align="left"><code
class="option">--enable-lirc</code></td><td align="left">
+ Enable support for the LIRC remote control protocol.
+ </td></tr><tr><td align="left"><code
class="option">--enable-cygnal</code></td><td align="left">
+ Build the Cygnal streaming media server.
+ </td></tr><tr><td align="left"><code
class="option">--disable-menus</code></td><td align="left">
+ Disable building all the menus for the GUI. THis is used
+ by mobile devices without as much screen space.
+ </td></tr><tr><td align="left"> <code
class="option">--enable-docbook</code></td><td align="left"> Enable the
generation of HTML, INFO, and MAN
+ versions of the documentation from the Docbook XML. You will
+ then be able to use <span class="command"><strong>make
html</strong></span>,
+ <span class="command"><strong>make info</strong></span>, and <span
class="command"><strong>make
+ man</strong></span> commands. By default, man,info and html pages
+ are generated.</td></tr><tr><td align="left"><code
class="option">--enable-gui=gtk|sdl|kde|fltk|fb|hildon|alp</code></td><td
align="left"><p>Select the Graphic User Interface to use (choose one).</p>
+ <div class="variablelist"><dl><dt><span
class="term">GTK</span></dt><dd><p>
+ The GTK+ toolkit, which is the default GUI.
+ Said to interwork particularly well with firefox.
+ </p></dd><dt><span class="term">Hildon</span></dt><dd><p>
+ The Hildon toolkist is based on GTK+, and is use by
+ some mobile devices.
+ </p></dd><dt><span class="term">ALP</span></dt><dd><p>
+ The ALP "Hiker" GUI is used for the Access Linux platform.
+ </p></dd><dt><span class="term">SDL</span></dt><dd><p>
+ Simple DirectMedia Layer, a simple and portable GUI.
+ Its sound facilities are used when --enable-media=ffmpeg
+ regardless of whether it is also in charge of the GUI.
+ </p></dd><dt><span class="term">KDE</span></dt><dd><p>
+ An interface adapted to the KDE Desktop Environment.
+ This must be selected when building the Konqueror plugin
+ "klash". Furthermore, the only renderer that currently
+ works with KDE is opengl.
+ </p></dd><dt><span class="term">FLTK</span></dt><dd><p>
+ Fast Light ToolKit, low on resource usage.
+ Since all build using fltk are now broken, we declare it
+ "for developers".
+ </p></dd><dt><span class="term">FB</span></dt><dd><p>
+ The Linux Frame Buffer, also known as /dev/fb0.
+ AGG is the only renderer that can currently be used
+ with the framebuffer GUI.
+ </p></dd></dl></div>
+ </td></tr><tr><td align="left"><code
class="option">--enable-i810-lod-bias</code>
+ </td><td align="left">Enable fix for Intel 810 LOD bias problem.
Older versions
+ of libMesa on the Intel i810 or i815 graphics processor
+ need this flag or Gnash will core dump. This has been
+ fixed in newer versions (summer 2005) of libMesa.</td></tr><tr><td
align="left"><code class="option">--enable-media=ffmpeg|gst|none</code>
+ </td><td align="left"> <p>
+ Select the specified media decoder and sound engine.
+ FFMPEG uses the SDL sound engine; GST uses its own.
+ <code class="option">GST</code> is the default decoder.
+ </p>
+ <p>
+ You should only select one media decoder.
+ </p></td></tr><tr><td align="left">
+ <code class="option">--disable-nsapi</code>
+ <code class="option">--enable-nsapi</code>
+ </td><td align="left">Force disable/enable building the NPAPI plugin.
+ By default the Mozilla plugin is built if the GTK gui
+ is selected. Specify the
+ <code class="option">--with-npapi-plugindir=</code> option to specify
where the
+ plugin should be installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--disable-kparts</code>
+ <code class="option">--enable-kparts</code>
+ </td><td align="left">Force disable/enable building the KPARTS
plugin. By default the
+ KDE plugin is built if the kde gui is selected.
+ Specify the <code class="option">--with-kde-plugindir=</code> and
+ <code class="option">--with-kde-servicesdir=</code> options (or more
generally
+ the <code class="option">--with-kde-pluginprefix=</code> one) to
specify where the
+ plugin should be installed. The default installation dir is extracted
+ from kde-config.
+ </td></tr><tr><td align="left">
+ <code class="option">--disable-plugins</code>
+ </td><td align="left">Disable build of both kparts and npapi
plugins</td></tr><tr><td align="left"><code
class="option">--enable-renderer=opengl|cairo|agg</code>
+ </td><td align="left">Enable support for the a graphics backend.
Currently
+ only <code class="option">opengl</code> and
+ <code class="option">agg</code> work sufficiently. OpenGL is
+ used when you have hardware accelerated graphics. AGG i
+ used when you do not have hardware accelerated
+ graphics. Typically most desktop machines have OpenGL
+ support, and most embedded systems do not. OpenGl is the
+ default when building Gnash, although the quality of AGG's
+ rendering is currently superior to OpenGL.</td></tr><tr><td
align="left"><code class="option">--enable-sdk-install</code>
+ </td><td align="left">Enable installing the libraries and headers as
an SDK.
+ </td></tr><tr><td align="left"><code
class="option">--disable-shared</code>
+ </td><td align="left">Enable installing the shared libraries and
headers.
+ Note that the extensions mechanism may not work if shared
+ libraries are disabled.</td></tr><tr><td align="left"><code
class="option">--enable-strict</code>
+ </td><td align="left">Turn verbose GCC compiler warnings. By default
only
+ <code class="option">-Wall</code> is used with GCC.</td></tr><tr><td
align="left"><code class="option">--enable-fps-debug</code>
+ </td><td align="left">Enable FPS debugging code. When this feature is
compiled in you can use the -f switch of <span class="application">Gnash</span>
+ to have FPS printed at regular intervals.</td></tr><tr><td
align="left"><code class="option">--enable-write</code></td><td
align="left">Makes the Mozilla plugin write the currently playing SWF movie to
<code class="filename">/tmp</code>.
+ </td></tr><tr><td align="left"><code
class="option">--disable-mit-shm</code>
+ </td><td align="left">Disable support for the MIT-SHM X extensions.
+ Currently support is only available using GTK gui and AGG renderer.
+ Keeping it enabled is not a problem as it will not be used if not
+ available in the current X session.
+ </td></tr></tbody></table></div></div><br
class="table-break"></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="custompath"></a>Specifying Custom Paths</h2></div></div></div><p>
+ By default, none of these options should be required
+ unless you want <span class="application">Gnash</span> to use a specific
version of a
+ development package, or if the configure test fails to
+ find a component. Please <a class="link" href="#bugreport" title="Chapter
5. Reporting Bugs">report the problem</a> if a
+ configure test fails.
+ </p><p>
+ The following custom path options are available:
+ </p><div class="table"><a name="tb-configure-paths"></a><p
class="title"><b>Table 2.5. Custom Path Options</b></p><div
class="table-contents"><table summary="Custom Path Options"
border="1"><colgroup><col><col></colgroup><thead><tr><th
align="left">Option</th><th
align="left">Function</th></tr></thead><tbody><tr><td align="left">
+ <code class="option">--x-includes=DIR</code>
+ </td><td align="left">
+ X include files are in DIR.
+ </td></tr><tr><td align="left">
+ <code class="option">--x-libraries=DIR</code>
+ </td><td align="left">
+ X library files are in DIR.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-libxml=PFX</code>
+ </td><td align="left">
+ Prefix to where libxml is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-libxml-libraries=DIR</code>
+ </td><td align="left">
+ Directory where libxml library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-libxml-includes=DIR</code>
+ </td><td align="left">
+ Directory where libxml header files are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-docbook=DIR</code>
+ </td><td align="left">
+ Directory where the DocBook style-sheets are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-sdl-prefix=PFX</code>
+ </td><td align="left">
+ Prefix where SDL is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-zlib-incl</code>
+ </td><td align="left">
+ Directory where zlib header is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-zlib-lib</code>
+ </td><td align="left">
+ Directory where zlib library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-jpeg-incl</code>
+ </td><td align="left">
+ Directory where jpeg header is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-jpeg-lib</code>
+ </td><td align="left">
+ Directory where jpeg library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-png-incl</code>
+ </td><td align="left">
+ Directory where png header is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-png-lib</code>
+ </td><td align="left">
+ Directory where png library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-qt-dir</code>
+ </td><td align="left">
+ Directory where QT is installed. This is only used by
+ the Klash plugin.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-qt-includes</code>
+ </td><td align="left">
+ Directory where the QT header files are installed. This
+ is only used by the Klash plugin.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-qt-libraries</code>
+ </td><td align="left">
+ Directory where the QT libraries are installed. This is
+ only used by the Klash plugin.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-npapi-plugindir</code>
+ </td><td align="left">
+ This is the directory to install the NPAPI (Mozilla) plugin in.
+ By default it goes to ~/.mozilla/plugins.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-kde-pluginprefix</code>
+ </td><td align="left">
+ This option sets the default install dir for all KPARTS (kde) files.
+ The plugin will be installed in PREFIX/lib/kde3, use
+ <code class="option">-with-kde-plugindir</code> to override. The
service file in
+ PREFIX/share/services, use <code
class="option">--with-kde-servicesdir</code> to
+ override. The config file in PREFIX/share/config, use
+ <code class="option">--with-kde-configdir</code> to override. The
+ appdata file in PREFIX/share/apps/klash, use
+ <code class="option">--with-kde-appsdatadir</code> to override.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-kde-plugindir</code>
+ </td><td align="left">
+ This is the directory to install the KPARTS (kde) plugin in.
+ By default it is what's set by --with-kde-pluginprefix or what's
returned by kde-config --install module --expandvars,
+ or $(prefix)/share/services if kde-config is not found.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-kde-servicesdir</code>
+ </td><td align="left">
+ This is the directory to install the KPARTS (kde) service in.
+ By default it is what's set by --with-kde-pluginprefix or what's
returned by kde-config --install services --expandvars,
+ or $(libdir)/kde3 if kde-config is not found.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-kde-configdir</code>
+ </td><td align="left">
+ This is the directory to install the KPARTS (kde) config files in.
+ By default it is what's set by --with-kde-pluginprefix or what's
returned by kde-config --install config --expandvars,
+ or $(prefix)/share/config if kde-config is not found.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-kde-appsdatadir</code>
+ </td><td align="left">
+ This is the directory to install the KPARTS (kde) application data
files in.
+ By default it is what's set by --with-kde-pluginprefix or what's
returned by kde-config --install data --expandvars,
+ or $(prefix)/share/apps if kde-config is not found.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-ming</code>
+ </td><td align="left">
+ Ming is used to build test cases, but not by the Gnash
+ player itself.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-ogg_incl</code>
+ </td><td align="left">
+ Directory where the libogg headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-ogg_lib</code>
+ </td><td align="left">
+ Directory where the libogg library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-gstreamer-incl</code>
+ </td><td align="left">
+ Directory where the Gstreamer headers are
+ installed. Gstreamer version 0.10 or greater must be used.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-gstreamer-lib</code>
+ </td><td align="left">
+ Directory where the Gstreamer library is
+ installed. Gstreamer version 0.10 or greater must be used.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-opengl-includes</code>
+ </td><td align="left">
+ Directory where OpenGL (libMesa) headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-opengl-lib</code>
+ </td><td align="left">
+ Directory where the OpenGL (libMesa) library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-glext-incl</code>
+ </td><td align="left">
+ Directory where GtkGlExt headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-glext-lib</code>
+ </td><td align="left">
+ Directory where the GtkGlExt library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-gtk2-incl</code>
+ </td><td align="left">
+ Directory where the Gtk2 headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-gtk2-lib</code>
+ </td><td align="left">
+ Directory where the Gtk2 library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-cairo_incl</code>
+ </td><td align="left">
+ Directory where the Cairo headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-cairo-lib</code>
+ </td><td align="left">
+ Directory where the Cairo library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-glib-incl</code>
+ </td><td align="left">
+ Directory where the Glib headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-glib-lib</code>
+ </td><td align="left">
+ Directory where the Glib library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-pango-incl</code>
+ </td><td align="left">
+ Directory where the Pango headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-pango-lib</code>
+ </td><td align="left">
+ Directory where the Pango library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-atk-incl</code>
+ </td><td align="left">
+ Directory where the ATK headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-atk-lib</code>
+ </td><td align="left">
+ Directory where the ATK library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-pthread-incl</code>
+ </td><td align="left">
+ Directory where the Pthread headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-pthread-lib</code>
+ </td><td align="left">
+ Directory where the Pthread library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-agg-incl</code>
+ </td><td align="left">
+ Directory where the AGG (Antigrain) headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-agg-lib</code>
+ </td><td align="left">
+ Directory where the AGG (Antigrain) library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-ffmpeg-incl</code>
+ </td><td align="left">
+ Directory where the FFMPEG headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-ffmpeg-lib</code>
+ </td><td align="left">
+ Directory where the FFMPEG library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-boost-incl</code>
+ </td><td align="left">
+ Directory where the Boost headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-boost-lib</code>
+ </td><td align="left">
+ Directory where the Boost library is installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-curl-incl</code>
+ </td><td align="left">
+ Directory where the libCurl headers are installed.
+ </td></tr><tr><td align="left">
+ <code class="option">--with-curl-lib</code>
+ </td><td align="left">
+ Directory where the libCurl library is installed.
+ </td></tr></tbody></table></div></div><br
class="table-break"></div></div><p>
+ Once you have <span class="application">Gnash</span> configured, you are
ready to build the code. <span class="application">Gnash</span> is built using
+ <span class="emphasis"><em>GNU make</em></span>.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a name="compile"></a>Compiling the
Code</h2></div></div></div><p>
+ The most basic way to compile code is simply:
+ </p><pre class="programlisting">
+ make
+ </pre><p>
+ If the compilation ends with an error, check the output of
+ <span class="emphasis"><em>configure</em></span> and ensure that you are
not missing
+ any required prerequisites. The output of <span
class="command"><strong>make</strong></span> can be verbose; you may wish to
pipe the output to a file.
+ </p><p>
+ The variables used by <span class="command"><strong>make</strong></span>
can be redefined when
+ the program is invoked, if you desire it. The most interesting flags
+ are <span class="emphasis"><em>CFLAGS</em></span> and <span
class="emphasis"><em>CXXFLAGS</em></span>,
+ which are often used to enable debugging or turn of optimization.
+ The default value for both of these variables is
+ <span class="emphasis"><em>-O2 -g</em></span>. A list of influential
+ environment variables can be seen in the configuration help:
+ </p><pre class="programlisting">./configure --help</pre><p>
+ In the following example, debugging is enabled and optimization is
+ disabled:
+ </p><pre class="programlisting">make CFLAGS=-g CXXFLAGS=-g</pre></div><div
class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title"
style="clear: both"><a name="processdoc"></a>Creating the
Documentation</h2></div></div></div><p>
+ By default, documentation is not built when you
+ <a class="link" href="#install" title="Installation">install</a> <span
class="application">Gnash</span>. This is because
+ there are a number of <a class="link" href="#docdepend"
title="Documentation Dependencies">dependencies
+ for the documentation</a>. Documentation is built when it
+ is specified with a specific target in the generated
+ <span class="command"><strong>Makefile</strong></span> in the <code
class="filename">doc/C</code>
+ sub-directory. If you type <span class="command"><strong>make
install</strong></span> in
+ this directory, all documents will be built.
+ </p><p>
+ You must specify a target output format when you wish to create
+ documentation. The available output formats are: <span
class="command"><strong>html</strong></span>,
+ <span class="command"><strong>pdf</strong></span>, <span
class="command"><strong>info</strong></span>,
+ <span class="command"><strong>man</strong></span>, and <span
class="command"><strong>alldocs</strong></span>.
+ It is also possible to output <span class="command"><strong>GNOME
help</strong></span> if
+ the <a class="link" href="#configfeatures" title="Features">configure
option</a>
+ <code class="option">--enable-ghelp</code> was used.
+ The <span class="command"><strong>alldocs</strong></span> target will
build all output formats
+ except <span class="emphasis"><em>GNOME help</em></span>.
+ For example, to create HTML output, type:
+ </p><pre class="programlisting">
+ make html
+ </pre><p>
+ </p><p>
+ <span class="application">Gnash</span> also uses <a class="ulink"
href="http://www.stack.nl/~dimitri/doxygen/index.html"
target="_top">Doxygen</a> to produce <span class="emphasis"><em>HTML</em></span>
+ documentation of <span class="application">Gnash</span> internals. You
must have Doxygen installed
+ to produce this documentation, which is built from the
+ <code class="filename">doc</code> directory with the command (documents
+ will be placed in the subdirectory <code
class="filename">apidoc/html</code>):
+ </p><pre class="programlisting">
+ make apidoc
+ </pre><p>
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="runtests"></a>Running the Tests</h2></div></div></div><p>
+ Before beginning the potentially lengthy install, it is wise to
+ test the installation. If a test fails, please report it by
+ following the <a class="link" href="#bugreport" title="Chapter 5.
Reporting Bugs">instructions for
+ reporting a bug</a>.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="dejagnu"></a>Using DejaGnu</h3></div></div></div><p>
+
+ The easiest way to run <span class="application">Gnash</span>'s test
suite is to install
+ <span class="emphasis"><em><a class="ulink"
href="http://www.gnu.org/software/dejagnu"
target="_top">DejaGnu</a></em></span>.
+ After installing DejaGnu, run:
+ </p><pre class="programlisting">
+ make check
+ </pre><p>
+ </p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5
class="title"><a name="testing_verbosity"></a>Increasing
Verbosity</h5></div></div></div><p>
+ If you encounter a problem with a test, increasing the
+ verbosity may make the issue easier to spot.
+ Additional details are visible when
+ <span class="emphasis"><em>RUNTESTFLAGS</em></span> are used to add
the
+ <span class="emphasis"><em>verbose</em></span> and <span
class="emphasis"><em>all</em></span> options.
+ The <code class="option">verbose</code> option prints more
information about the testing process, while
+ the <code class="option">all</code> option includes details on
passing tests.
+ </p><pre class="programlisting">
+ make check RUNTESTFLAGS="-v -a"
+ </pre><p>
+ </p></div><div class="sect4" lang="en"><div
class="titlepage"><div><div><h5 class="title"><a
name="running_some_tests"></a>Running Some Tests</h5></div></div></div><p>
+ It is possible to run just a single test, or
+ a subdirectory of tests, by specifying the directory or
+ compiled test file.
+ </p><p>
+ Some tests rely on <span
class="emphasis"><em>testsuite/Dejagnu.swf</em></span>,
+ which in turn relies on <span class="emphasis"><em>Ming</em></span>.
+ This file is created when you run <span class="command"><strong>make
check</strong></span> for the entire
+ testsuite, and can also be created on demand:
+ </p><pre class="programlisting">
+ make -C testsuite Dejagnu.swf
+ </pre><p>
+ </p><p>
+ In this example, the <span
class="command"><strong>clip_as_button2</strong></span> test is compiled and
+ run:
+ </p><pre class="programlisting">
+ make -C testsuite/samples clip_as_button2-TestRunner
+ cd testsuite/samples && ./clip_as_button2-TestRunner
+ </pre><p>
+ This creates and runs all the tests in the directory
+ <code class="filename">movies.all</code>:
+ </p><pre class="programlisting">
+ make -C testsuite/movies.all check
+ </pre><p>
+ </p></div></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="manually"></a>Running
The Tests Manually</h3></div></div></div><p>
+ You may also run test cases by hand, which can be useful if you
+ want to see all the debugging output from the test case. Often
+ the messages which come from deep within <span
class="application">Gnash</span> are most useful for
+ development.
+ </p><p>
+ The first step is to compile the test case, which can be done
+ with <code class="filename">make XML-v#.swf</code> where the '#' is
replaced
+ with the <span class="emphasis"><em>target</em></span> SWF version or
versions.
+ For example:
+ </p><pre class="programlisting">
+ make XML-v{5,6,7,8}.swf
+ </pre><p>
+ </p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5
class="title"><a name="manual_compiled_tests"></a>Movie
tests</h5></div></div></div><p>
+ This creates a Flash movie version of the test case, which
+ can be run with a standalone Flash player. For instance,
+ the target for SWF version 6 could be run with <span
class="application">Gnash</span>:
+ </p><pre class="programlisting">
+ gnash -v XML-v6.swf
+ </pre><p>
+ </p></div><div class="sect4" lang="en"><div
class="titlepage"><div><div><h5 class="title"><a
name="manual_actionscript_tests"></a>ActionScript Unit
Tests</h5></div></div></div><p>
+ Unit tests for ActionScript classes in <span
class="command"><strong>testsuite/actionscript.all</strong></span>
+ are run without a graphical display:
+ </p><pre class="programlisting">
+ gprocessor -v XML-v6.swf
+ </pre><p>
+ </p></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="install"></a>Installation</h2></div></div></div><p>
+ Now that <span class="application">Gnash</span> has been compiled and
tested, use the following command to install it:
+ </p><pre class="programlisting">
+ make install
+ </pre><p>
+ The above command installs the standalone player. If the correct
+ files were found by <span
class="command"><strong>configure</strong></span> and if the
+ <code class="option">--disable-plugin</code> option was not specified, the
+ <span class="application">Gnash</span> browser plugin is also installed.
+ </p><p>
+ <span class="application">Gnash</span> installs a number of <a
class="link" href="#libinstall" title="Libraries">libraries</a>,
+ namely: <span class="emphasis"><em>libgnashbase</em></span>,
+ <span class="emphasis"><em>libgnashamf</em></span>, <span
class="emphasis"><em>libgnashmedia</em></span>,
+ <span class="emphasis"><em>libserver</em></span>, and <span
class="emphasis"><em>libgnashplugin</em></span>.
+ <a class="link" href="#appinstall" title="Executables">Executables</a>
+ consist of the (optional) plugin, <code class="filename">gprocessor</code>,
+ <code class="filename">cygnal</code>, <code
class="filename">dumpshm</code>,
+ <code class="filename">soldumper</code>, and <code
class="filename">gnash</code>.
+ <a class="link" href="#docinstall" title="Documentation">Documentation</a>
may also be installed.
+ The installation location is controlled with the
+ <span class="emphasis"><em>--prefix</em></span> <a class="link"
href="#custompath" title="Specifying Custom Paths">configure
+ option</a>, except for plugins, which are explicitly set with
+ <span class="emphasis"><em>--plugin-dir</em></span>.
+ </p><p>
+ Note that if you are using a single file-system <span
class="emphasis"><em>NFS</em></span>
+ mounted to multiple platforms, the
+ <a class="link" href="#custompath" title="Specifying Custom
Paths">configuration option</a>
+ <span class="emphasis"><em>--exec-prefix</em></span> may be used to
specify where
+ platform-dependent executables and libraries are installed.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="libinstall"></a>Libraries</h3></div></div></div><p>
+ Installed libraries are located in
+ <code class="filename">/usr/local/lib</code> by default.
+ If the <span class="emphasis"><em>--prefix</em></span> option was used
during the
+ configuration step, the libraries will
+ be installed in the directory <code class="filename">lib</code> inside
the
+ path you specified. If the libraries are stored in a non-standard
+ location, you must identify the path in one of two ways.
+ </p><p>
+ The traditional way to do this on UNIX
+ platforms is to set the <span
class="emphasis"><em>LD_LIBRARY_PATH</em></span> variable
+ to the path plus <code class="filename">/lib</code>. For example, if you
+ installed in <code class="filename">/home/gnash</code>, the
+ <span class="emphasis"><em>LD_LIBRARY_PATH</em></span> path would be
+ <code class="filename">/home/gnash/lib</code>. Multiple paths are
delimited
+ with a colon (':').
+ </p><p>
+ GNU/Linux allows the custom path to be added to
+ <code class="filename">/etc/ld.so.conf</code>. After adding the path,
+ run <span class="emphasis"><em>ldconfig</em></span> as root to update
the runtime
+ cache.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="appinstall"></a>Executables</h3></div></div></div><p>
+ The Mozilla plugin is built from headers (the Mozilla SDK) provided with
Gnash and
+ does not need extra development packages to be installed. By default, the
+ plugin is installed to <code
class="filename">~/.mozilla/plugins/</code>. To enable
+ the plugin for other users, copy the file <code
class="filename">libgnashplugin.so</code>
+ to <code class="filename">.mozilla/plugins/</code> in their home
directory.
+ You may also specify the plugin installation directory by using the
+ <code class="option">--with-plugindir</code> <a class="link"
href="#custompath" title="Specifying Custom Paths">option
+ at configuration time</a>.
+ </p><p>
+ These defaults are likely to change in future versions of Gnash.
+ </p><p>
+ The remaining executables are installed in the <code
class="filename">bin</code>
+ subdirectory of the directory specified by during configuration.
+ If no path was specified, the default is
+ <code class="filename">/usr/local/bin</code>.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="docinstall"></a>Documentation</h3></div></div></div><p>
+ Documentation is not built by default; please refer to the
+ <a class="link" href="#processdoc" title="Creating the
Documentation">section on documentation</a> for
+ more information on building documentation.
+ </p><p>
+ <span class="command"><strong>man</strong></span> and <span
class="command"><strong>info</strong></span>
+ are installed in <code class="filename">/usr/local/share/man</code>
+ and <code class="filename">/usr/local/share/info</code> respectively,
unless
+ the <code class="option">--mandir</code> or <code
class="option">--infodir</code>
+ <a class="link" href="#custompath" title="Specifying Custom
Paths">configuration options</a> are used.
+ </p><p>
+ <span class="emphasis"><em>GNOME help</em></span> documentation uses the
directory
+ <code class="filename">/usr/local/share/gnash/doc/gnash/C/</code> by
default.
+ A configuration file in the <span class="application">Gnash</span>
source tree,
+ <code class="filename">doc/C/gnash.omf</code> is used to specify under
+ which menu item <span class="application">Gnash</span> appears in the
<span class="emphasis"><em>GNOME help</em></span>
+ system.
+ </p></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="cross"></a>Cross Configuring</h2></div></div></div><p>
+ To cross configure and compile <span class="application">Gnash</span>,
begin by building a target system
+ on your workstation. This includes cross compilers for the target
+ architecture, and some system headers.
+ You will also need to cross compile all the <a class="link"
href="#docdepend" title="Documentation Dependencies">dependencies
+ </a> normally needed to build Gnash. This can on occasion be a
+ daunting process, as not all libraries will cross configure and cross
+ compile. There is more information about cross compiling all the
+ dependant packages on the <a class="ulink" href="http://www.gnashdev.org"
target="_top">http://www.gnashdev.org</a> web
+ site.
+ </p><p>
+ If you need to build your own tool chain, that is beyond the scope
+ of this manual. There are various resources on the web for howto's
+ on building GCC based cross toolchains. Two popular sites are
+ <a class="ulink" href="http://frank.harvard.edu/~coldwell/toolchain/"
target="_top">http://frank.harvard.edu/~coldwell/toolchain/</a>
+ and <a class="ulink" href="http://www.kegel.com/crosstool/"
target="_top">http://www.kegel.com/crosstool/</a>. This
+ can also be a very time consuming and frustrating process, even
+ for experienced developers.
+ </p><p>
+ Because the process of building your own cross tool chain can be
+ harder than one may wish, there are several other cross
+ development environments that simulate a native environment to
+ make it easier to develop. These also let you develop for both
+ native and cross builds. Several popular ones are
+ <a class="ulink"
href="http://www.access-company.com/products/linux/alp.html" target="_top">
+ Access Linux Platform</a>,
+ <a class="ulink" href="http://www.scratchbox.org/" target="_top">
+ Scratchbox</a>,
+ <a class="ulink" href="http://www.openembedded.org/" target="_top">
+ Open Embedded</a>,
+ <a class="ulink" href="http://maemo.org/" target="_top">
+ Maemo</a>.
+ </p><p>
+ To build for an ARM based system on an x86 based systems,
+ configure like this using the traditional style cross toolchain,
+ configure like this:
+ </p><pre class="programlisting">
+ ../../gnash/configure --build=i686-pc-linux-gnu
+ --host=arm-linux --prefix=/usr/local/arm/oe --disable-nsapi
+ --disable-kparts --enable-gui=fb --enable-renderer=agg
+ --disable-shared --disable-menus
+
+ </pre><p>
+ The important configuration options are the ones which specify the
+ architecture for the build:
+ </p><div class="variablelist"><dl><dt><span
class="term">--target</span></dt><dd><p>
+ The target architecture, where the final executables are expected
+ to run.
+ </p></dd><dt><span class="term">--host</span></dt><dd><p>
+ The host architecture, where the executables are expected
+ to run. Usually this is the same as the <span
class="emphasis"><em>--target</em></span>,
+ except when building a compiler as a Canadian Cross. In this
+ case, you might build a cross compiler on a UNIX system which
+ runs on a win32 machine, producing code for a third architecture,
+ such as ARM. In this example, <span
class="emphasis"><em>--target</em></span> would
+ be 'arm-unknown-linux-gnu', while <span
class="emphasis"><em>--host</em></span> would
+ be 'win32'.
+ </p></dd><dt><span class="term">--build</span></dt><dd><p>
+ This is the system the build is running on.
+ </p></dd></dl></div><p>
+ The following example of <span class="emphasis"><em>configure</em></span>
builds for an
+ ARM system on an x86 system. It was run after an ARM system was built
+ in <code class="filename">/usr/arm</code> and other required libraries
were
+ cross compiled.
+ </p><pre class="programlisting">
+ ./configure -target=arm-unknown-linux-gnu --prefix=/usr/arm \
+ --host=arm-unknown-linux-gnu --build=i686-pc-linux-gnu --disable-plugin
+ </pre><p>
+ </p></div></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="internals"></a>Chapter
3. Software Internals</h2></div></div></div><div class="toc"><p><b>Table of
Contents</b></p><dl><dt><span class="sect1"><a href="#tour">A Tour of
Gnash</a></span></dt><dd><dl><dt><span class="sect2"><a
href="#The%20Libraries">The Libraries</a></span></dt><dt><span class="sect2"><a
href="#apps">The Applications</a></span></dt><dt><span class="sect2"><a
href="#plugin">The Plugin</a></span></dt><dt><span class="sect2"><a
href="#logging">The Debug Logging System</a></span></dt></dl></dd><dt><span
class="sect1"><a href="#soundhandlers">Sound handling in
Gnash</a></span></dt><dd><dl><dt><span class="sect2"><a
href="#soundtypes">Sound types</a></span></dt><dt><span class="sect2"><a
href="#soundparsing">Sound parsing</a></span></dt><dt><span class="sect2"><a
href="#soundplayback">Sound playback</a></span></dt><dt><span class="sect2"><a
href="#sdlsound">The SDL sound backend</a></span></dt><dt><span
class="sect2"><a href="#gstreamer">The Gstreamer
backend</a></span></dt><dt><span class="sect2"><a href="#audio-future">Future
audio backends</a></span></dt><dt><span class="sect2"><a
href="#gstreamer-details">Detailed description of the Gstreamer
backend</a></span></dt></dl></dd><dt><span class="sect1"><a
href="#testing">Testing </a></span></dt><dd><dl><dt><span class="sect2"><a
href="#testtools">Testing Tools</a></span></dt><dt><span class="sect2"><a
href="#testcases">Test Cases</a></span></dt><dt><span class="sect2"><a
href="#writeastests">Writing ActionScript Tests</a></span></dt><dt><span
class="sect2"><a href="#writemingtests">Writing Ming-based self-contained SWF
tests</a></span></dt><dt><span class="sect2"><a
href="#writing_dejagnu_so_tests">Writing self-contained SWF tests with other
compilers</a></span></dt><dt><span class="sect2"><a
href="#writing_test_runners">Writing Test
Runners</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="tour"></a>A Tour of Gnash</h2></div></div></div><p>
+ The top level of Gnash has several libraries, <span
class="emphasis"><em>libgnashbase</em></span>,
+ <span class="emphasis"><em>libgnashserver</em></span>,
+ <span class="emphasis"><em>libgnashasobjs</em></span> and
+ <span class="emphasis"><em>libgnashbackend</em></span>. There are
several utility programs
+ included for debug parsing and processing of Flash movie files,
+ and other useful utilities for examining local Shared Objects and
+ sniffing LocalConnections.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="The%20Libraries"></a>The
Libraries</h3></div></div></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="libbase"></a>libgnashbase</h4></div></div></div><p>
+ Libgnashbase contains support classes used by the rest of the
+ code.This library has no dependencies on any of the other
+ <span class="application">Gnash</span> libraries.
+ </p><p>
+ <span class="application">Gnash</span> makes heavy use of smart
pointers, so memory allocations
+ are freed up automatically by the interpreter. Both STL and
+ Boost smart pointers are used.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="libgnashgui"></a>libgnashgui</h4></div></div></div><p>
+ Libgnashgui contains code for a portable GUI class that
+ supports using GTK2, a framebuffer, SDL, or KDE, FLTK, or Aqua.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="libgnashserver"></a>libgnashserver</h4></div></div></div><p>
+ Libgnashserver is the guts of the interpreter itself. This is where
+ the main code for the interpreter lives. Includes in
+ libserver are the two support libraries for the parser and
+ the core of the virtual machine.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="libgnashasobjs"></a>libgnashasobjs</h4></div></div></div><p>
+ Libgnashasobjs contains all the ActionScript classes used by
+ the interpreter.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="libgnashamf"></a>libgnashamf</h4></div></div></div><p>
+ AMF is the data format used internally by SWF files. This is
+ Gnash's support library to handle AMF data. This is used by
+ the ActionScript classes SharedObject and
+ LocalConnection. This is also used by the NetStream class
+ when using thre RTMP streaming network protocol.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="libgnashbackend"></a>libgnashbackend</h4></div></div></div><p>
+ Libgnashbackend is a library containing the rendering
+ code that glues this display to the Gnash. Supported
+ rendering backends are OpenGL, Cairo, and AGG.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="libgnashpluin"></a>libgnashplugin</h4></div></div></div><p>
+ Libgnashplugin is the Mozilla/Firefox plugin.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="libklashpart"></a>libklashpart</h4></div></div></div><p>
+ Libklashpart is the Konqueror plugin.
+ </p></div></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="apps"></a>The
Applications</h3></div></div></div><p>
+ There are currently a few standalone programs in Gnash,
+ which serve either to assist with Gnash development or to play flash
+ movies.
+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4
class="title"><a name="Gnash"></a>The Standalone
Player</h4></div></div></div><p>
+ This is the standalone OpenGL backend used to play
+ movies. There are several command line options and keyboard
+ control keys used by Gnash.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="processor"></a>Gprocessor</h4></div></div></div><p>
+ Gprocessor is used to print out the actions (using the -va
+ option) or the parsing (using the -vp option) of a flash
+ movie. It is also used to produce the <span
class="emphasis"><em>.gsc</em></span>
+ files that Gnash uses to cache data, thereby speeding up the
+ loading of files.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="soldumper"></a>SOLdumper</h4></div></div></div><p>
+ SOLDumper is a utility program used to find and dump the
+ content of <span class="emphasis"><em>Local Shared
Objects</em></span>, also
+ called "Flash Cookies" by some.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="dumpshm"></a>Dumpshm</h4></div></div></div><p>
+ Dumpshm is a program used to find and dump the contents of
+ the <span class="emphasis"><em>LocalConnection</em></span> shared
memory segment.
+ </p></div></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="plugin"></a>The
Plugin</h3></div></div></div><p>
+ The plugin is designed to work within Mozilla or Firefox,
+ although there is Konqueror support as well. The plugin uses
+ the Mozilla NPAPI plugin API to be cross platform, and is
+ portable, as well as being well integrated into Mozilla based
+ browsers.
+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4
class="title"><a name="pluginstatus"></a>Current
Status</h4></div></div></div><p>
+ As of March 30, 2006, the plugin works! This works in a
+ fashion similar to MozPlugger in that the standalone player
+ is used instead of using a thread. This gets around the
+ issue of having to maintain a separate player to support the
+ plugin. It also gets around the other issues that Gnash
+ itself is not thread safe at this time.
+ </p><p>
+ As of Jan, 2007, streaming video, ala "YouTube"
+ works, along with other video sharing sites.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a name="gui"></a>GUI
Support</h4></div></div></div><p>
+ Any plugin that wants to display in a browser window needs
+ to be tied into the windowing system of the platform being
+ used. On GNU/Linux systems, Firefox is a GTK2+ application.
+ There is also KDE support through the use of the Klash
+ plugin.
+ </p><p>
+ Gnash can use either several different GUI toolkits to create the
window,
+ and to handle events for the standalone player.
+ </p><p>
+ The SDL version is more limited, but runs on all
+ platforms, including win32. It has no support for event
+ handling, which means mouse clicks, keyboard presses, and
+ window resizing doesn't work. I personally find the default
+ event handler slow and unresponsive. Gnash has support to
+ use fast events, (currently not enabled) which is an SDL
+ hack using a background thread to pump events into the SDL
+ event queue at a much higher rate.
+ </p><p>
+ There are a variety of development libraries that build a GUI
+ widget system on top of SDL and OpenGL. The use of these to
+ add menus and dialog boxes to the SDL version is being
+ considered.
+ </p><p>
+ The GTK support is currently the most functional, and the
+ best integrated into Firefox. The performance of this
+ version is better than the SDL version because of the more
+ efficient event handling within GTK. For the best end user
+ experience, use the GTK enabled version.
+ </p><p>
+ GTK also allows Gnash to have menus and dialog
+ boxes. Currently this is only being utilized in a limited
+ fashion for now. There is a right mouse button menu that
+ allows the user to control the movie being player the same
+ way the existing keyboard commands do.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="mozplugger"></a>Mozplugger</h4></div></div></div><p>
+ <a class="ulink" href="http://mozplugger.mozdev.org/"
target="_top">Mozplugger</a> is a
+ <span class="emphasis"><em>Mozilla/Firefox</em></span> plugin that
uses external
+ programs to play video, audio, and other multimedia content
+ in the browser. With some support added to the external
+ application, it's possible to force the external program to
+ use the internal window in the browser where this plugin is
+ supposed to display. This enables one to then run the
+ standalone player and display its output in the browser.
+ </p><p>
+ While this is not an optimal solution, it does enable one to
+ use Gnash as the flash player when browsing. The main issue
+ appears to be that the Flash movie being played doesn't get
+ any mouse or keyboard input. That may be a mozplugger
+ configuration issue, however.
+ </p><p>
+ Use of MozPlugger is obsolete now that the Gnash plugin
+ works. Still, this may be useful still on some platforms.
+ </p><p>
+ Add this to your <span
class="emphasis"><em>$(HOME)/.mozilla/mozpluggerrc</em></span>
+ file to enable this:
+
+ </p><pre class="programlisting">
+ application/x-shockwave-flash:swf:Shockwave Gnash
+ nokill embed noisy ignore_errors hidden fill swallow(Gnash) loop:
gnash -v "$file" -x $window
+ : gnash -v "$file" -x $window
+ </pre><p>
+ </p><p>
+ Once this is added, you must delete the
+ <span
class="emphasis"><em>$(HOME)/.mozilla/firefox/pluginreg.dat</em></span> file to
+ force Firefox to register the plugins again. This is an
+ ASCII text file, so if the patch has been added correctly,
+ you'll see an entry for <span class="emphasis"><em>swf</em></span>
files after it is
+ recreated. You will need to restart Firefox to recreate this
+ file.
+ </p><p>
+ This file is not recreated immediately when restarting
+ Firefox, but waits till the first time a plugin is used. You
+ can force creation of this file by typing
+ <span class="emphasis"><em>about:plugins</em></span> into the URL
entry of the browser
+ window. The output will also contain information about the
+ mozplugger. You should see an entry for Gnash now.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="Klash"></a>Klash</h4></div></div></div><p>
+ Klash is MozPlugger type support for KDE's Konqueror web
+ browser. Klash makes Gnash a <span
class="emphasis"><em>kpart</em></span>, so it's
+ integrated into KDE better than when using MozPlugger. Klash
+ uses the standalone player, utilizing Gnash's "-x" window
+ plugin command line option.
+ </p><p>
+ By default, Klash is not built. To enable building Klash,
+ use the <span class="emphasis"><em>--enable-klash</em></span> option
when
+ configuring. Other than installing, there is nothing else
+ that needs to be done to install Klash.
+ </p></div></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="logging"></a>The Debug
Logging System</h3></div></div></div><p>
+ Gnash supports a debug logging system which supports both C and C++
+ natively. This means you can use both <span
class="emphasis"><em>printf()</em></span> style
+ debug messages and C++ <span class="emphasis"><em>iostreams</em></span>
style, where you can
+ print C++ objects directly as you would when using
+ <span class="emphasis"><em>cout</em></span>.
+ </p><p>
+ In the beginning, Gnash only supported the C API for debug
+ logging, so it is the most heavily used in Gnash. This API was used in
+ the <span class="emphasis"><em>log_msg()</em></span> and <span
class="emphasis"><em>log_error()</em></span> functions,
+ and used a callback to set them up.
+ </p><p>
+ If a filename is not specified at object construction time, a
+ default name of <span class="emphasis"><em>gnash-dbg.log</em></span> is
used. If Gnash is
+ started from the command line, the debug log will be created in
+ the current directory. When executing Gnash from a launcher under
+ <span class="emphasis"><em>GNOME</em></span> or <span
class="emphasis"><em>KDE</em></span> the debug file goes in your
+ home directory, since that's considered the current directory.
+ </p><p>
+ There is common functionality between using the C or C++
+ API. Optional output is based on flags that can be set or
+ unset. Multiple levels of verbosity are supported, so you can get
+ more output by supplying multiple <span
class="emphasis"><em>-v</em></span> options on the
+ command line. You can also disable the creation of the debug log.
+ </p><p>
+ Currently the use of the C++ API for logging is discouraged, do to
+ performance issues.and the generic log_msg() has been replaced by
+ more spcific function calls to allow more control of what gets
+ displayed and logged.
+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4
class="title"><a name="capi"></a>Logging System C API</h4></div></div></div><p>
+ These functions are clones of the originals as they were used
+ for Gnash. These function the same as always except output can
+ be logged to disk now as well. These currently print no
+ timestamp with the output, which is the older functionality. As
+ these functions are implemented on top of the C++ API now, they
+ can be used without corrupting the output buffers.
+ </p><div class="variablelist"><dl><dt><span class="term">log_error(const
char* fmt, ...)</span></dt><dd><p>
+ Display an error message if verbose output is enabled. By
+ default the error messages are always written to the disk
+ file, but optionally displayed in the terminal.
+ </p></dd><dt><span class="term">void log_unimpl</span></dt><dd><p>
+ Displays a warning to the user about missing Gnash features.
+ We expect all calls to this function to disappear over time, as we
+ implement those features of Flash.
+ </p></dd><dt><span class="term">void log_trace</span></dt><dd><p>
+ Used only for explicit user traces
+ </p></dd><dt><span class="term">void log_debug</span></dt><dd><p>
+ Logs debug information.
+ </p></dd><dt><span class="term">void log_action</span></dt><dd><p>
+ Log action execution information. Wrap all calls to this
+ function (and other related statements) into an
+ IF_VERBOSE_ACTION macro, so to allow completely removing
+ all the overhead at compile time and reduce it at
+ runtime.
+ </p></dd><dt><span class="term">void log_parse</span></dt><dd><p>
+ Log SWF parsing Wrap all calls to this function (and
+ other related statements) into an IF_VERBOSE_PARSE macro,
+ so to allow completely removing all the overhead at
+ compile time and reduce it at runtime.
+ </p></dd><dt><span class="term">void log_security</span></dt><dd><p>
+ Display a message with security related information.
+ </p></dd><dt><span class="term">void log_swferror</span></dt><dd><p>
+ This indicates an error in how the binary SWF file was
+ constructed, i.e.probably a bug in the tools used to build
+ the SWF file. Wrap all calls to this function (and other
+ related statements) into an IF_VERBOSE_MALFORMED_SWF
+ macro, so to allow completely removing all the overhead at
+ compile time and reduce it at runtime.
+ </p></dd><dt><span class="term">log_warning(const char* fmt,
...)</span></dt><dd><p>
+ Display a warning message if verbose output is enabled. By
+ default the error messages are always written to the disk
+ file, but optionally displayed in the terminal.
+ </p></dd></dl></div></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a name="cppapi"></a>Logging
System C++ API</h4></div></div></div><p>
+ This is the new C++ streams based API that can be used to print
+ C++ objects natively. All output lines are timestamped.
+ </p><p>
+ There are two macros used for program tracing. these can be used
+ in both C or C++ code with one little difference. Since C
+ doesn't have destructors, you must call
+ <span class="emphasis"><em>GNASH_REPORT_RETURN</em></span> at the end of
a function to
+ display the function returning message.
+ </p><div class="variablelist"><dl><dt><span
class="term">GNASH_REPORT_FUNCTION;</span></dt><dd><p>
+ When this is included in a C++ method, a message is
+ printed when entering and exiting this method by hooking
+ into the constructor and destructor. These are always
+ written to the disk file, but optionally written to the
+ screen only at the highest levels of verbosity.
+ </p></dd><dt><span
class="term">GNASH_REPORT_RETURN;</span></dt><dd><p>
+ This is used by C functions to print the returning from
+ function debug message. For C++, this macro is executed
+ automatically by the destructor.
+ </p></dd></dl></div><p>
+ This is the main API for the logging system. By default
+ everything is setup to write to the default
+ <span class="emphasis"><em>gnash-dbg.log</em></span> file whenever a
verbose option is
+ supplied. Optionally it is possible to open a log file with a
+ specified name, allowing multiple output files.
+ </p><div class="variablelist"><dl><dt><span
class="term">closeLog(void)</span></dt><dd><p>
+ Close a debug log. The disk file remains.
+ </p></dd><dt><span class="term">removeLog(void)</span></dt><dd><p>
+ Delete the debug log file from disk.
+ </p></dd><dt><span class="term">setVerbosity(void)</span></dt><dd><p>
+ Increment the verbosity level.
+ </p></dd><dt><span class="term">setVerbosity(int)</span></dt><dd><p>
+ Set the verbosity level.
+ </p></dd><dt><span class="term">setStamp(bool flag)</span></dt><dd><p>
+ If <span class="emphasis"><em>flag</em></span> is <span
class="emphasis"><em>true</em></span>, then print a
+ timestamp prefixed to every output line. If
+ <span class="emphasis"><em>flag</em></span> is <span
class="emphasis"><em>false</em></span>, then don't print
+ a timestamp.
+ </p></dd><dt><span class="term">setWriteDisk(bool
flag)</span></dt><dd><p>
+ If <span class="emphasis"><em>flag</em></span> is <span
class="emphasis"><em>true</em></span>, then create the
+ disk file. If <span class="emphasis"><em>flag</em></span> is <span
class="emphasis"><em>false</em></span>,
+ then don't create the disk file.
+ </p></dd></dl></div></div></div></div><div class="sect1"
lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear:
both"><a name="soundhandlers"></a>Sound handling in
Gnash</h2></div></div></div><p>
+ When a SWF-file contains audio Gnash uses its sound handlers to play it.
+ At the moment there are two sound handlers, but it is likely that more
+ will be made.
+ </p><p>
+ There are two different settings related to sound support:
+ <span class="emphasis"><em>pluginsound</em></span> and <span
class="emphasis"><em>sound</em></span>.
+ This was done in order to allow the plugin to be independently
+ configured, for instance to block sound from advertisements.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="soundtypes"></a>Sound types</h3></div></div></div><p>
+ Sounds can be divided into two groups: event-sounds and soundstreams.
+ Event-sounds are contained in a single SWF frame, but the playtime can
+ span multiple frames. Soundstreams can be (and normally are) divided
+ between the SWF frames the soundstreams spans. This means that if a
+ gotoframe-action jumps to a frame which contains data for a soundstream,
+ playback of the stream can be picked up from there.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="soundparsing"></a>Sound
parsing</h3></div></div></div><p>
+ When Gnash parses a SWF-file, it creates a sound handler if possible
+ and hands over the sounds to it. Since the event-sounds are contained
+ in one frame, the entire event-sound is retrieved at once, while a
+ soundstream maybe not be completely retrieved before the entire
+ SWF-file has been parsed. But since the entire soundstream doesn't need
+ to be present when playback starts, it is not necessary to wait.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="soundplayback"></a>Sound
playback</h3></div></div></div><p>
+ When a sound is about to be played Gnash calls the sound handler, which
+ then starts to play the sound and return. All the playing is done by
+ threads (in both SDL and Gstreamer), so once
+ started the audio and graphics are not sync'ed with each other, which
+ means that we have to trust both the graphic backend and the audio
+ backend to play at correct speed.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="sdlsound"></a>The SDL
sound backend</h3></div></div></div><p>
+ The current SDL sound backend has replaced the original sound
+ handler, based on SDL_mixer, which by design had some limitations,
+ making it difficult to implement needed features such as support
+ for soundstreams.
+ The SDL sound backend supports both event-sounds and soundstreams,
+ using Gnash's internal ADPCM, and optionally MP3 support, using
+ either FFMPEG or LIBMAD.
+ When it receives sound data it is stored without being decoded, unless
+ it is ADPCM, which is decoded in the parser. When playing, backend
+ relies on a function callback for retrieving output sound, which is
+ decoded and re-sampled if needed, and all sound output is mixed
together.
+ The current SDL sound backend was made since Gnash needed a working
+ sound backend as soon as possible, and since the gstreamer backend at
+ the time suffered from bugs and/or lack of features in gstreamer. The
+ result was the most complete and best sound handler so far.
+ The advantages of the SDL sound handler is speed, and ease of use,
+ while its only real disadvantage is that it has to be compiled with
+ MP3 support, which some Linux distributions will probably not like...
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="gstreamer"></a>The
Gstreamer backend</h3></div></div></div><p>
+ The Gstreamer backend, though not complete, supports both soundstreams
+ and event-sounds. When receiving sound data it stores it compressed,
+ unless if it's ADPCM event-sounds, which it decodes by the parser.
+ When the playback starts, the backend sets up a
+ Gstreamer bin containing a decoder (and other things needed) and places
+ it in a Gstreamer pipeline, which plays the audio. All the sound data is
+ not passed at once, but in small chunks, and via callbacks the
+ pipeline gets fed. The advantages of the Gstreamer backend is that it
+ supports both kinds of sound, it avoids all the legal MP3-stuff, and it
+ should be relatively easy to add VORBIS support. The drawbacks are that
+ it has longer "reply delay" when starting the playback of a sound, and
+ it suffers under some bugs in Gstreamer that are yet to be fixed.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="audio-future"></a>Future
audio backends</h3></div></div></div><p>
+ It would probably be desirable to make more backends in the future,
+ either because other and better backend systems are brought to our
+ attention, or perhaps because an internal sound handling is better
+ suited for embedded platform with limited software installed.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="gstreamer-details"></a>Detailed description of the Gstreamer
backend</h3></div></div></div><p>
+ Gstreamer uses pipelines, bins and elements. Pipelines are the
+ main bin, where all other bins or elements are places. Visually the
+ audio pipeline in Gnash looks like this:
+ </p><pre class="programlisting">
+ ___
+ |Bin|_
+ |___| \
+ ___ \ _____ ____________
+ |Bin|___|Adder|_____|Audio output|
+ |___| |_____| |____________|
+ ___ /
+ |Bin|_/
+ |___|
+
+ </pre><p>
+ There is one bin for each sound which is being played. If a sound is
+ played more the once at the same time, multiple bins will be made. The
+ bins contains:
+ </p><pre class="programlisting">
+
+
|source|---|capsfilter|---|decoder|---|aconverter|---|aresampler|---|volume|
+
+ </pre><p>
+ In the source element we place parts of the undecoded sound data, and
+ when playing the pipeline will pull the data from the element. Via
+ callbacks it is refilled if needed. In the capsfilter the data is
+ labeled with the format of the data. The decoder (surprise!) decodes
+ the data. The audioconverter converts the now raw sound data into a
+ format accepted by the adder, all input to the adder must in the same
+ format. The audio re-sampler re-samples the raw sound data into a sample
+ accepted by the adder, all input to the adder must in the same
+ sample rate. The volume element makes it possible to control the volume
+ of each sound.
+ </p><p>
+ When a sound is done being played it emits a End-Of-Stream-signal
+ (EOS), which is caught by an event-handler-callback, which then makes
+ sure that the bin in question is removed from the pipeline. When a
+ sound is told by Gnash to stop playback before it has ended playback,
+ we do something (not yet finally implemented), which makes the bin emit
+ an EOS, and the event-handler-callback will remove the sound from the
+ pipeline. Unfortunately Gstreamer currently has a bug which causes the
+ entire pipeline to stop playing when unlinking an element from the
+ pipeline; so far no fix is known.
+ </p><p>
+ Gstreamer also contains a bug concerning linking multiple elements to
+ the adder in rapid succession, which causes to adder to "die" and stop
+ the playback.
+ </p></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="testing"></a>Testing </h2></div></div></div><p>
+ <a class="link" href="#runtests" title="Running the Tests">Instructions
on running tests</a>
+ can be found in the section on building Gnash.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="testtools"></a>Testing Tools</h3></div></div></div><p>
+ Currently Gnash uses three other tools to help with
+ testing. Two of these are free compilers for the Flash
+ format. This lets us write simple test cases for Gnash to test
+ specific features, and to see how the features operate.
+ </p><p>
+ The primary compiler used at this time is <a class="ulink"
href="http://ming.sf.net" target="_top">Ming</a>. Since release 0.3,
+ <span class="emphasis"><em>Ming</em></span> includes a command-line
compiler,
+ <span class="emphasis"><em>makeswf</em></span>. This allows test case
development
+ to be done entirely with free tools.
+ </p><p>
+ The other tools are optional.
+ <a class="ulink" href="http://www.gnu.org/software/dejagnu"
target="_top">DejaGnu</a>
+ is used to run multiple test cases in an automated
+ manner. <span class="emphasis"><em>DejaGnu</em></span> is used by many
other <a class="ulink" href="http://www.gnu.org" target="_top">GNU</a> projects
like
+ <a class="ulink" href="http://gcc.gnu.org" target="_top">GCC</a> and
+ <a class="ulink" href="http://www.samba.org" target="_top">Samba</a>.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="testcases"></a>Test
Cases</h3></div></div></div><p>
+ ActionScript test cases are located under testsuite/actionscript.all/;
+ these are organized in one file for the ActionScript class.
+ Other Ming-generated tests are under testsuite/ming-misc.all/;
+ these are typically used to test specific tag types.
+ Full movies are located in testsuite/movies.all/ and
+ sample movies are found in testsuite/samples/.
+ Other directories in testsuite/ are (or shall be) used for other
+ kind of tests.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="writeastests"></a>Writing ActionScript Tests</h3></div></div></div><p>
+ Writing ActionScript tests is very simple. The
+ <span class="emphasis"><em>makeswf</em></span> compiler makes use of
the C preprocessor,
+ thus allowing the inclusion of definitions for macros and external
+ files. We use these feature to provide common utilities
+ for test units.
+ </p><p>
+ Each test unit sets an <span class="emphasis"><em>rcsid</em></span>
variable, includes the
+ <span class="emphasis"><em>check.as</em></span> file and performs some
checks using
+ the provided macros. Here is an example:
+
+ </p><pre class="programlisting">
+
+ // This variable will be used by check.as
+ // to show testcase info as part of the test runs.
+ rcsid="Name and version of this testcase, usually the RCS id";
+
+ #include "check.as"
+
+ // Test object creation
+ check(new Object() instanceOf Object);
+
+ // Test parseInt
+ check(isNaN(parseInt('none')));
+
+ // Test assignment
+ var a = 1;
+ check_equals(a, 1);
+
+ // .. your tests here ...
+ </pre><p>
+ </p><p>
+ The check(expr) macro will <span class="emphasis"><em>trace</em></span>
PASSED or FAILED
+ together with the expression being evaluated and the line number
+ of the check. This is the format expected by DejaGnu.
+ </p><p>
+ The <span class="emphasis"><em>check_equals(obtained,
expected)</em></span> macro uses equality operator
+ <span class="emphasis"><em>==</em></span> to check for equality. When
possible, use of the
+ <span class="emphasis"><em>check_equals()</em></span> macro is
preferred over <span class="emphasis"><em>check()</em></span>
+ because it shows what the actual result was in case of a failure.
+ </p><p>
+ Additionally, the check.as file provides a transparent way to send
+ results to a TextField rather then using trace. This is very useful
+ when you use a flash player without tracing support.
+ </p><p>
+ Test units are built by running <span class="emphasis"><em>make
TestName-v#.swf</em></span>.
+ This will use TestName.as as source and the value of # as target
version.
+ Allowed target version are from 5 to 8 (inclusive).
+ </p><p>
+ Note that if you get a syntax error from the compiler, the line
+ number will refer to the pre-processed file. This file is called
+ <span class="emphasis"><em>TestName.as.pp</em></span> or <span
class="emphasis"><em>TestName-v#.swf.frame#.pp</em></span>
+ (depending on Ming version) and it's not thrown away by
+ <span class="emphasis"><em>makeswf</em></span> to make debugging easier.
+ </p><p>
+ Sometimes an expression is only supported by a specific SWF
+ version, or it's evaluated differently by different SWF versions.
+ For this purpose the framework provides an OUTPUT_VERSION macro
+ that you can use to switch code based on output version. For example:
+
+ </p><pre class="programlisting">
+
+ #if OUTPUT_VERSION >= 7
+ check(_root.getSWFVersion == OUTPUT_VERSION);
+ #endif
+
+ </pre><p>
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="writemingtests"></a>Writing Ming-based self-contained SWF
tests</h3></div></div></div><p>
+ Ming-based test cases are located in testsuite/misc-ming.all
+ and contain a test generator and a test runner.
+ The test generator (usually a C program) is used to produce the SWF
+ file, while the test runner (a C++ program) will run it using a
+ MovieTester class.
+ Note that only the test generator needs Ming, not the test
+ runner, so if Ming isn't installed on the user's host,
+ the test cases can still be run as long as SWF has been distributed.
+ </p><p>
+ Producing tests using Ming has the advantage that you can easily see
+ and modify the full source code for the SWF movie, and you can use
+ some <a class="link" href="#ming_testgenerator_facilities" title="Using
Ming-based test generators facilities">facilities</a>
+ provided by the Gnash testing framework to easily run tests.
+ </p><p>
+ For generic Ming API documentation, see <a class="ulink"
href="http://www.libming.org/" target="_top">http://www.libming.org</a>.
+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4
class="title"><a name="ming_testgenerator_facilities"></a>Using Ming-based test
generators facilities</h4></div></div></div><p>
+ Ming-based test generator facilities, which might be moved into
+ a loadable SWF in the future, can be currently used by your test
+ generator by including the ming_utils.h file and calling the
+ appropriate functions.
+ </p><p>
+ The most useful facility provided for Ming-based SWF test generators
+ is a Dejagnu-like TestState ActionScript class.
+ In order to use this facility you must call 'add_dejagnu_functions()'
+ right after Movie creation.
+ The function takes an SWFMovie object and some parameters specifying
+ depth and location of the "visual" trace textfield; it instantiates
+ a global 'TestState' ActionScript object to keep track of test's state.
+ </p><p>
+ You will <span class="emphasis"><em>not</em></span> need to directly
invoke the
+ TestState object created by the 'add_dejagnu_functions()' routine,
+ rather you will be using C macros hiding its complexity:
+
+ </p><pre class="programlisting">
+
+ check(SWFMovie mo, const char* expr)
+
+ Evaluate an ActionScript expression.
+
+ xcheck(SWFMovie mo, const char* expr)
+
+ Evaluate an ActionScript expression.
+ A failure is expected
+ (for cases where the call exposes a known bug).
+
+ check_equals(SWFMovie mo, const char* obtained, const char* expected)
+
+ Evaluate an ActionScript expression against an expected output.
+
+ xcheck_equals(SWFMovie mo, const char* obtained, const char* expected)
+
+ Evaluate an ActionScript expression against an expected output.
+ A failure is expected (for cases where the call exposes a known
bug).
+
+ print_tests_summary(SWFMovie mo)
+
+ This will print a summary of tests run, and should be
+ called as the last step in your SWF generator.
+ </pre><p>
+
+ </p><p>
+ Test cases generated using Ming and the provided
+ <a class="link" href="#ming_testgenerator_facilities" title="Using
Ming-based test generators facilities">facilities</a>
+ will be self-contained, which means they can be used as tests
+ by simply running them with whatever Player you might have.
+ Any 'check' or 'check_equals' result will be both traced and
+ printed in a textfield. You can use 'gprocessor -v' to have
+ Gnash use them as tests.
+ </p><p>
+ See section <a class="link" href="#writing_test_runners" title="Writing
Test Runners">Writing Test Runners</a>
+ for information about writing SWF test runners.
+ </p></div></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="writing_dejagnu_so_tests"></a>Writing self-contained SWF tests with other
compilers</h3></div></div></div><p>
+ If you want/need to use a different compiler for your test cases
(there's
+ plenty of open source tools for generating SWF out there), you can still
+ make use of a loadable SWF utility provided as part of the Gnash
testsuite
+ to let your test consistent with the rest of the suite.
+ </p><p>
+ The loadable module is called <span
class="emphasis"><em>Dejagnu.swf</em></span> and is built during
+ <span class="emphasis"><em>make check</em></span> under
testsuite/misc-ming.all. In order to use it
+ you will need to load it into your SWF. We currently load it with an
IMPORT
+ tag for our ActionScript based test cases, but you can probably also use
+ loadMovie or whatever works in the target SWF you're generating. Just
make
+ sure that the module is initialized before using it. You can check this
by
+ inspecting the <span
class="emphasis"><em>dejagnu_module_initialized</em></span> variable, which will
+ be set to 'true' when all initialization actions contained in the
+ <span class="emphasis"><em>Dejagnu.swf</em></span> file are executed.
+ </p><p>
+ Once the module is loaded you will be able to invoke the following
functions,
+ all registered against the <span class="emphasis"><em>_root</em></span>
sprite (effects of <span class="emphasis"><em>_lockroot</em></span>
+ untested):
+ </p><pre class="programlisting">
+
+ check(expression, [message]);
+
+ Evaluate the expression.
+ Trace result (PASSED: expression / FAILED: expression).
+ If fails, *visually* trace the failure.
+ If second argument is given, it will be used instead of
+ 'expression' for printing results.
+
+ check_equals(obtained, expected)
+
+ Evaluate an expression against an expected output.
+ Trace result (PASSED: obtained == expected / FAILED: expected X,
obtained Y)
+ If fails, *visually* trace the failure.
+
+ xcheck(expression, [message]);
+
+ Evaluate the expression.
+ Trace result (XPASSED: expression / XFAILED: expression).
+ If fails, *visually* trace the failure.
+ If second argument is given, it will be used instead of
+ 'expression' for printing results.
+
+ xcheck_equals(obtained, expected)
+
+ Evaluate an expression against an expected output.
+ Trace result (XPASSED: obtained == expected / XFAILED: expected X,
obtained Y)
+ If fails, *visually* trace the failure.
+
+ note(string)
+
+ Print string, both as debugging and *visual* trace.
+
+ totals()
+
+ Print a summary of tests run, both as debugging and *visual* traces.
+
+ </pre><p>
+ </p><p>
+ Visual traces are lines of text pushed to a textarea defined
+ by the <span class="emphasis"><em>Dejagnu.swf</em></span> module. The
textarea is
+ initially placed at <span class="emphasis"><em>0, 50</em></span> and is
+ <span class="emphasis"><em>600x800</em></span> in size. You can
resize/move the clip
+ after loading it. Also, you can completely make the clip
+ invisible if that bothers you. The important thing is the
+ <span class="emphasis"><em>debugging</em></span> trace (call to the
trace
+ function). The latter will be used by the testing framework.
+ </p><p>
+ See section <a class="link" href="#writing_test_runners" title="Writing
Test Runners">Writing Test Runners</a>
+ for information about writing a test runners for your self-contained
tests.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="writing_test_runners"></a>Writing Test Runners</h3></div></div></div><p>
+ Test runners are executables that run one or more tests,
+ writing results in Dejagnu form to standard output.
+ </p><p>
+ The Dejagnu form uses a standard set of labels when printing test
+ results. These are:
+ </p><div class="informaltable"><table border="1"
width="75%"><colgroup><col><col></colgroup><thead><tr><th valign="top">
+ <p>Label</p>
+ </th><th valign="top">
+ <p>Meaning</p>
+ </th></tr></thead><tbody><tr><td align="left" valign="top">
+ <p>PASSED</p>
+ </td><td align="left" valign="top">
+ <p>The test succeeded.</p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>FAILED</p>
+ </td><td align="left" valign="top">
+ <p>The test failed.</p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>XPASSED</p>
+ </td><td align="left" valign="top">
+ <p>The test succeeded, but was expected to fail.</p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>XFAILED</p>
+ </td><td align="left" valign="top">
+ <p>The test failed, and was expected to fail.</p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>UNRESOLVED</p>
+ </td><td align="left" valign="top">
+ <p>The results of the test could not be automatically
+ parsed.</p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>UNTESTED</p>
+ </td><td align="left" valign="top">
+ <p>This test case is not complete.</p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>UNSUPPORTED</p>
+ </td><td align="left" valign="top">
+ <p>The test case relies on a conditional feature which
+ is not present in your environment.</p>
+ </td></tr></tbody></table></div><p>
+ </p><p>
+ The following labels may also appear:
+ </p><div class="informaltable"><table border="1"
width="75%"><colgroup><col><col></colgroup><thead><tr><th valign="top">
+ <p>Label</p>
+ </th><th valign="top">
+ <p>Meaning</p>
+ </th></tr></thead><tbody><tr><td align="left" valign="top">
+ <p>ERROR</p>
+ </td><td align="left" valign="top">
+ <p>There was a serious error in running the test. </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>WARNING</p>
+ </td><td align="left" valign="top">
+ <p>There may have been a problem with running the
+ test.</p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>NOTE</p>
+ </td><td align="left" valign="top">
+ <p>There was some additional information given about
+ the test.</p>
+ </td></tr></tbody></table></div><p>
+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4
class="title"><a name="generic_test_runner"></a>Using the generic test runner
for self-contained SWF tests</h4></div></div></div><p>
+ The simplest test runner is one that simply invokes Gnash
+ in verbose mode against a self-contained SWF test movie.
+ Self-contained SWF test movies are the ones that print
+ the PASSED/FAILED etc. lines using ActionScript (traces).
+ By invoking Gnash in verbose mode this movie will behave
+ as a compliant "Test Runner".
+ </p><p>
+ A generator for simple test runners can be found in
+ <span
class="emphasis"><em>testsuite/generic-testrunner.sh</em></span>.
+ The script can be invoked by passing it <span
class="emphasis"><em>$(top_builddir)</em></span>
+ as the first argument and the name of the SWF file (without the path)
+ as the second argument. This will create a specific runner for your
+ test in the current build directory.
+ A simple Makefile.am rule for doing this follows:
+ </p><pre class="programlisting">
+ MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+ sh $(srcdir)/../generic-testrunner.sh $(top_builddir) MyTest.swf
> $@
+ chmod +x $@
+ </pre><p>
+ </p><p>
+ By default, the generated test runner will play the movie up to the
+ last frame. If you want the movie to be played more then once (maybe
+ because you're exactly testing loop features) you can use the -r
switch
+ to the generic-testrunner.sh call. The following will create a runner
+ playing the movie twice:
+ </p><pre class="programlisting">
+ MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+ sh $(srcdir)/../generic-testrunner.sh -r2 $(top_builddir)
MyTest.swf > $@
+ chmod +x $@
+ </pre><p>
+ </p><p>
+ In case your test movie stops before the last frame, or you want to
control the
+ exact number of times to call the frame advancement routine, you can
use the
+ -f switch to control that.
+ </p><pre class="programlisting">
+ MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+ sh $(srcdir)/../generic-testrunner.sh -f10 $(top_builddir)
MyTest.swf > $@
+ chmod +x $@
+ </pre><p>
+ When both -f and -r are given, the first exit condition reached will
take effect.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="writing_movie_testers"></a>Writing Movie testers</h4></div></div></div><p>
+ There are some parts of Gnash that can NOT be tested
+ by only using ActionScript tests. Examples include: frame
+ advancements, actual actions execution, gui events and so on.
+ </p><p>
+ In this case you might want to use the MovieTester class to
+ implement a C++ test runner. Be aware that you can <span
class="emphasis"><em>mix</em></span> tests in
+ the MovieTester-based class with <span
class="emphasis"><em>self-contained</em></span>
+ tests in the SWF file as long as you activate verbosity for
+ the debug logfile. This is done, for example, for the
+ DefineEditTextVariableNameTest.swf file. The corresponding
+ test runner (DefineEditTextVariableNameTest-Runner) is a C++
+ runner based on MovieTester class. If you run the runner you
+ see two kinds of test results: the ones coming from the ActionScript
+ engine, and the ones coming from the test runner. You can
+ distinguish between the two because the former contains an additional
+ timestamp and the latter does not. Also, you'll see two final
+ summaries for the two test sets. The 'make check' rule, which uses
+ the testsuite/simple.exp output parser as its work-horse, will
+ count test results from both test sets.
+ </p><p>
+ Movie testers are executables which load an SWF, generate events
+ (both user or system) on it, and check its state using
+ a standard interface.
+ </p><p>
+ To help this process a MovieTester class is defined in the
+ testsuite/MovieTester.{h,cpp} files; see Doxygen documentation
+ for more information.
+ </p><p>
+ Note that you do NOT need access to the SWF source code in order
+ to implement a Movie tester for it. Some knowledge about the
+ expected behavior suffices.
+ </p></div></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="newclass"></a>Chapter 4.
Adding New ActionScript Class</h2></div></div></div><div
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a
href="#prototype">Prototype</a></span></dt><dt><span class="sect1"><a
href="#declaration">Declaration</a></span></dt><dt><span class="sect1"><a
href="#instantiation">Instantiation</a></span></dt><dt><span class="sect1"><a
href="#methods">Methods</a></span></dt><dt><span class="sect1"><a
href="#properties">Dynamic Properties</a></span></dt><dt><span class="sect1"><a
href="#as_value">The <span class="emphasis"><em>as_value</em></span> Object
Type</a></span></dt><dd><dl><dt><span class="sect2"><a href="#data_types">Data
Types</a></span></dt><dt><span class="sect2"><a href="#is_methods">Determining
the Type</a></span></dt><dt><span class="sect2"><a href="#to_methods">Fetching
the Value</a></span></dt><dt><span class="sect2"><a href="#set_methods">Setting
the Value and Type</a></span></dt><dt><span class="sect2"><a
href="#further_as_value_reading">Further
Reading</a></span></dt></dl></dd><dt><span class="sect1"><a
href="#asobject">Object ActionScript Class</a></span></dt><dd><dl><dt><span
class="sect2"><a href="#objectmethods">The Methods of the
Class</a></span></dt><dt><span class="sect2"><a href="#objectprops">The
Properties of the Object Class</a></span></dt><dt><span class="sect2"><a
href="#objectconf">Object Class
Conformance</a></span></dt></dl></dd></dl></div><p>
+ In this document, the term 'ActionScript class' refers to the
+ C++ class which is instantiated by Gnash when some ActionScript
+ code instantiates a corresponding class. The C++ class
+ stores instance data and implements the methods which are
+ called on the object in the ActionScript code.
+ </p><p>
+ Adding a new ActionScript class is relatively simple, but the
+ process is complicated by the fact that the interface has evolved
+ over time and the current code base represents several different
+ formats. This document describes the current interface. The
+ Boolean class should be considered the authoritative example of
+ a modern ActionScript class.
+ </p><p>
+ ActionScript classes contain a header file and a C++
+ implementation. The name is usually the name of the
+ class as it is called in the ActionScript specifications;
+ for instance <span class="emphasis"><em>Boolean.cpp</em></span> for the
Boolean class.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a
name="prototype"></a>Prototype</h2></div></div></div><p>
+ In ActionScript, a prototype is a base object which contains
+ all the methods that an instantiated object will contain.
+ In short, it contains every part of the class except for
+ the portions dealing with the storage of instance data.
+ </p><p>
+ In Gnash, the prototype of an ActionScript object is
+ implemented as an <span class="emphasis"><em>as_object</em></span>.
+ At startup, the methods and properties of the ActionScript class
+ are attached to the <span class="emphasis"><em>as_object</em></span>.
The
+ following example demonstrates how methods can be attached:
+ </p><pre class="programlisting">
+ static void
+ attachBooleanInterface(as_object& o) {
+ o.init_member("toString", new builtin_function(boolean_tostring));
+ o.init_member("valueOf", new builtin_function(boolean_valueof));
+ }
+ </pre><p>
+ </p><p>
+ Static properties can also be added to the ActionScript prototype
+ (<a class="link" href="#properties" title="Dynamic Properties">dynamic
properties</a>
+ are addressed later). They are attached in a similar way:
+ </p><pre class="programlisting">
+ o.init_member("myProperty", as_value("HelloWorld"));
+ </pre><p>
+ </p><p>
+ Properties which have been added in this manner can be
+ directly accessed in ActionScript code without a function
+ call, as this piece of ActionScript code compiled by Ming's
+ <span class="emphasis"><em>makeswf</em></span> compiler demonstrates:
+ </p><pre class="programlisting">
+ // Get the value of the myProperty property
+ if (node.myProperty == "HelloWorld") {
+ trace("MATCHED");
+ }
+ </pre><p>
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="declaration"></a>Declaration</h2></div></div></div><p>
+ A new class should derive from <span
class="emphasis"><em>as_object</em></span>,
+ which is the base class of every ActionScript object in Gnash.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="instantiation"></a>Instantiation</h2></div></div></div><p>
+ When a new object is needed, instance data is added to
+ the methods and properties inherited from the prototype.
+ </p><p>
+ The init method should be called in the constructor in
+ <span class="emphasis"><em>Global.cpp</em></span>, where all other
ActionScript
+ classes are similarly referenced. This method constructs a
+ prototype, which is implemented as an
+ <span class="emphasis"><em>as_object</em></span>. In addition, the
method
+ registers the constructor to be used for future object creation,
+ and attaches methods and properties to the prototype.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="methods"></a>Methods</h2></div></div></div><p>
+ Every method you implement and
+ <a class="link" href="#prototype" title="Prototype">attach</a> will
receive an
+ <span class="emphasis"><em>fn_call</em></span> data structure as an
argument when it is called.
+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4
class="title"><a name="arguments"></a>Accessing
Arguments</h4></div></div></div><p>
+ The arguments stored in <span class="emphasis"><em>fn_call</em></span>
+ should be accessed using <span class="emphasis"><em>arg()</em></span>.
For
+ instance, the first element can be popped with
+ <span class="emphasis"><em>fn.arg(0)</em></span>.
+ </p><p>
+ The element popped off the stack is an
+ <a class="link" href="#as_value" title="The as_value Object Type"><span
class="emphasis"><em>as_value</em></span>
+ object</a>.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a name="return"></a>Returning a
Value to ActionScript</h4></div></div></div><p>
+ The return value should be an
+ <a class="link" href="#as_value" title="The as_value Object Type"><span
class="emphasis"><em>as_value</em></span>
+ object</a>. For example:
+ </p><pre class="programlisting">
+ return as_value('Goodbye, cruel world.');
+ </pre><p>
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="additional_fn_call"></a>Additional <span
class="emphasis"><em>fn_call</em></span> Members</h4></div></div></div><p>
+ There are two other useful members of the <span
class="emphasis"><em>fn_call</em></span>
+ structure, namely <span class="emphasis"><em>this_ptr</em></span> and
+ <span class="emphasis"><em>nargs</em></span>. The former points to the
+ class which is invoking this method, while the latter
+ is a count of the number of
+ <a class="link" href="#arguments" title="Accessing Arguments">arguments
in the stack</a>.
+ </p><p>
+ You may also see instances of the <span
class="emphasis"><em>env</em></span>
+ pointer being used. This is being deprecated. Instances
+ which could be replaced with
+ <a class="link" href="#arguments" title="Accessing Arguments"><span
class="emphasis"><em>arg()</em></span></a>
+ are already deprecated; other uses will be deprecated
+ in the near future.
+ </p><p>
+ Beyond the <span class="emphasis"><em><a class="link" href="#arguments"
title="Accessing Arguments">arg()</a></em></span> method, there
+ is one method of note. <span
class="emphasis"><em>dump_args()</em></span>
+ can be used in debugging to output the entire argument
+ stack.
+ </p></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="properties"></a>Dynamic Properties</h2></div></div></div><p>
+ This section describes accessors to dynamic properties.
+ Read-only properties are described
+ in the <a class="link" href="#prototype" title="Prototype">prototype</a>
section.
+ </p><p>
+ Accessors should be written as a single get/set method.
+ Previously this was done by overriding
+ <span class="emphasis"><em>get_member()</em></span> and
+ <span class="emphasis"><em>set_member()</em></span>, but this practice
+ is deprecated.
+ </p><p>
+ The accessor is written so that it sets the property
+ if it is called with an argument, and puts the property in
+ the <a class="link" href="#methods" title="Methods"><span
class="emphasis"><em>fn_call</em></span></a>
+ <a class="link" href="#return" title="Returning a Value to
ActionScript">result pointer</a>. For instance:
+ </p><pre class="programlisting">
+ void
+ MyClass::myProperty_getset(const fn_call& fn) {
+ boost::intrusive_ptr<MyClass> ptr =
ensureType<MyClass>(fn.this_ptr);
+
+ // setter
+ if ( fn.nargs > 0 ) {
+ bool h = fn.arg(0).to_bool();
+ ptr->MyMethod(h);
+ return;
+ }
+
+ // getter
+ bool h = ptr->MyMethod();
+ fn.result->set_bool(h);
+ }
+ </pre><p>
+ </p><p>
+ It has not yet been decided whether properties should be set
+ in the <a class="link" href="#prototype" title="Prototype">exported
interface</a>
+ or attached to instances of the class. A property is attached
+ in the following manner:
+ </p><pre class="programlisting">
+ boost::intrusive_ptr<builtin_function> gettersetter;
+ gettersetter = new builtin_function(&MyClass::myProperty_getset,
NULL);
+ o.init_property("myProperty", *gettersetter, *gettersetter);
+ </pre><p>
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="as_value"></a>The <span class="emphasis"><em>as_value</em></span> Object
Type</h2></div></div></div><p>
+ The <span class="emphasis"><em>as_value</em></span> class is used
throughout
+ the interpreter to create generic objects to hold data.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="data_types"></a>Data Types</h3></div></div></div><p>
+ The following data types are supported:
+ <span class="emphasis"><em>NULLTYPE</em></span>,
+ <span class="emphasis"><em>BOOLEAN</em></span>, <span
class="emphasis"><em>STRING</em></span>,
+ <span class="emphasis"><em>NUMBER</em></span>, <span
class="emphasis"><em>OBJECT</em></span>,
+ <span class="emphasis"><em>AS_FUNCTION</em></span>, and
+ <span class="emphasis"><em>MOVIECLIP</em></span> (sprite).
+ The type <span class="emphasis"><em>C_FUNCTION</em></span> is being
deprecated.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="is_methods"></a>Determining the Type</h3></div></div></div><p>
+ Several methods allow you to determine if a value stored in
+ <span class="emphasis"><em>as_value</em></span> is of a specific type.
These
+ follow the form of <span class="emphasis"><em>is_TYPE</em></span>, for
example
+ <span class="emphasis"><em>is_as_function()</em></span> and
+ <span class="emphasis"><em>is_number()</em></span>. In general, the
type names
+ match the <a class="link" href="#data_types" title="Data Types">data
types</a> listed
+ above, with the exception of the type <span
class="emphasis"><em>MOVIECLIP</em></span>
+ which has a method <span class="emphasis"><em>is_sprite()</em></span>.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="to_methods"></a>Fetching
the Value</h3></div></div></div><p>
+ Another set of methods will return a representation of
+ the value as a particular type. They follow the
+ <span class="emphasis"><em>to_TYPE</em></span> naming convention.
Examples
+ are <span class="emphasis"><em>to_number()</em></span> and
+ <span class="emphasis"><em>to_bool()</em></span>. The type names are as
+ <a class="link" href="#data_types" title="Data Types">listed</a>
earlier, except for
+ <span class="emphasis"><em>MOVIECLIP</em></span>, which uses
+ <span class="emphasis"><em>to_sprite()</em></span>.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="set_methods"></a>Setting
the Value and Type</h3></div></div></div><p>
+ Finally, there is the <span class="emphasis"><em>set_TYPE</em></span>
series
+ of methods. They change the type to the type specified in
+ the method name, and set the value to the one given as an
+ argument. It is also possible to accomplish the same thing
+ with the <span class="emphasis"><em>=</em></span> operator. Again, type
names
+ match those <a class="link" href="#data_types" title="Data Types">named
earlier</a>,
+ except in the case of <span class="emphasis"><em>MOVIECLASS</em></span>.
Its
+ method is called <span class="emphasis"><em>set_sprite()</em></span>.
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
name="further_as_value_reading"></a>Further Reading</h3></div></div></div><p>
+ Please refer to <span class="emphasis"><em>as_value.h</em></span> or the
+ Doxygen documentation (see 'Processing The Documentation'
+ in the Gnash manual for instructions on generating
+ documents with Doxygen) for more information
+ about which methods are available for the
+ <span class="emphasis"><em>as_value</em></span> object.
+ </p></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="asobject"></a>Object ActionScript Class</h2></div></div></div><p>
+ This class implements an Object object.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="objectmethods"></a>The Methods of the
Class</h3></div></div></div><p>
+ </p><div class="variablelist"><dl><dt><span
class="term">addProperty()</span></dt><dd><p>
+ </p></dd><dt><span class="term">registerClass()</span></dt><dd><p>
+ </p></dd><dt><span class="term">toString()</span></dt><dd><p>
+ </p></dd><dt><span class="term">unwatch()</span></dt><dd><p>
+ </p></dd><dt><span class="term">valueOf()</span></dt><dd><p>
+ </p></dd><dt><span class="term">watch()</span></dt><dd><p>
+ </p></dd><dt><span class="term">Sharedclear()</span></dt><dd><p>
+ </p></dd><dt><span class="term">Sharedflush()</span></dt><dd><p>
+ </p></dd><dt><span class="term">SharedgetLocal()</span></dt><dd><p>
+ </p></dd><dt><span class="term">SharedgetSize()</span></dt><dd><p>
+ </p></dd></dl></div><p>
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="objectprops"></a>The
Properties of the Object Class</h3></div></div></div><p>
+ </p><div class="variablelist"><dl><dt><span
class="term">constructor</span></dt><dd><p>
+ </p></dd><dt><span class="term">__proto__</span></dt><dd><p>
+ </p></dd><dt><span class="term">__resolve</span></dt><dd><p>
+ </p></dd><dt><span class="term">Shareddata</span></dt><dd><p>
+ </p></dd><dt><span class="term">SharedonStatus</span></dt><dd><p>
+ </p></dd></dl></div><p>
+ </p></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="objectconf"></a>Object
Class Conformance</h3></div></div></div><p>
+ </p><div class="informaltable"><table border="1"
width="75%"><colgroup><col><col></colgroup><thead><tr><th valign="top">
+ <p>Class Name</p>
+ </th><th valign="top">
+ <p>Conformance</p>
+ </th></tr></thead><tbody><tr><td align="left" valign="top">
+ <p>addProperty()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>registerClass()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>toString()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>unwatch()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>valueOf()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>watch()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>Sharedclear()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>Sharedflush()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>SharedgetLocal()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>SharedgetSize()</p>
+ </td><td align="center" valign="top">
+ <p>
+ This method has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>constructor</p>
+ </td><td align="center" valign="top">
+ <p>
+ This property has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>__proto__</p>
+ </td><td align="center" valign="top">
+ <p>
+ This property has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>__resolve</p>
+ </td><td align="center" valign="top">
+ <p>
+ This property has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>Shareddata</p>
+ </td><td align="center" valign="top">
+ <p>
+ This property has an unknown status.
+ </p>
+ </td></tr><tr><td align="left" valign="top">
+ <p>SharedonStatus</p>
+ </td><td align="center" valign="top">
+ <p>
+ This property has an unknown status.
+ </p>
+ </td></tr></tbody></table></div><p>
+ </p></div></div></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="bugreport"></a>Chapter
5. Reporting Bugs</h2></div></div></div><div class="toc"><p><b>Table of
Contents</b></p><dl><dt><span class="sect1"><a href="#bugstep_package">Get a
Fresh Binary Package</a></span></dt><dt><span class="sect1"><a
href="#bugstep_search">Determine if the bug was previously
reported</a></span></dt><dt><span class="sect1"><a
href="#bugstep_guidelines">Review the bug writing
guidelines</a></span></dt><dt><span class="sect1"><a
href="#bugstep_file">Filing a bug report</a></span></dt></dl></div><p>
+ The Gnash project relies on the community of Gnash users to test
+ the player, feedback is critical to any successful project. Not
+ only does it let us know that people use Gnash, but it helps us
+ understand the community's needs. Gnash uses a bug tracker on
+ <a class="ulink" href="http://savannah.gnu.org"
target="_top">http://savannah.gnu.org</a> to manage these reports.
+ </p><p>
+ When filing a report, please follow the guidelines below. The better
+ your bug report is, the easier it will be for the developers to
+ address the issue. Bug reports without enough information will
+ initially be asked to provide this information anyway. Adding
+ critical details, like the Operating System you are on, its
+ version, and any relevant error messages from Gnash that you get.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a name="bugstep_package"></a>Get a Fresh
Binary Package</h2></div></div></div><p>
+ For starters, it's a good idea to obtain a copy of the latest
+ snapshot. Although Gnash is primarily released as source, the
+ Gnash build infrastructure allows the automated building of
+ binary packages. Often the version of Gnash as packaged by a
+ GNU/Linux or BSD distribution is based on the last official
+ release, which could be months out of date. It is helpful if
+ this is the case to try a newer packaged build of Gnash.
+ </p><p>
+ You can get a fresh binary package of Gnash, as well as recent
+ source packages from
+ <a class="ulink" href="http://www.getgnash.org/packages/" target="_top">
+ http://www.getgnash.org/packages
+ </a>.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="bugstep_search"></a>Determine if the bug was previously
reported</h2></div></div></div><p>
+ Search the <a class="ulink"
href="https://savannah.gnu.org/bugs/?group=gnash" target="_top">Gnash
+ bug tracker</a> to see if the bug has already been identified.
+ </p><p>
+ If the issue has already been reported, you should not file
+ a bug report. However, you may add some additional information
+ to the ticket if you feel that it will be beneficial to the
+ developers. For instance, if someone reported a memory issue
+ on Ubuntu GNU/Linux, and you noticed the same problem on OpenBSD,
+ your stacktrace would be useful. Conversely, adding a "me too"
+ note to a feature request is not helpful.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="bugstep_guidelines"></a>Review the bug writing
guidelines</h2></div></div></div><p>
+ A good bug report should be precise, explicit, and discrete.
+ This means that there should be just one bug per ticket, and
+ that a ticket should contain the following information:
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type: circle"><p>
+ An overview of the problem;
+ </p></li><li style="list-style-type: circle"><p>
+ Instructions on how to replicate the bug;
+ </p></li><li style="list-style-type: circle"><p>
+ A description of what happened when you performed the steps
+ to replicate the bug, and what you expected to happen;
+ </p></li><li style="list-style-type: circle"><p>
+ Your system information: operating system name and version, as
+ well as the versions of major development dependencies;
+ </p></li><li style="list-style-type: circle"><p>
+ The release number or checkout timestamp for the version of Gnash
+ where you observe the problem;
+ </p></li><li style="list-style-type: circle"><p>
+ The file <code class="filename">config.log</code>, which should be
+ attached as a file;
+ </p></li><li style="list-style-type: circle"><p>
+ A descriptive title.
+ </p></li></ul></div><p>
+ Include any additional information that you feel might be useful
+ to the developers.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="bugstep_file"></a>Filing a bug report</h2></div></div></div><p>
+ After following the steps described above, you can file a bug report at
+ <a class="ulink" href="https://savannah.gnu.org/bugs/?group=gnash"
target="_top">https://savannah.gnu.org/bugs/?group=gnash</a>.
+ </p></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="extensions"></a>Chapter
6. Gnash Extensions</h2></div></div></div><div class="toc"><p><b>Table of
Contents</b></p><dl><dt><span class="sect1"><a href="#newext">Creating A New
Extension</a></span></dt><dd><dl><dt><span class="sect2"><a
href="#craftext">Crafting an Extension</a></span></dt></dl></dd><dt><span
class="sect1"><a href="#debuext">Debugging An
Extension</a></span></dt><dt><span class="sect1"><a href="#inclext">Included
Extensions</a></span></dt></dl></div><p>
+ Gnash supports extending the Flash specification by creating
+ custom ActionScript classes that are compiled code, as opposed to
+ the existing method of defining custom classes as
+ ActionScript. Executing compiled code has many performance
+ benefits over having to interpret the byte stream of the
+ ActionScript opcodes.
+ </p><p>
+ I can already hear people complaining now about the concept of
+ extending Flash, so this in no way affects Gnash's ability to play
+ Flash movies when functioning as a browser plugin.
+ Gnash's goal is still to function in a way that is compatible
+ with the current proprietary Flash player.
+ </p><p>
+ But at the same time, we see Flash as the ideal scripting language
+ for a digital multi-media streaming environment. There are many
+ resources for Flash movie creators for widgets, higher level APIs,
+ all sorts of desirable things. But for those of use committed to
+ using free software tools for Flash, our options are very
+ limited.
+ </p><p>
+ Rather than launching a multi-year project to duplicate all
+ classes in the commercial Flash IDE, it's much more efficient to
+ use existing development libraries much like Python or Perl
+ do. The extension mechanism in Gnash allows wrappers to be created
+ for any C or C++ development library. Unlike the proprietary Flash
+ IDE, which compiles all the extension libraries into byte codes
+ from ActionScript, the support is moved to the player side. Movies
+ with all of the goodies of the proprietary IDE in them play in
+ Gnash just fine, as it's all just byte codes by then.
+ </p><p>
+ This trick works because until Flash player version 9, all the
+ ActionScript class names and methods are passed as ASCII strings
+ into the Flash movie. So the Gnash Virtual Machine just loads the
+ extension file if that class name is invoked in the movie. All
+ extension files specify the class name and methods it implements
+ in an identical style as adding any new ActionScript class. The
+ advantage is the class itself is compiled code, and runs much
+ faster than the equivalent byte codes which all have to be
+ interpreted..
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a name="newext"></a>Creating A New
Extension</h2></div></div></div><p>
+ Each new extension should live in it's own directory. The
+ extensions included in Gnash are all in the
+ <span class="emphasis"><em>gnash/extensions</em></span> directory.
Creating an extension
+ requires a Makefile.am,
+ </p><p>
+ If you are adding this extension to the Gnash source tree
+ itself, then you need to make two changes to add the new
+ extension.
+ </p><p>
+ The first change is to add the directory to the list in
+ extensions/Makefile.am. This can be done either by adding the
+ new directory to the SUBDIRS setting, or by wrapping it in a
+ conditional test.
+ </p><p>
+ The other change is to add it to the AC_OUTPUT list in
+ <span class="emphasis"><em>configure.ac</em></span> so the new directory
will be
+ configured along with the rest of Gnash.
+ </p><p>
+ Each extension should have an ActionScript source file included
+ that tests the new class, and this file should be referenced in
+ the new Makefile.am in the <span
class="emphasis"><em>check_PROGRAMS</em></span>
+ variable so that "make check" works.
+ </p><p>
+ When creating an extension that is a wrapper for an existing
+ development library API, it's often better to make this a thin
+ layer, than to get carried away with creating beautiful
+ abstractions. Higher-level classes that offer a lot of new
+ functionality are fine, but is different than wrapping a library
+ so it can be used from within Gnash.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="craftext"></a>Crafting an
Extension</h3></div></div></div><p>
+ All extensions have the same requirements, namely setting up a
+ few defined function callbacks, which the Gnash VM then uses
+ to do the right thing. The initial two function callbacks are
+ for handling the interface of the newly created object so that
+ Gnash can find and use it.
+ </p><p>
+ The first function is commonly called
+ <span class="emphasis"><em>attachInterface</em></span>, and this sets
the other
+ function callbacks for all the methods this class
+ supports. The method callbacks are attached to the parent
+ class by using <span class="emphasis"><em>init_member()</em></span> to
set a C
+ function pointer to the string value used in the Flash movie.
+ </p><pre class="programlisting">
+ // Attach DummyClass 'func1' and 'func2' methods to the given object
+ static void
+ attachInterface(as_object& obj) {
+ obj.init_member("func1", &ext_func1);
+ obj.init_member("func2", &ext_func2);
+ }
+ </pre><p>
+ The second function is commonly called
+ <span class="emphasis"><em>getInterface()</em></span>, and this returns
a
+ pointer to a static prototype of the class.
+ Gnash uses garbage collection for ActionScript objects
+ so you need to register the static with the VM to give it
+ a chance to be marked as reachable.
+ </p><pre class="programlisting">
+ static as_object*
+ getInterface()
+ {
+ static boost::intrusive_ptr<as_object> o;
+ if (o == NULL) {
+ o = new as_object();
+ VM::get().addStatic(o);
+ attachInterface(*o);
+ }
+ return o.get();
+ }
+ </pre><p>
+ This is the callback that gets executed when constructing a
+ new object for the VM. In this example we'll assume the new
+ ActionScript class is called <span
class="emphasis"><em>DummyExt</em></span>,
+ and has two methods, <span class="emphasis"><em>func1</em></span> and
+ <span class="emphasis"><em>func2</em></span>.
+ </p><pre class="programlisting">
+ static as_value
+ dummyext_ctor(const fn_call& fn)
+ {
+ DummyExt *obj = new DummyExt(); // will setup prototypes
+
+ return as_value(obj);
+ }
+ </pre><p>
+ The trick for the above simple constructor to work is that
+ class appartenence is setup in the C++ DummyExt constructor
+ itself, which should derive from as_object and construct the
+ base passing it the interface (prototype) of it's class.
+ </p><pre class="programlisting">
+ class DummyExt : public as_object
+ {
+ public:
+ DummyExt()
+ :
+ as_object(getInterface()) // returns the static prototype
+ {}
+
+ };
+ </pre><p>
+ Initialize the extension. This is looked for by the extension
+ handling code in each extension, and is executed when the
+ extension is loaded. This is the main entry point into the
+ extension. This function can be found because the prefix of
+ <span class="emphasis"><em>dummyext</em></span>, which also matches the
file
+ name of the extension. Gnash uses the name of the extension
+ file itself when looking for the init function.
+ </p><pre class="programlisting">
+ extern "C" {
+ void
+ dummyext_class_init(as_object &obj)
+ {
+ static builtin_function* cl=NULL;
+ if (!cl)
+ {
+ // Create a builtin function using the given constructor
+ // to instanciate objects and exporting the given interface
+ cl = new builtin_function(&dummyext_ctor,
getInterface());
+ VM::get().addStatic(cl); // will forbid to collect the class
+ }
+
+ obj.init_member("DummyExt", cl);
+ }
+ } // end of extern C
+ </pre><p>
+ The callbacks are all C functions. Like all the other code
+ that implements ActionScript, parameters to the function are
+ passed in using the <span class="emphasis"><em>fn_call</em></span> data
+ structure. The return code, if any, is also returned using
+ this data structure. <span class="emphasis"><em>this_ptr</em></span> is
the
+ object that the method is a member of.
+ </p><pre class="programlisting">
+ // Creates a new button with the label as the text.
+ as_value func1(const fn_call& fn) {
+ // Following line will ensure 'func1' is called for a DummyExt
instance,
+ // or would throw an exception which should behave as if we
returned the
+ // undefined value.
+ boost::intrusive_ptr<DummyExt> ptr =
ensureType<DummyExt>(fn.this_ptr);
+
+ if (fn.nargs > 0) {
+ std::string label = fn.arg(0).to_string();
+ bool ret = ptr->dummy_text_label(label);
+ return as_value(ret);
+ }
+ }
+ </pre></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="debuext"></a>Debugging An Extension</h2></div></div></div><p>
+ As extensions are loaded dynamically at runtime, debugging one
+ can be difficult. You can use GDB, but you have the problem of
+ not being able to set a breakpoint in Gnash until
+ <span class="emphasis"><em>after</em></span> the extension has been
loaded into
+ Gnash's VM. The easy solution is to use the Gnash debugger.
+ </p><p>
+ You can insert these few lines in any file that you wish to
+ manually start the debugger. Once at the console, you can attach
+ GDB to the process. Then you can set breakpoints, etc... and you
+ are at the point of execution where the console was started. To
+ then continue playing the movie, type the <span
class="emphasis"><em>c</em></span>
+ (for continue) command to the Gnash console.
+ </p><pre class="programlisting">
+ // Get the debugger instance
+ static Debugger& debugger = Debugger::getDefaultInstance();
+
+ // Enable the debugger
+ debugger.enabled(true);
+ // Stop and drop into a console
+ debugger.console();
+ </pre><p>
+ You can also resort to the time honored technique of creating a
+ loop before the point you want to set a breakpoint for. Gnash
+ will stop playing the movie at this point, and then you can
+ externally attach GDB to the running process, or type
+ <span class="emphasis"><em>^C</em></span> to drop into the GDB command
console.
+ </p><pre class="programlisting">
+ bool stall = true;
+ while (stall) {
+ sleep 1;
+ }
+ </pre><p>
+ Once you have set the breakpoints you want, reset the value of
+ the <span class="emphasis"><em>stall</em></span> variable to break out
of the
+ loop, and the Flash movie will then continue playing.
+ </p><pre class="programlisting">
+ (gdb) set variable stall = false;
+ continue
+ </pre></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="inclext"></a>Included Extensions</h2></div></div></div><p>
+ Gnash has some extensions included in the distribution. This is
+ mostly because they were written by the Gnash team. Extensions
+ can be external to gnash, Gnash needs no compiled in knowledge
+ to load an extension file.
+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4
class="title"><a name="gtkext"></a>Gtk Extension</h4></div></div></div><p>
+ The GTK ActionScript class follows the same API as Gtk2, even down
+ to the same arguments to the same function names. This means
+ you're actually programming GTK,you're just using ActionScript
+ instead of python, perl, or C. This extension makes it possible to
+ write Flash movies that use the Gtk2 widgets for user interface
+ components.
+ </p><div class="variablelist"><dl><dt><span
class="term">window_new</span></dt><dd><p>
+ Create a new window.
+ </p></dd><dt><span class="term">signal_connect</span></dt><dd><p>
+ Add an event handler to a widget.
+ </p></dd><dt><span
class="term">container_set_border_width</span></dt><dd><p>
+ Set the width of the window border.
+ </p></dd><dt><span class="term">button_new_with_label</span></dt><dd><p>
+ Create a new button and give it the specified label.
+ </p></dd><dt><span
class="term">signal_connect_swapped</span></dt><dd><p>
+ Swap signals. Commonly used for <span
class="emphasis"><em>delete</em></span> event handling.
+ </p></dd><dt><span class="term">container_add</span></dt><dd><p>
+ Add one widget to another as a child.
+ </p></dd><dt><span class="term">widget_show</span></dt><dd><p>
+ Display the widget on the screen.
+ </p></dd><dt><span class="term">main</span></dt><dd><p>
+ Start the main GTK event loop. This function does not return.
+ </p></dd></dl></div></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a name="fileioext"></a>File I/O
Extension</h4></div></div></div><p>
+ Flash movies are traditionally forbidden from accessing the
+ filesystem, but this may be necessary for some embedded
+ applications. Especially in the case of a user console, currently
+ there is no way to get input into a Flash movie but through a
+ TextField.
+ </p><div class="variablelist"><dl><dt><span
class="term">fopen</span></dt><dd><p>
+ Open the file.
+ </p></dd><dt><span class="term">fread</span></dt><dd><p>
+ Read a series of bytes from the opened file.
+ </p></dd><dt><span class="term">fgetc</span></dt><dd><p>
+ Read a single byte from the opened file.
+ </p></dd><dt><span class="term">fgets</span></dt><dd><p>
+ Read a single line until a Carriage Return from the opened file.
+ </p></dd><dt><span class="term">gets</span></dt><dd><p>
+ Read a single line from the standard in.
+ </p></dd><dt><span class="term">getchar</span></dt><dd><p>
+ Read a single character from the standard in.
+ </p></dd><dt><span class="term">fwrite</span></dt><dd><p>
+ </p></dd><dt><span class="term">fputc</span></dt><dd><p>
+ Write a single character to the opened file.
+ </p></dd><dt><span class="term">fputs</span></dt><dd><p>
+ Write a single line to the opened file.
+ </p></dd><dt><span class="term">puts</span></dt><dd><p>
+ Write a single line to standard out..
+ </p></dd><dt><span class="term">putchar</span></dt><dd><p>
+ Write a single character to standard out..
+ </p></dd><dt><span class="term">fflush</span></dt><dd><p>
+ Flush the current opened file to disk.
+ </p></dd><dt><span class="term">fseek</span></dt><dd><p>
+ Seek to a location within the opened file.
+ </p></dd><dt><span class="term">ftell</span></dt><dd><p>
+ Report the current position within the opened file.
+ </p></dd><dt><span class="term">fclose</span></dt><dd><p>
+ Close the opened file.
+ </p></dd></dl></div></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a name="mysqlext"></a>MySQL
Extension</h4></div></div></div><p>
+ The MySQL ActionScript class follows the same API as MySQL, even down
+ to the same arguments to the same function names. This enables a
+ Flash movie to have direct access to a MySQL
+ database. Traditionally Flash movies have had no database
+ support, they either had to use arrays, or use XML to communicate
+ to an application specific external database daemon.
+ </p><div class="variablelist"><dl><dt><span
class="term">connect</span></dt><dd><p>
+ Connect to a MySQL database.
+ </p></dd><dt><span class="term">qetData</span></dt><dd><p>
+ Get data from the database.
+ </p></dd><dt><span class="term">disconnect</span></dt><dd><p>
+ Disconnect from a MySQL database.
+ </p></dd><dt><span class="term">query</span></dt><dd><p>
+ Execute an SQL query to the database.
+ </p></dd><dt><span class="term">fetch_row</span></dt><dd><p>
+ Fetch a row from the query results.
+ </p></dd><dt><span class="term">num_fields</span></dt><dd><p>
+ </p></dd><dt><span class="term">free_result</span></dt><dd><p>
+ Free the results of a query.
+ </p></dd><dt><span class="term">store_results</span></dt><dd><p>
+ Store the results of a query.
+ </p></dd></dl></div></div></div></div><div class="chapter"
lang="en"><div class="titlepage"><div><div><h2 class="title"><a
name="rtmp"></a>Chapter 7. RTMP Protocol</h2></div></div></div><div
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a
href="#amf">AMF Format</a></span></dt></dl></div><p>
+ This document is based mostly on my own reverse engineering of the
+ RTMP protocol and AMF format. <span
class="emphasis"><em>tcpdump</em></span> and
+ <span class="emphasis"><em>ethereal</em></span> are your friend. Some
additional info that got
+ me started was from the <a class="ulink"
href="http://www.osflash.org/red5" target="_top">Red5</a>
+ project. <span class="emphasis"><em>Red5</em></span> is the only other
open source Flash
+ server. So some details are still vague, but as the implementation
+ appears to work, we'll figure out what they are later.
+ </p><p>
+ The Real Time Messaging Protocol was created by MacroMedia (now
+ Adobe) for delivering Flash objects and video over a network
+ connection. Currently the only servers which support this format
+ are the MacroMedia Media sever, and the Open Source Red5 project.
+ </p><p>
+ This is a simple protocol, optimized for poor bandwidth
+ connections. It can support up to 64 concurrent streams over the
+ same network connection. Part of each AMF packet header contains
+ the index number of the stream. A single RTMP message can contain
+ multiple AMF packets.
+ </p><p>
+ An RTMP connection uses Tcp/ip port 1935. It is also possible to
+ tunnel RTMP over an HTTP connection using port 80. Each AMF packet
+ is 128 bytes long except for streaming audio, which has 64 byte
+ packets.
+ </p><p>
+ The basics of the RTMP protocol are as follows. All communications
+ are initiated by the client.
+ </p><div class="mediaobject" align="center"><img src="images/rtmp.png"
align="middle"></div><p>
+ </p><p>
+ The client starts the RTMP connection by sending a single byte
+ with a value of 0x3. This byte is followed by a data block of 1536
+ bytes. The format if this data block is unknown, but it appears to
+ not be actually used by the protocol except as a handshake.
+ </p><p>
+ The server receives this packet, stores the 1536 byte data block,
+ and then send a single byte with the value of 0x3, followed by two
+ 1536 data blocks. The second data block is the full contents of
+ the original data block as sent by the client.
+ </p><p>
+ The client receives the 1536 byte data block, and if they match,
+ the connection is established. After the handshake process is
+ done, there are three other messages that the client sends to the
+ sever to start the data flowing.
+ </p><p>
+ The first AMF packet sent to the server contains the
+ <span class="emphasis"><em>connect</em></span> packet. This doesn't appear
to do
+ much but notify the server the client is happy with the
+ handshake, and ready to start reading packets.
+ </p><p>
+ The second packet is the <span
class="emphasis"><em>NetConnection</em></span> object from
+ the client. This ActionScript class is used by the Flash movie to
+ create the network connection to the server.
+ </p><p>
+ The third packet is the <span class="emphasis"><em>NetStream</em></span>
object from the
+ client. This is the ActionScript class used to specify the file to
+ be streamed by the server.
+ </p><p>
+ The RTMP packet for our example looks like this:
+
+ </p><pre class="programlisting">
+ 030000190000c91400000000020007connect00?f0000000000000030003app0200#
+ software/gnash/tests/1153948634.flv0008flashVer02000cLNX 6,0,82,0 0006
+ swfUrl02001dfile:///file|%2Ftmp%2Fout.swfc30005tcUrl\002\0004
+ rtmp://localhost/software/gnash/tests/1153948634.flv\000\000\t
+ \002\000\005userx
+ </pre><p>
+
+ We'll take this apart in a bit, but you can see how all three AMF
+ packets are in the same message. The message is received in
+ several 128 byte blocks, with the last one being less than
+ that. The total size of the RTMP message is in the header, so the
+ reader can tell if the entire message was read or not.
+ </p><p>
+ The RTMP header is first, followed by the connect message as an
+ ASCII string as the message body. The following AMF packet is the
+ <span class="emphasis"><em>NetConnection</em></span> one, which specifies
that this is coming
+ from a Flash application. This also contains the file path the server
+ can use to find the file to stream. This is then followed by the
+ version number, which I assume is the version of the Flash player,
+ so the server knows what it is talking to.
+ </p><p>
+ The third packet is the one from <span
class="emphasis"><em>NetStream</em></span>, which
+ specifies the URL used for the movie, followed by the user name
+ for a semblance of security.
+ </p><p>
+ For the next level of detail, we'll explain the format of AMF. AMF
+ is used by the RTMP protocol to transfer data. Each Flash object
+ is encapsulated in an AMF packet, including streaming audio or
+ video.
+ </p><p>
+ The first byte of the RTMP header determines two things about the
+ rest of the message. The first 2 bits of this byte signify the
+ total size of the RTMP header. The RTMP header is of a variable
+ size, so this is important.
+
+ </p><div class="variablelist"><dl><dt><span
class="term">00</span></dt><dd><p>
+ This specifies the header contains 12 bytes, including
+ this one.
+ </p></dd><dt><span class="term">01</span></dt><dd><p>
+ This specifies the header contains 8 bytes, including this
+ one.
+ </p></dd><dt><span class="term">02</span></dt><dd><p>
+ This specifies the header contains 4 bytes, including this
+ one.
+ </p></dd><dt><span class="term">03</span></dt><dd><p>
+ This specifies the header contains 1 byte, so this is the
+ complete header.
+ </p></dd></dl></div><p>
+ </p><p>
+ The other 6 bits in this byte represent the AMF index. As a single
+ RTMP connection can support multiple data streams, this signifies
+ which stream this packet is for. Once an AMF object is fully
+ received by the client, the AMF index may be reused.
+ </p><p>
+ For messages with headers of at least 4 bytes, the next 3 bytes are
+ used by audio and video data packets, but at this time the meaning
+ of this field is unknown.
+ </p><p>
+ For messages with a 8 byte or larger header, the next 3 bytes
+ determine the size of the RTMP message being transmitted. Messages
+ with a 1 byte or 4 byte header use a standard size, 128 bytes for
+ video, and 64 bytes for audio.
+ </p><p>
+ For messages with an 8 byte or larger header, the next byte is the
+ type of the AMF object.
+
+ </p><div class="variablelist"><dl><dt><span
class="term">0x3</span></dt><dd><p>
+ This specifies the content type of the RTMP packet is the
+ number of bytes read. This is used to start the RTMP
+ connection.
+ </p></dd><dt><span class="term">0x4</span></dt><dd><p>
+ This specifies the content type of the RTMP message is a
+ <span class="emphasis"><em>ping</em></span> packet.
+ </p></dd><dt><span class="term">0x5</span></dt><dd><p>
+ This specifies the content type of the RTMP message is
+ server response of some type.
+ </p></dd><dt><span class="term">0x6</span></dt><dd><p>
+ This specifies the content type of the RTMP packet is
+ client request of some type.
+ </p></dd><dt><span class="term">0x8</span></dt><dd><p>
+ This specifies the content type of the RTMP packet is an
+ audio message.
+ </p></dd><dt><span class="term">0x9</span></dt><dd><p>
+ This specifies the content type of the RTMP message is a
+ video packet.
+ </p></dd><dt><span class="term">0x12</span></dt><dd><p>
+ This specifies the content type of the RTMP message is
+ notify.
+ </p></dd><dt><span class="term">0x13</span></dt><dd><p>
+ This specifies the content type of the RTMP message is
+ shared object.
+ </p></dd><dt><span class="term">0x14</span></dt><dd><p>
+ This specifies the content type of the RTMP message is
+ remote procedure call. This invokes the method of a Flash
+ class remotely.
+ </p></dd></dl></div><p>
+
+ </p><p>
+ There are two sets of data types to consider. One set is used by
+ the to specify the content type of the AMF object, the other is an
+ ActionScript data type tag used to denote which type of object is
+ being transferred.
+ </p><p>
+ The values of the initial type byte are:
+ </p><div class="variablelist"><dl><dt><span
class="term">0x0</span></dt><dd><p>
+ This specifies the data in the AMF packet is a numeric
+ value. All numeric values in Flash are 64 bit,
+ <span class="emphasis"><em>big-endian</em></span>.
+ </p></dd><dt><span class="term">0x1</span></dt><dd><p>
+ This specifies the data in the AMF packet is a boolean
+ value.
+ </p></dd><dt><span class="term">0x2</span></dt><dd><p>
+ This specifies the data in the AMF packet is an
+ <span class="emphasis"><em>ASCII</em></span> string.
+ </p></dd><dt><span class="term">0x3</span></dt><dd><p>
+ This specifies the data in the AMF packet is a Flash
+ object. The Flash object data type field further along in
+ the message specifies which type of ActionScript object it
+ is.
+ </p></dd><dt><span class="term">0x4</span></dt><dd><p>
+ This specifies the data in the AMF packet is a Flash
+ movie, ie. another Flash movie.
+ </p></dd><dt><span class="term">0x5</span></dt><dd><p>
+ This specifies the data in the AMF packet is a NULL
+ value. NULL is often used as the return code from calling
+ Flash functions.
+ </p></dd><dt><span class="term">0x6</span></dt><dd><p>
+ This specifies the data in the AMF packet is a
+ undefined. This is also used as the return code from
+ calling Flash functions.
+ </p></dd><dt><span class="term">0x7</span></dt><dd><p>
+ This specifies the data in the AMF packet is a reference.
+ </p></dd><dt><span class="term">0x8</span></dt><dd><p>
+ This specifies the data in the AMF packet is a ECMA
+ array.
+ </p></dd><dt><span class="term">0x9</span></dt><dd><p>
+ This specifies the data in the AMF packet is the end of an
+ object definition. As an object is transmitted with
+ multiple AMF packets, this lets the server know when the
+ end of the object is reached.
+ </p></dd><dt><span class="term">0xa</span></dt><dd><p>
+ This specifies the data in the AMF packet is a Strict
+ array.
+ </p></dd><dt><span class="term">0xb</span></dt><dd><p>
+ This specifies the data in the AMF packet is a date.
+ </p></dd><dt><span class="term">0xc</span></dt><dd><p>
+ This specifies the data in the AMF packet is a multi-byte
+ string. Multi-byte strings are used for international
+ language support to represent non <span
class="emphasis"><em>ASCII</em></span>
+ fonts.
+ </p></dd><dt><span class="term">0xd</span></dt><dd><p>
+ This specifies the data in the AMF packet is a an
+ unsupported feature.
+ </p></dd><dt><span class="term">0xe</span></dt><dd><p>
+ This specifies the data in the AMF packet is a record
+ set.
+ </p></dd><dt><span class="term">0xf</span></dt><dd><p>
+ This specifies the data in the AMF packet is a AML
+ object. XML objects are then parsed by the
+ <span class="emphasis"><em>XML</em></span> ActionScript class.
+ </p></dd><dt><span class="term">0x10</span></dt><dd><p>
+ This specifies the data in the AMF packet is a typed object.
+ </p></dd></dl></div><p>
+
+ </p><p>
+ For messages with a 12 byte header, the last 4 bytes are the
+ routing of the message. If the destination is the server, this
+ value is the NetStream object source. If the destination is the
+ client, this is the NetStream object for this RTMP message. A
+ value of 0x00000000 appears to be reserved for the NetConnection
+ object.
+ </p><p>
+ Multiple AMF streams can be contained in a single RTMP messages,
+ so it's important to check the index of each AMF packet.
+ </p><p>
+ An example RTMP header might look like this. (spaces added between
+ fields for clarity) All the numbers are in hex.
+
+ </p><pre class="screen">
+ 03 000019 0000c9 14 000000000
+ </pre><p>
+
+ </p><div class="variablelist"><dl><dt><span
class="term">03</span></dt><dd><p>
+ The first two bits of this byte are the size of the
+ header, which in this example is 00, for a 12 byte
+ header. The next 6 bits is the AMF stream index number,
+ which in this example is 0x3.
+ </p></dd><dt><span class="term">000019</span></dt><dd><p>
+ These 3 bytes currently have an unknown purpose.
+ </p></dd><dt><span class="term">000c9</span></dt><dd><p>
+ Since this example has a 12 byte header, this is the size
+ of the RTMP message, in this case 201 bytes.
+ </p></dd><dt><span class="term">14</span></dt><dd><p>
+ This is the content type of the RTMP message, which in
+ this case is to invoke a remote function call. (which we
+ later see is the connect function).
+ </p></dd><dt><span class="term">00000000</span></dt><dd><p>
+ The source is the NetConnection object used to start this
+ connection.
+ </p></dd></dl></div><p>
+
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a name="amf"></a>AMF
Format</h2></div></div></div><p>
+ The AMF format is used in the LocalConnection, SharedObject,
+ NetConnection, and NetStream ActionScript classes. This is a means
+ of binary data interchange between Flash movies, or between a
+ Flash player and a Flash server.
+ </p><p>
+ Like the RTMP messages, an AMF packet header can be of a variable
+ size. The size is either the same as the initial header of the
+ RTMP message, or a 1 byte header, which is commonly used for
+ streaming audio or video data.
+ </p><p>
+ The body of an AMF packet may look something like this
+ example. The spaces have been added for clarity.
+
+ </p><pre class="screen">
+ 02 0007 636f6e6e656374
+ </pre><p>
+
+ </p><div class="variablelist"><dl><dt><span
class="term">02</span></dt><dd><p>
+ This is a single byte header. The value of the first 2
+ bits is 0x3, and the AMF index is also 0x3.
+ </p></dd><dt><span class="term">0007</span></dt><dd><p>
+ This is the length in bytes of the string.
+ </p></dd><dt><span class="term">63 6f 6e 6e 65 63
74</span></dt><dd><p>
+ This is the string. Note that there is no null terminator
+ since the length is specified.
+ </p></dd></dl></div><p>
+
+ </p></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="nsapi"></a>Chapter 8.
Mozilla/Firefox NPAPI Plugin</h2></div></div></div><div class="toc"><p><b>Table
of Contents</b></p><dl><dt><span class="sect1"><a href="#plugincapi">Plugin C
API</a></span></dt><dt><span class="sect1"><a href="#plugincppapi">Plugin C++
API</a></span></dt><dt><span class="sect1"><a href="#glthread">OpenGL and
Threads</a></span></dt><dt><span class="sect1"><a href="#eventhandle">Plugin
Event Handling</a></span></dt></dl></div><p>
+ The Mozilla SDK has two API layers for plugins. The older layer is
+ documented in the <a class="ulink"
href="http://www.gnu.org/software/gnash/manual/plugin.pdf" target="_top">
+ Geeko Plugin API Reference</a>, and the newer layer doesn't
+ appear to be documented. The new API is simpler, and is portable
+ across multiple versions of Mozilla or Firefox. The new API is
+ just a layer on top of the older one, so this manual still
+ applies.
+ </p><p>
+ Most of the programming of a plugin is filling in real emphasis for
+ the standard API functions and methods. Firefox uses these to
+ create the plugin, and to send it data.
+ </p><p>
+ When initializing or destroying a plugin, no matter how many
+ instances are being used, the C API is used. These functions are
+ typically called once for each plugin that is loaded.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a name="plugincapi"></a>Plugin C
API</h2></div></div></div><p>
+ The lower layer is a C based API which is used by Firefox to
+ initialize and destroy a plugin. This is so a plugin can be
+ portable across multiple systems, since C++ emphasis is not portable
+ between most C++ compilers. This is where most of the behind the
+ scenes work is done in a plugin. For Gnash, the sources this
+ lower layer are in <span
class="emphasis"><em>plugin/mozilla-sdk</em></span>. They were
+ added to the Gnash source tree so it wouldn't be necessary to
+ have the Mozilla development packages installed to compile the
+ Gnash plugin.
+ </p><p>
+ This is also the older API used for plugins, so is usually the
+ one used if you dig around for plugin examples on the web. These
+ are the main functions which have to be implemented in a plugin
+ for it to be recognized by the browser, and to be initialized
+ and destroyed.
+ </p><div class="variablelist"><dl><dt><span
class="term">NS_PluginInitialize</span></dt><dd><p>
+ This C function gets called once when the plugin is
+ loaded, regardless of how many instantiations there are
+ actually playing movies. So this is where all the one
+ time only initialization stuff goes that is shared by all
+ the threads.
+ </p></dd><dt><span
class="term">NS_NewPluginInstance</span></dt><dd><p>
+ This instantiates a new object for the browser. Returning
+ a pointer to the C++ plugin object is what ties the C++
+ and C emphasis parts of the API together.
+ </p></dd><dt><span
class="term">NS_DestroyPluginInstance</span></dt><dd><p>
+ This destroys our instantiated object when the browser is
+ done.
+ </p></dd><dt><span class="term">NS_PluginShutdown</span></dt><dd><p>
+ This is called when a plugin is shut down, so this is
+ where all the one time only shutdown stuff goes.
+ </p></dd><dt><span
class="term">NPP_GetMIMEDescription</span></dt><dd><p>
+ This is called to get the MIME types the plugin supports.
+ </p></dd><dt><span class="term">NS_PluginGetValue</span></dt><dd><p>
+ This is used by Firefox to query information from the
+ plugin, like the supported MIME type, the version number,
+ and a description.
+ </p></dd></dl></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="plugincppapi"></a>Plugin C++ API</h2></div></div></div><p>
+ The higher level layer is the one we are most concerned
+ with. This is an instantiation of the
+ <span class="emphasis"><em>nsPluginInstanceBase</em></span> class, as
defined by the
+ Mozilla SDK, for our plugin. With this API, a plugin is mostly
+ defining the standard entry points for Firefox, and the emphasis
+ that implements the glue between the Firefox and our plugin.
+ </p><p>
+ These are called for each instantiation of plugin. If there are
+ three Flash movies on a web page, then three instances are
+ created. Unfortunately for plugin programmers, these functions
+ may randomly be called more than once, so it's good to use
+ initialization flags for things that should only be done one per
+ thread. For instance, <span
class="emphasis"><em>nsPluginInstance::init()</em></span> and
+ <span class="emphasis"><em>nsPluginInstance::SetWindow()</em></span> are
called more than
+ once, so the plugin must protect against actions that could be
+ destructive.
+ </p><div class="variablelist"><dl><dt><span
class="term">nsPluginInstance::nsPluginInstance</span></dt><dd><p>
+ Create a new plugin object.
+ </p></dd><dt><span
class="term">nsPluginInstance::init</span></dt><dd><p>
+ This methods initializes the plugin object, and is
+ called for every movie which gets played. This is where
+ the thread-specific information goes.
+ </p></dd><dt><span
class="term">nsPluginInstance::SetWindow</span></dt><dd><p>
+ This sets up the window the plugin is supposed to render
+ into. This calls passes in various information used by
+ the plugin to setup the window. This may get called
+ multiple times by each instantiated object, so it can't
+ do much but window specific setup here. This is where the
+ main emphasis is that sets up the window for the plugin.
+ </p></dd><dt><span
class="term">nsPluginInstance::NewStream</span></dt><dd><p>
+ Opens a new incoming data stream, which is the flash
+ movie we want to play. A URL can be pretty ugly, like in
+ this example:
+
http://www.sickwave.com/swf/navbar/navbar_sw.swf?atfilms=http%3a//www.atm.com/af/home/&shickwave=http%3a//www.sickwave.com&gblst=http%3a//gbst.sickwave.com/gb/gbHome.jsp&known=0
../flash/gui.swf?ip_addr=foobar.com&ip_port=3660&show_cursor=true&path_prefix=../flash/&trapallkeys=true"
+ So this is where we parse the URL to get all the options
+ passed in when invoking the plugin.
+ </p></dd><dt><span
class="term">nsPluginInstance::Write</span></dt><dd><p>
+ Read the data stream from Mozilla/Firefox. For now we
+ read the bytes and write them to a disk file.
+ </p></dd><dt><span
class="term">nsPluginInstance::WriteReady</span></dt><dd><p>
+ Return how many bytes we can read into the buffer.
+ </p></dd><dt><span
class="term">nsPluginInstance::DestroyStream</span></dt><dd><p>
+ Destroy the data stream we've been reading. For Gnash,
+ when the stream is destroyed means we've grabbed the
+ entire movie. So we signal the thread to start reading and
+ playing the movie.
+ </p></dd><dt><span
class="term">nsPluginInstance::shut</span></dt><dd><p>
+ This is where the movie playing specific shutdown emphasis goes.
+ </p></dd><dt><span
class="term">nsPluginInstance::~nsPluginInstance</span></dt><dd><p>
+ This destroys our plugin object.
+ </p></dd><dt><span
class="term">NS_PluginInitialize::initGL</span></dt><dd><p>
+ This is a Gnash internal function that sets up OpenGL.
+ </p></dd><dt><span
class="term">NS_PluginInitialize::destroyContext</span></dt><dd><p>
+ This is a Gnash internal function that destroys a GLX
+ context.
+ </p></dd><dt><span
class="term">nsPluginInstance::getVersion</span></dt><dd><p>
+ This returns the version of Mozilla this plugin supports.
+ </p></dd><dt><span
class="term">nsPluginInstance::GetValue</span></dt><dd><p>
+ This returns information to the browser about the plugin's
+ name and description.
+ </p></dd><dt><span
class="term">nsPluginInstance::URLNotify</span></dt><dd><p>
+ </p></dd></dl></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="glthread"></a>OpenGL and Threads</h2></div></div></div><p>
+ Neither OpenGL nor X11 has any built-in support for threads. Most
+ actions aren't even atomic, so care has to be made to not corrupt
+ any internal data. While it is difficult to render OpenGL from
+ multiple threads, it can be done with the proper locking. The
+ downside is the locking adds a performance hit, since all the
+ threads will have to have the access synchronized by using
+ mutexes.
+ </p><p>
+ The X11 context is maintained one per instantiation of the
+ plugin. It is necessary to lock access to the X11 context when
+ using threads by using <span
class="emphasis"><em>XLockDisplay()</em></span> and
+ <span class="emphasis"><em>XUnlockDisplay()</em></span>. A connection to
the X11
+ server is opened for every instantiation of the plugin using
+ <span class="emphasis"><em>XOpenDisplay()</em></span>.
+ </p><p>
+ The <span class="emphasis"><em>GLX Context</em></span> is maintained one
per
+ instantiation of the plugin for a web page. If there are more
+ than one Flash movie, there is more than one GLX Context. A GLX
+ context can be created by using <span
class="emphasis"><em>glXCreateContext()</em></span>,
+ and then later destroyed by using <span
class="emphasis"><em>glXDestroyContext()</em></span>.
+ When swapping threads, the context is changed using
+ <span class="emphasis"><em>glXMakeCurrent()</em></span>.
+ </p><p>
+ All the emphasis that directly accesses a GLX context or the X11
+ display must be wrapped with a mutex.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="eventhandle"></a>Plugin Event Handling</h2></div></div></div><p>
+ Firefox on most UNIX systems is a GTK+ application, so it is
+ possible to have the plugin hook into the X11 event handling via
+ GLX or GTK. Since Firefox uses GTK, so does Gnash. This also
+ allows the addition of a right-click mouse menu for controlling
+ the player. The GTK build of Gnash offers the best browsing
+ experience as it's more functional than the SDL version.
+ </p><p>
+ It is also possible to disable the <span
class="emphasis"><em>GTK</em></span> support so
+ only the older <span class="emphasis"><em>SDL</em></span> support is
used. In this case
+ Gnash can't support event handling within the browser. This
+ means that when using the SDL of the plugin, mouse clicks and
+ keys pressed get ignored. Windows also can't be resized, and
+ sometimes they overrun their boundaries as well. To disable the
+ GTK support and force SDL to be used anyway, configure with
+ <span class="emphasis"><em>--disable-glext</em></span>
+ </p><p>
+
+ </p></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="appendix"></a>Appendix</h2></div></div></div><div class="sect2"
lang="en"><div class="titlepage"><div><div><h3 class="title"><a
name="codestyle"></a>Code Style</h3></div></div></div><p>
+ I know any discussion of coding styles leads to strong opinions,
+ so I'll state simply I follow the <a class="ulink"
href="http://www.gnu.org/prep/standards/standards.html" target="_top">GNU
+ Coding Standards</a>. Where there is some flexibility as to
+ the location of braces, I prefer mine on the end of a line when
+ using an <span class="emphasis"><em>if</em></span>, <span
class="emphasis"><em>while</em></span>, or <span
class="emphasis"><em>do</em></span>
+ statement. I find this more compact style easier to read and
+ parse by eye. I'm also a big fan of always using
+ braces around <span class="emphasis"><em>if</em></span> statements, even
if they're one
+ liners.
+ </p><p>
+ Here's my tweaked style settings for <span
class="emphasis"><em>Emacs</em></span>, the one
+ true editor to rule them all.
+
+ </p><pre class="programlisting">
+ (defconst my-style
+ '((c-tab-always-indent . t)
+ (c-auto-newline . t)
+ (c-hanging-braces-alist . (
+ (brace-list-intro)
+ (namespace-open)
+ (inline-open)
+ (block-open)
+ (brace-list-open)
+ (brace-list-close)
+ (brace-entry-open)
+ (brace-else-brace)
+ (brace-elseif-brace)
+ (class-open after)
+ (class-close)
+ (defun-open after)
+ (defun-close)
+ (extern-lang-open)
+ (inexpr-class-open)
+ (statement-open)
+ (substatement-open)
+ (inexpr-class-close)))
+ (c-hanging-colons-alist . ((member-init-intro before)
+ (inher-intro)
+ (case-label after)
+ (label after)
+ (access-label after)))
+ (c-offsets-alist . (
+ (innamespace . 0)
+ (case-label . 2)
+ ))
+ (c-cleanup-list . (
+ (scope-operator)
+ (empty-defun-braces)
+ (brace-else-brace)
+ (brace-elseif-brace)
+ (defun-close-semi)
+ (list-close-comma)
+ )
+ )
+ ;; no automatic newlines after ';' if following line non-blank or inside
+ ;; one-line inline methods
+ (add-to-list 'c-hanging-semi&comma-criteria
+ 'c-semi&comma-no-newlines-before-nonblanks)
+ (add-to-list 'c-hanging-semi&comma-criteria
+ 'c-semi&comma-no-newlines-for-oneline-inliners)
+; (knr-argdecl-intro . -)
+ (c-echo-syntactic-information-p . t)
+ )
+ "My GNU Programming Style")
+ </pre><p>
+
+ </p><p>
+ Another coding consideration: comments are good! Over
+ commenting isn't good. Here is an over commented example:
+
+ </p><pre class="programlisting">
+ counter++; // increment counter
+ </pre><p>
+
+ Gnash also uses <a class="ulink" href="http://www.doxygen.org"
target="_top">Doxygen</a> style
+ comments. These are processed by Doxygen when building a cross
+ reference of all the classes, and is a good way to help push
+ internals documentation from the depths of the code into
+ documentation where it can be seen by others.
+ </p><p>
+ <span class="emphasis"><em>Doxygen</em></span> style comments for <span
class="emphasis"><em>C++</em></span> code involves
+ simply using three slashes <span class="emphasis"><em>///</em></span>
instead of the
+ standard two slashes <span class="emphasis"><em>//</em></span> used for
C++
+ comments. Here's a short comment block for the
+ <span class="emphasis"><em>XML::cloneNode()</em></span> method:
+
+ </p><pre class="programlisting">
+ /// \brief copy a node
+ ///
+ /// Method; constructs and returns a new XML node of the same type,
+ /// name, value, and attributes as the specified XML object. If deep
+ /// is set to true, all child nodes are recursively cloned, resulting
+ /// in an exact copy of the original object's document tree.
+ XMLNode &
+ XML::cloneNode(XMLNode &newnode, bool deep) {
+ ...
+ }
+ </pre><p>
+ </p><p>
+ The <span class="emphasis"><em>\brief</em></span> keyword means that the
+ text becomes associated
+ when listing all the classes on the generated web pages. The
+ text after the blank link becomes the detailed description which
+ appears on the generated web page for that class and method.
+ </p></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="authors"></a>Chapter 9.
Authors</h2></div></div></div><p>
+ <span class="application">Gnash</span> is maintained by Rob Savoye.
Other active developers
+ are: Sandro Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad
+ Musick, Benjamin Wolsey, and Zou Lunkai. Please send all
+ comments and suggestions to <code class="email"><<a class="email"
href="mailto:address@hidden">address@hidden
+ </a>></code>. Past and sometimes current developers are Tomas
+ Groth and Markus Gothe.
+ </p><p>
+ <span class="application">Gnash</span> was initially derived from
<span class="application">GameSWF</span>.
+ <span class="application">GameSWF</span> is maintained by
+ Thatcher Ulrich <code class="email"><<a class="email"
href="mailto:address@hidden">address@hidden</a>></code>. The following
+ people contributed to <span class="application">GameSWF</span>:
+ Mike Shaver, Thierry Berger-Perrin,
+ Ignacio Castaño, Willem Kokke, Vitaly Alexeev, Alexander Streit,
+ and Rob Savoye.
+ </p></div><div class="appendix" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="fdl"></a>Appendix A. GNU
Free Documentation License</h2></div><div><p class="releaseinfo">
+ Version 1.1, March 2000
+ </p></div><div><p class="copyright">Copyright © 2000 Free Software
Foundation, Inc.</p></div><div><div class="legalnotice"><a
name="fdl-legalnotice"></a><p>
+ </p><div class="address"><p>Free Software Foundation, Inc. <span
class="street">59 Temple Place, <br>
+ Suite 330</span>, <span class="city">Boston</span>, <span
class="state">MA</span> <br>
+ <span class="postcode">02111-1307</span> <span
class="country">USA</span></p></div><p>
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ </p></div></div></div></div><div class="toc"><p><b>Table of
Contents</b></p><dl><dt><span class="sect1"><a href="#fdl-preamble">0.
PREAMBLE</a></span></dt><dt><span class="sect1"><a href="#fdl-section1">1.
APPLICABILITY AND DEFINITIONS</a></span></dt><dt><span class="sect1"><a
href="#fdl-section2">2. VERBATIM COPYING</a></span></dt><dt><span
class="sect1"><a href="#fdl-section3">3. COPYING IN
QUANTITY</a></span></dt><dt><span class="sect1"><a href="#fdl-section4">4.
MODIFICATIONS</a></span></dt><dt><span class="sect1"><a href="#fdl-section5">5.
COMBINING DOCUMENTS</a></span></dt><dt><span class="sect1"><a
href="#fdl-section6">6. COLLECTIONS OF DOCUMENTS</a></span></dt><dt><span
class="sect1"><a href="#fdl-section7">7. AGGREGATION WITH INDEPENDENT
WORKS</a></span></dt><dt><span class="sect1"><a href="#fdl-section8">8.
TRANSLATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section9">9.
TERMINATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section10">10.
FUTURE REVISIONS OF THIS LICENSE</a></span></dt><dt><span class="sect1"><a
href="#fdl-using">Addendum</a></span></dt></dl></div><div class="sect1"
lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear:
both"><a name="fdl-preamble"></a>0. PREAMBLE</h2></div></div></div><p>
+ The purpose of this License is to make a manual, textbook, or
+ other written document "free" in the sense of
+ freedom: to assure everyone the effective freedom to copy and
+ redistribute it, with or without modifying it, either
+ commercially or non-commercially. Secondarily, this License
+ preserves for the author and publisher a way to get credit for
+ their work, while not being considered responsible for
+ modifications made by others.
+ </p><p>
+ This License is a kind of "copyleft", which means
+ that derivative works of the document must themselves be free in
+ the same sense. It complements the GNU General Public License,
+ which is a copyleft license designed for free software.
+ </p><p>
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same
+ freedoms that the software does. But this License is not limited
+ to software manuals; it can be used for any textual work,
+ regardless of subject matter or whether it is published as a
+ printed book. We recommend this License principally for works
+ whose purpose is instruction or reference.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section1"></a>1. APPLICABILITY AND
DEFINITIONS</h2></div></div></div><p><a name="fdl-document"></a>
+ This License applies to any manual or other work that contains a
+ notice placed by the copyright holder saying it can be
+ distributed under the terms of this License. The
+ "Document", below, refers to any such manual or
+ work. Any member of the public is a licensee, and is addressed
+ as "you".
+ </p><p><a name="fdl-modified"></a>
+ A "Modified Version" of the Document means any work
+ containing the Document or a portion of it, either copied
+ verbatim, or with modifications and/or translated into another
+ language.
+ </p><p><a name="fdl-secondary"></a>
+ A "Secondary Section" is a named appendix or a
+ front-matter section of the <a class="link"
href="#fdl-document">Document</a> that deals exclusively
+ with the relationship of the publishers or authors of the
+ Document to the Document's overall subject (or to related
+ matters) and contains nothing that could fall directly within
+ that overall subject. (For example, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.) The relationship could be a matter of historical
+ connection with the subject or with related matters, or of
+ legal, commercial, philosophical, ethical or political position
+ regarding them.
+ </p><p><a name="fdl-invariant"></a>
+ The "Invariant Sections" are certain <a class="link"
href="#fdl-secondary"> Secondary Sections</a> whose titles
+ are designated, as being those of Invariant Sections, in the
+ notice that says that the <a class="link"
href="#fdl-document">Document</a> is released under this
+ License.
+ </p><p><a name="fdl-cover-texts"></a>
+ The "Cover Texts" are certain short passages of
+ text that are listed, as Front-Cover Texts or Back-Cover Texts,
+ in the notice that says that the <a class="link"
href="#fdl-document">Document</a> is released under this
+ License.
+ </p><p><a name="fdl-transparent"></a>
+ A "Transparent" copy of the <a class="link" href="#fdl-document">
Document</a> means a machine-readable
+ copy, represented in a format whose specification is available
+ to the general public, whose contents can be viewed and edited
+ directly and straightforwardly with generic text editors or (for
+ images composed of pixels) generic paint programs or (for
+ drawings) some widely available drawing editor, and that is
+ suitable for input to text formatters or for automatic
+ translation to a variety of formats suitable for input to text
+ formatters. A copy made in an otherwise Transparent file format
+ whose markup has been designed to thwart or discourage
+ subsequent modification by readers is not Transparent. A copy
+ that is not "Transparent" is called "Opaque".
+ </p><p>
+ Examples of suitable formats for Transparent copies include
+ plain ASCII without markup, Texinfo input format, LaTeX input
+ format, SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML designed for human
+ modification. Opaque formats include PostScript, PDF,
+ proprietary formats that can be read and edited only by
+ proprietary word processors, SGML or XML for which the DTD
+ and/or processing tools are not generally available, and the
+ machine-generated HTML produced by some word processors for
+ output purposes only.
+ </p><p><a name="fdl-title-page"></a>
+ The "Title Page" means, for a printed book, the
+ title page itself, plus such following pages as are needed to
+ hold, legibly, the material this License requires to appear in
+ the title page. For works in formats which do not have any title
+ page as such, "Title Page" means the text near the
+ most prominent appearance of the work's title, preceding the
+ beginning of the body of the text.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section2"></a>2. VERBATIM COPYING</h2></div></div></div><p>
+ You may copy and distribute the <a class="link"
href="#fdl-document">Document</a> in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that
+ you add no other conditions whatsoever to those of this
+ License. You may not use technical measures to obstruct or
+ control the reading or further copying of the copies you make or
+ distribute. However, you may accept compensation in exchange for
+ copies. If you distribute a large enough number of copies you
+ must also follow the conditions in <a class="link" href="#fdl-section3"
title="3. COPYING IN QUANTITY">section 3</a>.
+ </p><p>
+ You may also lend copies, under the same conditions stated
+ above, and you may publicly display copies.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section3"></a>3. COPYING IN QUANTITY</h2></div></div></div><p>
+ If you publish printed copies of the <a class="link"
href="#fdl-document">Document</a> numbering more than 100,
+ and the Document's license notice requires <a class="link"
href="#fdl-cover-texts">Cover Texts</a>, you must enclose
+ the copies in covers that carry, clearly and legibly, all these
+ Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also
+ clearly and legibly identify you as the publisher of these
+ copies. The front cover must present the full title with all
+ words of the title equally prominent and visible. You may add
+ other material on the covers in addition. Copying with changes
+ limited to the covers, as long as they preserve the title of the
+ <a class="link" href="#fdl-document">Document</a> and satisfy these
+ conditions, can be treated as verbatim copying in other
+ respects.
+ </p><p>
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+ </p><p>
+ If you publish or distribute <a class="link"
href="#fdl-transparent">Opaque</a> copies of the <a class="link"
href="#fdl-document">Document</a> numbering more than 100,
+ you must either include a machine-readable <a class="link"
href="#fdl-transparent">Transparent</a> copy along with
+ each Opaque copy, or state in or with each Opaque copy a
+ publicly-accessible computer-network location containing a
+ complete Transparent copy of the Document, free of added
+ material, which the general network-using public has access to
+ download anonymously at no charge using public-standard network
+ protocols. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly
+ or through your agents or retailers) of that edition to the
+ public.
+ </p><p>
+ It is requested, but not required, that you contact the authors
+ of the <a class="link" href="#fdl-document">Document</a> well before
+ redistributing any large number of copies, to give them a chance
+ to provide you with an updated version of the Document.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section4"></a>4. MODIFICATIONS</h2></div></div></div><p>
+ You may copy and distribute a <a class="link"
href="#fdl-modified">Modified Version</a> of the <a class="link"
href="#fdl-document">Document</a> under the conditions of
+ sections <a class="link" href="#fdl-section2" title="2. VERBATIM
COPYING">2</a> and <a class="link" href="#fdl-section3" title="3. COPYING IN
QUANTITY">3</a> above, provided that you release
+ the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version
+ to whoever possesses a copy of it. In addition, you must do
+ these things in the Modified Version:
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type: circle"><p><b>A. </b>
+ Use in the <a class="link" href="#fdl-title-page">Title
+ Page</a> (and on the covers, if any) a title distinct
+ from that of the <a class="link" href="#fdl-document">Document</a>,
and from those of
+ previous versions (which should, if there were any, be
+ listed in the History section of the Document). You may
+ use the same title as a previous version if the original
+ publisher of that version gives permission.
+ </p></li><li style="list-style-type: circle"><p><b>B. </b>
+ List on the <a class="link" href="#fdl-title-page">Title
+ Page</a>, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the
+ <a class="link" href="#fdl-modified">Modified Version</a>,
+ together with at least five of the principal authors of
+ the <a class="link" href="#fdl-document">Document</a> (all of
+ its principal authors, if it has less than five).
+ </p></li><li style="list-style-type: circle"><p><b>C. </b>
+ State on the <a class="link" href="#fdl-title-page">Title
+ Page</a> the name of the publisher of the <a class="link"
href="#fdl-modified">Modified Version</a>, as the
+ publisher.
+ </p></li><li style="list-style-type: circle"><p><b>D. </b>
+ Preserve all the copyright notices of the <a class="link"
href="#fdl-document">Document</a>.
+ </p></li><li style="list-style-type: circle"><p><b>E. </b>
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ </p></li><li style="list-style-type: circle"><p><b>F. </b>
+ Include, immediately after the copyright notices, a
+ license notice giving the public permission to use the
+ <a class="link" href="#fdl-modified">Modified Version</a> under
+ the terms of this License, in the form shown in the
+ Addendum below.
+ </p></li><li style="list-style-type: circle"><p><b>G. </b>
+ Preserve in that license notice the full lists of <a class="link"
href="#fdl-invariant"> Invariant Sections</a> and
+ required <a class="link" href="#fdl-cover-texts">Cover
+ Texts</a> given in the <a class="link"
href="#fdl-document">Document's</a> license notice.
+ </p></li><li style="list-style-type: circle"><p><b>H. </b>
+ Include an unaltered copy of this License.
+ </p></li><li style="list-style-type: circle"><p><b>I. </b>
+ Preserve the section entitled "History", and
+ its title, and add to it an item stating at least the
+ title, year, new authors, and publisher of the <a class="link"
href="#fdl-modified">Modified Version </a>as given on
+ the <a class="link" href="#fdl-title-page">Title Page</a>. If
+ there is no section entitled "History" in the
+ <a class="link" href="#fdl-document">Document</a>, create one
+ stating the title, year, authors, and publisher of the
+ Document as given on its Title Page, then add an item
+ describing the Modified Version as stated in the previous
+ sentence.
+ </p></li><li style="list-style-type: circle"><p><b>J. </b>
+ Preserve the network location, if any, given in the <a class="link"
href="#fdl-document">Document</a> for public access
+ to a <a class="link" href="#fdl-transparent">Transparent</a>
+ copy of the Document, and likewise the network locations
+ given in the Document for previous versions it was based
+ on. These may be placed in the "History"
+ section. You may omit a network location for a work that
+ was published at least four years before the Document
+ itself, or if the original publisher of the version it
+ refers to gives permission.
+ </p></li><li style="list-style-type: circle"><p><b>K. </b>
+ In any section entitled "Acknowledgements" or
+ "Dedications", preserve the section's title,
+ and preserve in the section all the substance and tone of
+ each of the contributor acknowledgements and/or
+ dedications given therein.
+ </p></li><li style="list-style-type: circle"><p><b>L. </b>
+ Preserve all the <a class="link" href="#fdl-invariant">Invariant
+ Sections</a> of the <a class="link"
href="#fdl-document">Document</a>, unaltered in their
+ text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+ </p></li><li style="list-style-type: circle"><p><b>M. </b>
+ Delete any section entitled
+ "Endorsements". Such a section may not be
+ included in the <a class="link" href="#fdl-modified">Modified
+ Version</a>.
+ </p></li><li style="list-style-type: circle"><p><b>N. </b>
+ Do not retitle any existing section as
+ "Endorsements" or to conflict in title with
+ any <a class="link" href="#fdl-invariant">Invariant
+ Section</a>.
+ </p></li></ul></div><p>
+ If the <a class="link" href="#fdl-modified">Modified Version</a>
+ includes new front-matter sections or appendices that qualify as
+ <a class="link" href="#fdl-secondary">Secondary Sections</a> and
+ contain no material copied from the Document, you may at your
+ option designate some or all of these sections as invariant. To
+ do this, add their titles to the list of <a class="link"
href="#fdl-invariant">Invariant Sections</a> in the
+ Modified Version's license notice. These titles must be
+ distinct from any other section titles.
+ </p><p>
+ You may add a section entitled "Endorsements",
+ provided it contains nothing but endorsements of your <a class="link"
href="#fdl-modified">Modified Version</a> by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+ </p><p>
+ You may add a passage of up to five words as a <a class="link"
href="#fdl-cover-texts">Front-Cover Text</a>, and a passage
+ of up to 25 words as a <a class="link"
href="#fdl-cover-texts">Back-Cover Text</a>, to the end of
+ the list of <a class="link" href="#fdl-cover-texts">Cover Texts</a>
+ in the <a class="link" href="#fdl-modified">Modified Version</a>.
+ Only one passage of Front-Cover Text and one of Back-Cover Text
+ may be added by (or through arrangements made by) any one
+ entity. If the <a class="link" href="#fdl-document">Document</a>
+ already includes a cover text for the same cover, previously
+ added by you or by arrangement made by the same entity you are
+ acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+ </p><p>
+ The author(s) and publisher(s) of the <a class="link"
href="#fdl-document">Document</a> do not by this License
+ give permission to use their names for publicity for or to
+ assert or imply endorsement of any <a class="link"
href="#fdl-modified">Modified Version </a>.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section5"></a>5. COMBINING DOCUMENTS</h2></div></div></div><p>
+ You may combine the <a class="link" href="#fdl-document">Document</a>
+ with other documents released under this License, under the
+ terms defined in <a class="link" href="#fdl-section4" title="4.
MODIFICATIONS">section 4</a>
+ above for modified versions, provided that you include in the
+ combination all of the <a class="link" href="#fdl-invariant">Invariant
+ Sections</a> of all of the original documents, unmodified,
+ and list them all as Invariant Sections of your combined work in
+ its license notice.
+ </p><p>
+ The combined work need only contain one copy of this License,
+ and multiple identical <a class="link" href="#fdl-invariant">Invariant
+ Sections</a> may be replaced with a single copy. If there are
+ multiple Invariant Sections with the same name but different
+ contents, make the title of each such section unique by adding
+ at the end of it, in parentheses, the name of the original
+ author or publisher of that section if known, or else a unique
+ number. Make the same adjustment to the section titles in the
+ list of Invariant Sections in the license notice of the combined
+ work.
+ </p><p>
+ In the combination, you must combine any sections entitled
+ "History" in the various original documents,
+ forming one section entitled "History"; likewise
+ combine any sections entitled "Acknowledgements",
+ and any sections entitled "Dedications". You must
+ delete all sections entitled "Endorsements."
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section6"></a>6. COLLECTIONS OF DOCUMENTS</h2></div></div></div><p>
+ You may make a collection consisting of the <a class="link"
href="#fdl-document">Document</a> and other documents
+ released under this License, and replace the individual copies
+ of this License in the various documents with a single copy that
+ is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+ </p><p>
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you
+ insert a copy of this License into the extracted document, and
+ follow this License in all other respects regarding verbatim
+ copying of that document.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section7"></a>7. AGGREGATION WITH INDEPENDENT
WORKS</h2></div></div></div><p>
+ A compilation of the <a class="link" href="#fdl-document">Document</a>
or its derivatives with
+ other separate and independent documents or works, in or on a
+ volume of a storage or distribution medium, does not as a whole
+ count as a <a class="link" href="#fdl-modified">Modified Version</a>
+ of the Document, provided no compilation copyright is claimed
+ for the compilation. Such a compilation is called an
+ "aggregate", and this License does not apply to the
+ other self-contained works thus compiled with the Document , on
+ account of their being thus compiled, if they are not themselves
+ derivative works of the Document. If the <a class="link"
href="#fdl-cover-texts">Cover Text</a> requirement of <a class="link"
href="#fdl-section3" title="3. COPYING IN QUANTITY">section 3</a> is applicable
to these
+ copies of the Document, then if the Document is less than one
+ quarter of the entire aggregate, the Document's Cover Texts may
+ be placed on covers that surround only the Document within the
+ aggregate. Otherwise they must appear on covers around the whole
+ aggregate.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section8"></a>8. TRANSLATION</h2></div></div></div><p>
+ Translation is considered a kind of modification, so you may
+ distribute translations of the <a class="link"
href="#fdl-document">Document</a> under the terms of <a class="link"
href="#fdl-section4" title="4. MODIFICATIONS">section 4</a>. Replacing <a
class="link" href="#fdl-invariant"> Invariant Sections</a> with
+ translations requires special permission from their copyright
+ holders, but you may include translations of some or all
+ Invariant Sections in addition to the original versions of these
+ Invariant Sections. You may include a translation of this
+ License provided that you also include the original English
+ version of this License. In case of a disagreement between the
+ translation and the original English version of this License,
+ the original English version will prevail.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section9"></a>9. TERMINATION</h2></div></div></div><p>
+ You may not copy, modify, sublicense, or distribute the <a class="link"
href="#fdl-document">Document</a> except as expressly
+ provided for under this License. Any other attempt to copy,
+ modify, sublicense or distribute the Document is void, and will
+ automatically terminate your rights under this License. However,
+ parties who have received copies, or rights, from you under this
+ License will not have their licenses terminated so long as such
+ parties remain in full compliance.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section10"></a>10. FUTURE REVISIONS OF THIS
LICENSE</h2></div></div></div><p>
+ The <a class="ulink" href="http://www.gnu.org/fsf/fsf.html"
target="_top">Free Software
+ Foundation</a> may publish new, revised versions of the GNU
+ Free Documentation License from time to time. Such new versions
+ will be similar in spirit to the present version, but may differ
+ in detail to address new problems or concerns. See <a class="ulink"
href="http://www.gnu.org/copyleft"
target="_top">http://www.gnu.org/copyleft/</a>.
+ </p><p>
+ Each version of the License is given a distinguishing version
+ number. If the <a class="link" href="#fdl-document">Document</a>
+ specifies that a particular numbered version of this License
+ "or any later version" applies to it, you have the
+ option of following the terms and conditions either of that
+ specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by
+ the Free Software Foundation.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-using"></a>Addendum</h2></div></div></div><p>
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and
+ license notices just after the title page:
+ </p><div class="blockquote"><blockquote class="blockquote"><p>
+ Copyright 2008, Free Software Foundation.
+ </p><p>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation
+ License, Version 1.1 or any later version published by the
+ Free Software Foundation; with no<a class="link"
href="#fdl-invariant">Invariant Sections</a>, with no <a class="link"
href="#fdl-cover-texts">Front-Cover Texts</a>,
+ and with no <a class="link" href="#fdl-cover-texts">Back-Cover
+ Texts</a>. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+ </p></blockquote></div><p>
+ If your document contains nontrivial examples of program code,
+ we recommend releasing these examples in parallel under your
+ choice of free software license, such as the <a class="ulink"
href="http://www.gnu.org/copyleft/gpl.html" target="_top"> GNU General Public
+ License</a>, to permit their use in free software.
+ </p></div></div></div></body></html>
Index: doc/C/preformatted/gnash_ref.info.in
===================================================================
RCS file: doc/C/preformatted/gnash_ref.info.in
diff -N doc/C/preformatted/gnash_ref.info.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnash_ref.info.in 3 Mar 2008 23:46:43 -0000
1.2.2.2
@@ -0,0 +1,4685 @@
+START-INFO-DIR-ENTRY
+This is gnash_ref.info, produced by makeinfo version 4.11 from gnash_ref.texi.
+
+* Gnash Reference Manual: (gnash_ref). Gnash
+END-INFO-DIR-ENTRY
+
+
+File: gnash_ref.info, Node: Top, Next: Introduction, Up: (dir)
+
+Gnash Reference Manual
+**********************
+
+* Menu:
+
+* Introduction::
+* Building from Source::
+* Software Internals::
+* Reporting Bugs::
+* Gnash Extensions::
+* RTMP Protocol::
+* Mozilla/Firefox NPAPI Plugin::
+* Appendix::
+* Authors::
+* GNU Free Documentation License::
+
+--- The Detailed Node Listing ---
+
+Introduction
+
+* Audience::
+* What Is Supported?::
+
+Building from Source
+
+* Overview::
+* Getting The Source::
+* Code Dependencies::
+* Testing Dependencies::
+* Documentation Dependencies::
+* Configuring Gnash::
+* Compiling the Code::
+* Creating the Documentation::
+* Running the Tests::
+
+Software Internals
+
+* A Tour of Gnash::
+* Sound handling in Gnash::
+* Testing : Testing.
+* Adding New ActionScript Class::
+
+Reporting Bugs
+
+* Get a Fresh Binary Package::
+* Determine if the bug was previously reported::
+* Review the bug writing guidelines::
+* Filing a bug report::
+
+Gnash Extensions
+
+* Creating A New Extension::
+* Debugging An Extension::
+* Included Extensions::
+
+RTMP Protocol
+
+* AMF Format::
+
+Mozilla/Firefox NPAPI Plugin
+
+* Plugin C API::
+* Plugin C++ API::
+* OpenGL and Threads::
+* Plugin Event Handling::
+
+Appendix
+
+* Code Style::
+
+GNU Free Documentation License
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_ref.info, Node: Introduction, Next: Building from Source, Prev:
Top, Up: Top
+
+1 Introduction
+**************
+
+Gnash is a free SWF movie player. It is available as a stand-alone
+application or as a plugin for several popular web browsers. It
+supports playing media from a disk or streaming over a network
+connection. Some popular video sharing sites like YouTube are supported
+on a wide variety of devices from embedded ones to modern desktops.
+
+ Gnash has a better focus on security, allowing the user tight
+control of all network or disk based I/O. Gnash also supports extending
+ActionScript by creating your own classes. You can write wrappers for
+any development library, and import them into the player much like Perl
+or Python does.
+
+* Menu:
+
+* Audience::
+* What Is Supported?::
+
+
+File: gnash_ref.info, Node: Audience, Next: What Is Supported?, Up:
Introduction
+
+1.1 Audience
+============
+
+This manual is primarily focused on users interested in how to get
+Gnash installed from a package, and basic usage as a web browser
+plugin. For more technical details, please refer to the Gnash Reference
+manual.
+
+
+File: gnash_ref.info, Node: What Is Supported?, Prev: Audience, Up:
Introduction
+
+1.2 What Is Supported?
+======================
+
+Gnash is known to compile for most any POSIX and ANSI C++ conforming
+system if you have all the dependent libraries installed. Systems we
+test on, and which Gnash is known to run on are Ubuntu, Fedora, Debian,
+Mandriva, OpenBSD, NetBSD, FreeBSD, Win32, and Darwin (OSX) primarily.
+Occasionally other platforms are built, primarily by those distribution
+maintainers. This includes BeOS, Haiku, Syllable, OS/2, Solaris,
+Slackware, and Gentoo.
+
+ Gnash is capable of reading up to SWF v9 files and opcodes, but
+primarily supports SWF v7, with better SWF v8 and v9 support under
+heavy development. With the 0.8.2 release, Gnash includes initial
+parser support for SWF v8 and v9. Not all ActionScript 2 classes are
+implemented yet, but all of the most heavily used ones are. Many
+ActionScript 2 classes are partially implemented; there is support for
+all of the commonly used methods of each class.
+
+ Gnash has implemented about 80% of ActionScript v2.0, and has begun
+implementing ActionScript v3.0. Gnash supports the majority of Flash
+opcodes up to SWF v9, and a wide sampling of ActionScript classes for
+SWF v8.
+
+ As ActionScript 3 is a more developed version of ActionScript 2,
+many of the same classes work for both. Support has been added to
+Gnash's ActionScript library to support the new ActionScript 3 filters,
+which get applied to every class. Implementing ActionScript clases is
+often the easiest way for new Gnash developers to make a contribution
+without a deep internal knpowledge of Gnash.
+
+ Gnash has included video support since early 2007, but this is an
+ever changing field of reverse engineering. Many of the popular video
+sharing sites use SWF v8 or v9, which Gnash still has imperfect support
+for. This is improving all the time, so often builds from a development
+snapshot will work when using the older release packaged in your
+distribution doesn't. You can find daily snapshots of the latest CVS
+tree at: http://www.gnashdev.org/dev_snapshots
+(http://www.gnashdev.org/dev_snapshots/).
+
+ Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+should work with Gnash. Gnash supports the loading of patent free
+codecs like Ogg Vorbis or Theora from disk based files, while work is
+being done to support these codecs when embedded in a SWF file. Ffmpeg
+contains the codecs used by the current SWF defintion, FLV, VP6 (ON2),
+H.263, H.264, and MP3.
+
+
+File: gnash_ref.info, Node: Building from Source, Next: Software Internals,
Prev: Introduction, Up: Top
+
+2 Building from Source
+**********************
+
+* Menu:
+
+* Overview::
+* Getting The Source::
+* Code Dependencies::
+* Testing Dependencies::
+* Documentation Dependencies::
+* Configuring Gnash::
+* Compiling the Code::
+* Creating the Documentation::
+* Running the Tests::
+
+
+File: gnash_ref.info, Node: Overview, Next: Getting The Source, Up:
Building from Source
+
+2.1 Overview
+============
+
+The typical process of building from source will involve getting the
+source (*note Getting The Source::), build dependencies (*note Code
+Dependencies::), configuration (*note Configuring Gnash::), compilation
+(*note Compiling the Code::), testing (*note Running the Tests::), and
+installation (*note Installation::). A simplified overview of the
+process would be:
+
+
+ ./autogen.sh
+ ./configure
+ make
+ make check
+ make install
+
+ If you are compiling with GCC you will probably need to use a machine
+with at least 128 megabytes of physical RAM; 64MB is not enough for a
+couple of the files, even with swap enabled and optimisation turned off.
+
+ At present the Gnash source is about 30 MB extracted and configured
+and requires a total of about 125 megabytes to compile it.
+
+ Continue reading for detailed step-by-step instructions of the
+entire procedure.
+
+
+File: gnash_ref.info, Node: Getting The Source, Next: Code Dependencies,
Prev: Overview, Up: Building from Source
+
+2.2 Getting The Source
+======================
+
+* Menu:
+
+* Releases::
+* CVS Access::
+
+
+File: gnash_ref.info, Node: Releases, Next: CVS Access, Up: Getting The
Source
+
+2.2.1 Releases
+--------------
+
+Tarballs of official releases can be found in the download area of the
+project's GNU Savannah page at http://savannah.gnu.org/projects/gnash
+(http://savannah.gnu.org/projects/gnash) or under
+http://ftp.gnu.org/gnu/gnash (http://ftp.gnu.org/gnu/gnash)
+
+
+File: gnash_ref.info, Node: CVS Access, Prev: Releases, Up: Getting The
Source
+
+2.2.2 CVS Access
+----------------
+
+The latest Gnash development sources are available via anonymous CVS.
+Use the following commands to check them out (just hit return when you
+are prompted for the password):
+
+
+ export CVS_RSH=ssh
+ cvs -z3 -d:pserver:address@hidden:/sources/gnash co gnash
+
+You will then be able to update your copy from the repository using
+
+
+ cd gnash
+ cvs update -d
+
+ If you only have access to the internet via a web proxy, you will
+find daily source snapshots of the latest CVS tree in
+http://www.gnashdev.org/dev_snapshots
+(http://www.gnashdev.org/dev_snapshots/)
+
+
+File: gnash_ref.info, Node: Code Dependencies, Next: Testing Dependencies,
Prev: Getting The Source, Up: Building from Source
+
+2.3 Code Dependencies
+=====================
+
+Gnash has a number of dependencies on other packages. If you install
+the dependencies using a package manager, be certain to install the
+development versions of the packages. The normal versions are often
+missing the headers Gnash needs to compile.
+
+ Some dependencies have other dependencies, like GTk also needs
+glib2, atk, and pango to produce a fully linked executable. Different
+distributions also use differing dependencies, sometimes a package will
+depend on libxml2 on one system, but libexpat on another.
+
+*Code Dependency Table*
+
+Name Level Version DescriptionExplanationapt-get RPM/Yum
+ package packageBSD
+ package
+Boost Required 1.32 or Boost is In Gnash, `libboost-thread-dev,`
+ higher a library Boost
libboost-date-time-devlibboost-thread-devel,
+ of libraries
libboost-devlibboost-date-time-devel
+ portable are used ' '`
+ C++ extensively,
boost-headers,
+ classes primarily boost-libs,
+ and boost-gthread or just
+ templates. and boost '
+ boost-date-time.
+ Boost is
+ used for
+ thread
+ and mutext
+ handling.
+libxml2 Required Libxml2 This
`libxml2-dev'`libxml2-devel'`libxml2'
+ is the library
+ GNOME XML is used
+ parser to parse
+ library messages
+ and is for the
+ available XML
+ at XMLNode,
+ http://xmlsoft.orgor
+ (http://xmlsoft.org).XMLSocket
+ ActionScript
+ classes.
+AGG Possibly 2.4 or AGG is Gnash
`libagg-dev'`agg-devel'`agg'
+ Required higher the requires
+ AntiGrain the
+ low-level installation
+ 2D of at
+ graphics least one
+ library. renderer.
+ AGG is
+ considered
+ the _best
+ supported_
+ renderer
+ for Gnash.
+OpenGL Possibly OpenGL Gnash
`libgl1-mesa-dev'`libmesa-devel'`mesa'
+ Required is a requires
+ standard the
+ specificationinstallation
+ defining a of at
+ cross-languageleast one
+ cross-platformrenderer.
+ API for If you
+ writing don't
+ applicationshave a
+ which hardware
+ produce accelerated
+ 3D and 2D driver,
+ graphics. you're
+ It better
+ supports off using
+ hardware AGG for
+ acceleration.the
+ You can renderer.
+ download
+ a free
+ implementation
+ from
+ http://www.mesa3d.org
+ (http://www.mesa3d.org),
+ although
+ it
+ doesn't
+ support
+ hardware
+ acceleration.
+Cairo Possibly Cairo is Gnash
`libcairo2-dev'`cairo-devel'`cairo'
+ Required a 2D requires
+ graphics the
+ library installation
+ with of at
+ support least one
+ for renderer.
+ multiple Cairo is
+ output considered
+ devices. the
+ It will _least
+ automaticallysupported_
+ use renderer
+ graphic for Gnash.
+ card
+ acceleration
+ when
+ available,
+ and has
+ an
+ experimental
+ OpenGL
+ backend.
+GTK Possibly 2.2 or GTK is Gnash
`libgtk2.0-dev'`gtk-devel'`gtk+2'
+ Required higher the GIMP requires
+ Toolkit the
+ GUI installation
+ library of at
+ used by least one
+ the GNOME GUI
+ desktop. library.
+ It uses GTK is
+ Cairo considered
+ internally.to be the
+ Gtk _best
+ enables supported_
+ better GUI
+ integrationlibrary
+ with option
+ Firefox, for Gnash.
+ as well
+ as better
+ event
+ handling
+ and
+ higher
+ level GUI
+ constructs
+ like
+ menus and
+ dialog
+ boxes.
+GtkGlExt Possibly GtkGlExt This
`libgtkglext1-dev'`gtkglext-devel'`gtkglext'
+ Required integrates library
+ OpenGL is
+ into GTK. required
+ in order
+ to use
+ the GTK
+ GUI
+ library
+ in
+ conjunction
+ with the
+ OpenGL
+ renderer.
+SDL Possibly The Gnash
`libsdl1.2-dev'`SDL-devel'`SDL-1.2'
+ Required Simple requires
+ DirectMediathe
+ Layer is installation
+ a of at
+ cross-platformleast one
+ multimedia GUI
+ library library.
+ which SDL may
+ provides also be
+ abstractionused as a
+ for sound
+ audio, handler
+ graphics, regardless
+ sound and of
+ input whether
+ APIs. it is
+ SDL is employed
+ available as a GUI
+ from library.
+ http://www.libsdl.orgThe GUI
+ (http://www.libsdl.org).library
+ is
+ _poorly
+ supported_
+ in Gnash,
+ but the
+ sound
+ handler
+ is the
+ _best
+ supported_
+ in Gnash.
+FLTK Possibly 2.0 or The Fast Gnash No No
+ Required higher Light requires distributiondistribution
+ ToolKit the packages packages
+ is a installationare are
+ portable of at available. available.No
+ GUI least one distribution
+ library GUI packages
+ which is library. are
+ intended FLTK may available.
+ as a be used
+ replacementin
+ for the conjunction
+ SDL GUI. with the
+ Cairo and
+ AGG
+ renderers.
+KDE Possibly Kdelibs Gnash
`kdelibs3-dev,`kdelibs-devel,
+ Required is a requires
kdebase-dev'kdebase-devel'`kdelibs,
+ collection the kdebase'
+ of installation
+ libraries of at
+ needed to least one
+ compile GUI
+ KDE library.
+ applications.Kdelibs
+ is also
+ required
+ for the
+ Kpart
+ plugin
+ for
+ Konqueror.
+Gstreamer Optional Gstreamer If you
`libgstreamer0.8-dev'`gstreamer-devel'`gstreamer-0.10'
+ is a would
+ video like
+ handler. video
+ playback,
+ you must
+ install
+ one of
+ the video
+ handlers.
+gst-ffmpeg Possibly gst-ffmpegThis
`gstreamer0.8-ffmpeg-dev'`gstreamer-ffmpeg-devel'`gstreamer-ffmpeg'
+ Required allows package
+ you to is
+ use the required
+ FFMPEG if you
+ decoder would
+ with like to
+ Gstreamer. use
+ Gstreamer
+ as a
+ video
+ handler.
+FFMPEG Possibly FFMPEG If you
`ffmpeg-dev'`ffmpeg-devel'`ffmpeg'
+ Required is a would
+ video like
+ handler. video
+ playback,
+ you must
+ install
+ one of
+ the video
+ handlers.
+ When
+ using the
+ gstreamer-ffmpeg
+ plugin,
+ ffmpeg
+ doesn't
+ need to be
+ installed,
+ as it's
+ part of
+ the
+ plugin.
+ For
+ systems
+ without
+ Gstreamer
+ support,
+ ffmpeg
+ can be
+ used
+ directly.
+JPEG Optional JPEG This
`libjpeg62-dev'`libjpeg'`jpeg'
+ (http://www.ijg.org/)library
+ is a is used
+ lossy for
+ image rendering
+ format JPEGs.
+ which is
+ heavily
+ used for
+ images.
+PNG Optional PNG This
`libpng12-dev'`libpng'`png'
+ (http://www.libpng.org/pub/png/)library
+ is a is used
+ patent-freefor
+ image rendering
+ format PNGs.
+ which is
+ comparable
+ to _GIF_.
+libcurl Optional libcurl This
`libcurl4-gnutls'`libcurl'`curl'
+ is the library
+ multiprotocalis used
+ file for URL
+ transfer downloading.
+ library.
+Glib2 Optional Glib2 is This
`glib2-dev'`glib2-devel'`glib2'
+ a library
+ dependency is used
+ of Gtk, for
+ and is a convenience.
+ collection
+ of
+ commonly
+ used
+ functions.
+Atk Optional Atk is a This `atk-dev'
`atk-devel'`atk'
+ dependency library
+ of Gtk, is used
+ and is for
+ used for accessiblity..
+ accessibility
+ support.
+Pango Optional Pango is This
`pango-dev'`pango-devel'`pango'
+ a library
+ dependency is used
+ of Gtk, for font
+ and is handling.
+ used for
+ font
+ handling.
+automake Possibly 1.6.0 Automake This `automake'
`automake'`automake'
+ Required is a tool package
+ for is
+ generating required
+ _Makefile.in_to run
+ files. _autogen.sh_,
+ which is
+ a
+ requirement
+ if you
+ are using
+ the
+ development
+ source
+ from CVS.
+autoconf Possibly 2.59 Autoconf This `autoconf'
`autoconf'`autoconf'
+ Required is a package
+ package is
+ for required
+ generating to run
+ configure _autogen.sh_,
+ scripts. which is
+ a
+ requirement
+ if you
+ are using
+ the
+ development
+ source
+ from CVS.
+gettext Possibly 0.14.6 Gettext This `gettext'
`gettext'`gettext'
+ Required is part package
+ of the is
+ GNU required
+ Translationto run
+ Project. _autogen.sh_,
+ which is
+ a
+ requirement
+ if you
+ are using
+ the
+ development
+ source
+ from CVS.
+libtool Possibly 1.5.22 This is This
`libltdl3-dev'`libtool'`libtool'
+ Required a generic package
+ library is
+ support required
+ script. to run
+ _autogen.sh_,
+ which is
+ a
+ requirement
+ if you
+ are using
+ the
+ development
+ source
+ from CVS.
+
+
+File: gnash_ref.info, Node: Testing Dependencies, Next: Documentation
Dependencies, Prev: Code Dependencies, Up: Building from Source
+
+2.4 Testing Dependencies
+========================
+
+Gnash tries to run as many tests as possible, but will simply skip
+tests if the tools to run them are unavailable.
+
+*Testing Dependency Table*
+
+Name Level Version DescriptionExplanationapt-get RPM/Yum
+ package packageBSD
+ package
+Ming Optional 0.4.0_beta4 Ming is Ming is No No
+ or higher an the distributiondistribution
+ ActionScriptprimary packages packages
+ compiler. compiler are are
+ for available. available.No
+ ActionScript distribution
+ testcases. packages
+ are
+ available.
+Mtasc Optional 1.12 or Mtasc is Mtasc is `mtasc' No
+ higher an used in distribution
+ ActionScriptsome packages
+ compiler. tests. are
+ available.No
+ distribution
+ packages
+ are
+ available.
+swfc Optional part of Swfc a Swfc is No No
+ swftools swf used in distributiondistribution
+ 0.8.1 decompiler.some packages packages
+ testcases. are are
+ available. available.No
+ distribution
+ packages
+ are
+ available.
+swfmill Optional 0.2.12 Swfmill Swfmill No No
+ is an is used distributiondistribution
+ XML-based in some packages packages
+ SWF testcases. are are
+ (Shockwave available. available.No
+ Flash) distribution
+ processing packages
+ tool. are
+ available.
+Python Optional 2.4 or Python Python is `python'
`python'`python'
+ higher is a used by
+ scripting part of
+ language. the
+ testing
+ framework.
+DejaGnu Optional 1.4 or DejaGnu DejaGnu `dejagnu'
`dejagnu'`dejagnu'
+ higher is a is used
+ testing to run
+ framework. multiple
+ tests in
+ an
+ automated
+ fashion.
+
+
+File: gnash_ref.info, Node: Documentation Dependencies, Next: Configuring
Gnash, Prev: Testing Dependencies, Up: Building from Source
+
+2.5 Documentation Dependencies
+==============================
+
+The following packages are used to build Gnash's documentation.
+
+*Documentation Dependency Table*
+
+Name Level Version DescriptionExplanationapt-get RPM/Yum
+ package packageBSD
+ package
+Docbook Required Docbook Gnash
`docbook-utils'`docbook-dtd41-sgml'
+
(http://http://docbook.sourceforge.net/)documentationand and
+ is is an is
`docbook-dsssl'`docbook-style-dsssl'docbook
+ industry-standardwritten
+ XML in
+ format Docbook.
+ for
+ technical
+ documentation.
+ You can
+ download
+ it from
+
http://sourceforge.net/project/showfiles.php?group_id=21935#files
+
(http://sourceforge.net/project/showfiles.php?group_id=21935#files).
+DocBook2X Optional This DocBook2X
`docbook2x'`docbook2x'`docbook2x'
+ software is
+ package required
+ converts to
+ Docbook produce
+ documents HTML and
+ to the Texinfo
+ traditionalformats.
+ man page
+ format,
+ GNU
+ Texinfo
+ format,
+ and HTML
+ (via
+ Texinfo)
+ format.
+ It is
+ available
+ at
+ http://docbook2x.sourceforge.net/
+ (http://docbook2x.sourceforge.net/).
+DocBook-utilsOptional This
DocBook-utils`docbook-utils'`docbook-utils'`docbook-utils'
+ software is
+ package required
+ converts to
+ Docbook produce
+ documents HTML and
+ to the Texinfo
+ traditionalformats.
+ man page
+ format,
+ GNU
+ Texinfo
+ format,
+ and HTML
+ (via
+ Texinfo)
+ format.
+Texinfo Possibly Texinfo Texinfo `texinfo'
`texinfo'`texinfo'
+ Required can be is
+ used to required
+ convert if you
+ DocBook2X wish to
+ output product
+ into GNU GNU info
+ info pages.
+ pages.
+ You can
+ download
+ it from
+ http://ftp.gnu.org/gnu/texinfo/
+ (http://ftp.gnu.org/gnu/texinfo/).
+FOP Optional 0.20.5 FormattingFOP is `fop' `fop'`fop'
+ Objects required
+ Processor for PDF
+ is a output.
+ print
+ formatter
+ driven by
+ XSL
+ formatting
+ objects.
+ It is a
+ Java
+ application
+ which can
+ output
+ PDF, PCL,
+ PS, SVG,
+ XML,
+ Print,
+ AWT, MIF,
+ and Text.
+ It is
+ available
+ at
+ http://xmlgraphics.apache.org/fop/
+ (http://xmlgraphics.apache.org/fop/).
+Java Possibly FOP Sun's Download Download
+(j2re) Required requires Java the the
+ Sun's runtime package package
+ Java (j2re) is from Sun from Sun
+ runtime required
(http://java.sun.com).(http://java.sun.com).
+ (GCJ does to use
+ not work FOP.
+ with
+ FOP).
+ You can
+ download
+ it from
+ http://java.sun.com
+ (http://java.sun.com).
+JAI Possibly Sun's JAI is Download Download
+ Required Java required the the
+ Advanced if you package package
+ Imaging wish to from Sun from Sun
+ API can include
(http://java.sun.com/products/java-media/jai/iio.html).(http://java.sun.com/products/java-media/jai/iio.html).
+ be graphics
+ downloaded in a PDF
+ from file being
+
http://java.sun.com/products/java-media/jai/iio.htmlgenerated
+
(http://java.sun.com/products/java-media/jai/iio.html).with FOP.
+
+ If you install j2re, set the _JAVA_HOME_ environment variable to the
+top directory of the j2re installation. If you encounter problems with
+the Java installation, you may also need to add this path to the
+_CLASSPATH_ environment variable.
+
+
+File: gnash_ref.info, Node: Configuring Gnash, Prev: Documentation
Dependencies, Up: Building from Source
+
+2.6 Configuring Gnash
+=====================
+
+Gnash, like most GNU projects, allows a user to select various options
+before compiling its source code. These options include selecting from
+the available features, specifying custom paths for installation, and
+cross compiling support uses GNU Autoconf
+(http://www.gnu.org/software/autoconf/) for configuration.
+
+ If you opted to download the development snapshot of Gnash, the
+_configure_ script will not be included. It can be created by running
+_autogen.sh_ from the source root directory:
+
+
+ ./autogen.sh
+
+Note that there are some dependencies (*note Code Dependencies::) for
+autogen.
+
+ All the standard `configure' options are available. In addition,
+Gnash has two types of options: those that enable or disable features
+(*note Features::), and those that specify custom paths for development
+packages (*note Specifying Custom Paths::) which are not found during
+the default search. A complete list of _all_ configuration options,
+including standard ones, can be seen by typing:
+
+
+ ./configure --help | less
+
+Read further for a more detailed explanation of Gnash-specific options.
+
+ The syntax for running _configure_ is as follows:
+
+
+ configure <options>
+
+The example below shows the `configure' options which create the
+smallest working standalone version of Gnash. In this example,
+`configure' is being run from the source root directory:
+
+
+ ./configure --disable-debugger --disable-cygnal \
+ --disable-plugin --enable-media=ffmpeg --enable-gui=sdl
+
+ By default, you shouldn't need to supply any options to configure.
+The configure script will attempt to determine what to build based on
+the development libraries you have installed. The default configuration
+for Gnash is both GTK and KDE GUIs, the AGG renderer, and Gstreamer for
+multimedia support, with no extensions built.
+
+ Being highly portable, Gnash has many configuration options
+available, and not all are supposed to work together. A common mistake
+when configuring Gnash is to supply too many options, overdriving
+Gnash's ability to do the right thing.
+
+* Menu:
+
+* Features::
+* Specifying Custom Paths::
+
+
+File: gnash_ref.info, Node: Features, Next: Specifying Custom Paths, Up:
Configuring Gnash
+
+2.6.1 Features
+--------------
+
+Some switches can be used during configuration to enable or disable
+features of Gnash. Some of the most important configuration options are:
+
+ * `--enable-gui' lets you specify your GUI of choice. The default
+ option is GTK.
+
+ * `--enable-renderer' allows a renderer to be chosen. The default
+ renderer is AGG.
+
+ * `--enable-media' permits a media handler to be selected. The
+ default is Gstreamer.
+
+ A complete list of available features follows.
+
+*Configuration Options - Features*
+
+Option Function
+`--enable-debugger' Enable support for the Flash
+ debugger. The debugger is mainly of
+ interest to Flash developers, and
+ is still under development.
+`--enable-lirc' Enable support for the LIRC remote
+ control protocol.
+`--enable-cygnal' Build the Cygnal streaming media
+ server.
+`--disable-menus' Disable building all the menus for
+ the GUI. THis is used by mobile
+ devices without as much screen
+ space.
+`--enable-docbook' Enable the generation of HTML,
+ INFO, and MAN versions of the
+ documentation from the Docbook XML.
+ You will then be able to use `make
+ html', `make info', and `make man'
+ commands. By default, man,info and
+ html pages are generated.
+`--enable-gui=gtk|sdl|kde|fltk|fb|hildon|alp'Select the Graphic User Interface
+ to use (choose one).?
+ [undisplayable block object]
+`--enable-i810-lod-bias' Enable fix for Intel 810 LOD bias
+ problem. Older versions of libMesa
+ on the Intel i810 or i815 graphics
+ processor need this flag or Gnash
+ will core dump. This has been fixed
+ in newer versions (summer 2005) of
+ libMesa.
+`--enable-media=ffmpeg|gst|none' Select the specified media decoder
+ and sound engine. FFMPEG uses the
+ SDL sound engine; GST uses its own.
+ `GST' is the default decoder. ?
+ [undisplayable block object] You
+ should only select one media
+ decoder.
+`--disable-nsapi'`--enable-nsapi' Force disable/enable building the
+ NPAPI plugin. By default the
+ Mozilla plugin is built if the GTK
+ gui is selected. Specify the
+ `--with-npapi-plugindir=' option to
+ specify where the plugin should be
+ installed.
+`--disable-kparts'`--enable-kparts' Force disable/enable building the
+ KPARTS plugin. By default the KDE
+ plugin is built if the kde gui is
+ selected. Specify the
+ `--with-kde-plugindir=' and
+ `--with-kde-servicesdir=' options
+ (or more generally the
+ `--with-kde-pluginprefix=' one) to
+ specify where the plugin should be
+ installed. The default installation
+ dir is extracted from kde-config.
+`--disable-plugins' Disable build of both kparts and
+ npapi plugins
+`--enable-renderer=opengl|cairo|agg' Enable support for the a graphics
+ backend. Currently only `opengl' and
+ `agg' work sufficiently. OpenGL is
+ used when you have hardware
+ accelerated graphics. AGG i used
+ when you do not have hardware
+ accelerated graphics. Typically
+ most desktop machines have OpenGL
+ support, and most embedded systems
+ do not. OpenGl is the default when
+ building Gnash, although the
+ quality of AGG's rendering is
+ currently superior to OpenGL.
+`--enable-sdk-install' Enable installing the libraries and
+ headers as an SDK.
+`--disable-shared' Enable installing the shared
+ libraries and headers. Note that
+ the extensions mechanism may not
+ work if shared libraries are
+ disabled.
+`--enable-strict' Turn verbose GCC compiler warnings.
+ By default only `-Wall' is used
+ with GCC.
+`--enable-fps-debug' Enable FPS debugging code. When
+ this feature is compiled in you can
+ use the -f switch of Gnash to have
+ FPS printed at regular intervals.
+`--enable-write' Makes the Mozilla plugin write the
+ currently playing SWF movie to
+ `/tmp'.
+`--disable-mit-shm' Disable support for the MIT-SHM X
+ extensions. Currently support is
+ only available using GTK gui and
+ AGG renderer. Keeping it enabled
+ is not a problem as it will not be
+ used if not available in the
+ current X session.
+
+
+File: gnash_ref.info, Node: Specifying Custom Paths, Prev: Features, Up:
Configuring Gnash
+
+2.6.2 Specifying Custom Paths
+-----------------------------
+
+By default, none of these options should be required unless you want
+Gnash to use a specific version of a development package, or if the
+configure test fails to find a component. Please report the problem
+(*note Reporting Bugs::) if a configure test fails.
+
+ The following custom path options are available:
+
+*Custom Path Options*
+
+Option Function
+`--x-includes=DIR' X include files are in DIR.
+`--x-libraries=DIR' X library files are in DIR.
+`--with-libxml=PFX' Prefix to where libxml is
+ installed.
+`--with-libxml-libraries=DIR' Directory where libxml library is
+ installed.
+`--with-libxml-includes=DIR' Directory where libxml header
+ files are installed.
+`--with-docbook=DIR' Directory where the DocBook
+ style-sheets are installed.
+`--with-sdl-prefix=PFX' Prefix where SDL is installed.
+`--with-zlib-incl' Directory where zlib header is
+ installed.
+`--with-zlib-lib' Directory where zlib library is
+ installed.
+`--with-jpeg-incl' Directory where jpeg header is
+ installed.
+`--with-jpeg-lib' Directory where jpeg library is
+ installed.
+`--with-png-incl' Directory where png header is
+ installed.
+`--with-png-lib' Directory where png library is
+ installed.
+`--with-qt-dir' Directory where QT is installed.
+ This is only used by the Klash
+ plugin.
+`--with-qt-includes' Directory where the QT header
+ files are installed. This is only
+ used by the Klash plugin.
+`--with-qt-libraries' Directory where the QT libraries
+ are installed. This is only used by
+ the Klash plugin.
+`--with-npapi-plugindir' This is the directory to install
+ the NPAPI (Mozilla) plugin in. By
+ default it goes to
+ ~/.mozilla/plugins.
+`--with-kde-pluginprefix' This option sets the default
+ install dir for all KPARTS (kde)
+ files. The plugin will be
+ installed in PREFIX/lib/kde3, use
+ `-with-kde-plugindir' to override.
+ The service file in
+ PREFIX/share/services, use
+ `--with-kde-servicesdir' to
+ override. The config file in
+ PREFIX/share/config, use
+ `--with-kde-configdir' to override.
+ The appdata file in
+ PREFIX/share/apps/klash, use
+ `--with-kde-appsdatadir' to
+ override.
+`--with-kde-plugindir' This is the directory to install
+ the KPARTS (kde) plugin in. By
+ default it is what's set by
+ -with-kde-pluginprefix or what's
+ returned by kde-config -install
+ module -expandvars, or
+ $(prefix)/share/services if
+ kde-config is not found.
+`--with-kde-servicesdir' This is the directory to install
+ the KPARTS (kde) service in. By
+ default it is what's set by
+ -with-kde-pluginprefix or what's
+ returned by kde-config -install
+ services -expandvars, or
+ $(libdir)/kde3 if kde-config is not
+ found.
+`--with-kde-configdir' This is the directory to install
+ the KPARTS (kde) config files in.
+ By default it is what's set by
+ -with-kde-pluginprefix or what's
+ returned by kde-config -install
+ config -expandvars, or
+ $(prefix)/share/config if
+ kde-config is not found.
+`--with-kde-appsdatadir' This is the directory to install
+ the KPARTS (kde) application data
+ files in. By default it is what's
+ set by -with-kde-pluginprefix or
+ what's returned by kde-config
+ -install data -expandvars, or
+ $(prefix)/share/apps if kde-config
+ is not found.
+`--with-ming' Ming is used to build test cases,
+ but not by the Gnash player itself.
+`--with-ogg_incl' Directory where the libogg headers
+ are installed.
+`--with-ogg_lib' Directory where the libogg library
+ is installed.
+`--with-gstreamer-incl' Directory where the Gstreamer
+ headers are installed. Gstreamer
+ version 0.10 or greater must be
+ used.
+`--with-gstreamer-lib' Directory where the Gstreamer
+ library is installed. Gstreamer
+ version 0.10 or greater must be
+ used.
+`--with-opengl-includes' Directory where OpenGL (libMesa)
+ headers are installed.
+`--with-opengl-lib' Directory where the OpenGL
+ (libMesa) library is installed.
+`--with-glext-incl' Directory where GtkGlExt headers
+ are installed.
+`--with-glext-lib' Directory where the GtkGlExt
+ library is installed.
+`--with-gtk2-incl' Directory where the Gtk2 headers
+ are installed.
+`--with-gtk2-lib' Directory where the Gtk2 library
+ is installed.
+`--with-cairo_incl' Directory where the Cairo headers
+ are installed.
+`--with-cairo-lib' Directory where the Cairo library
+ is installed.
+`--with-glib-incl' Directory where the Glib headers
+ are installed.
+`--with-glib-lib' Directory where the Glib library
+ is installed.
+`--with-pango-incl' Directory where the Pango headers
+ are installed.
+`--with-pango-lib' Directory where the Pango library
+ is installed.
+`--with-atk-incl' Directory where the ATK headers
+ are installed.
+`--with-atk-lib' Directory where the ATK library is
+ installed.
+`--with-pthread-incl' Directory where the Pthread
+ headers are installed.
+`--with-pthread-lib' Directory where the Pthread
+ library is installed.
+`--with-agg-incl' Directory where the AGG
+ (Antigrain) headers are installed.
+`--with-agg-lib' Directory where the AGG
+ (Antigrain) library is installed.
+`--with-ffmpeg-incl' Directory where the FFMPEG headers
+ are installed.
+`--with-ffmpeg-lib' Directory where the FFMPEG library
+ is installed.
+`--with-boost-incl' Directory where the Boost headers
+ are installed.
+`--with-boost-lib' Directory where the Boost library
+ is installed.
+`--with-curl-incl' Directory where the libCurl
+ headers are installed.
+`--with-curl-lib' Directory where the libCurl
+ library is installed.
+
+ Once you have Gnash configured, you are ready to build the code.
+Gnash is built using _GNU make_.
+
+* Menu:
+
+* Overview::
+* Getting The Source::
+* Code Dependencies::
+* Testing Dependencies::
+* Documentation Dependencies::
+* Configuring Gnash::
+* Compiling the Code::
+* Creating the Documentation::
+* Running the Tests::
+
+
+File: gnash_ref.info, Node: Compiling the Code, Next: Creating the
Documentation, Up: Building from Source
+
+2.7 Compiling the Code
+======================
+
+The most basic way to compile code is simply:
+
+
+ make
+
+If the compilation ends with an error, check the output of _configure_
+and ensure that you are not missing any required prerequisites. The
+output of `make' can be verbose; you may wish to pipe the output to a
+file.
+
+ The variables used by `make' can be redefined when the program is
+invoked, if you desire it. The most interesting flags are _CFLAGS_
+and _CXXFLAGS_, which are often used to enable debugging or turn of
+optimization. The default value for both of these variables is _-O2
+-g_. A list of influential environment variables can be seen in the
+configuration help:
+
+ ./configure --help
+
+ In the following example, debugging is enabled and optimization is
+disabled:
+
+ make CFLAGS=-g CXXFLAGS=-g
+
+
+File: gnash_ref.info, Node: Creating the Documentation, Next: Running the
Tests, Prev: Compiling the Code, Up: Building from Source
+
+2.8 Creating the Documentation
+==============================
+
+By default, documentation is not built when you install (*note
+Installation::) Gnash. This is because there are a number of
+dependencies for the documentation (*note Documentation
+Dependencies::). Documentation is built when it is specified with a
+specific target in the generated `Makefile' in the `doc/C'
+sub-directory. If you type `make install' in this directory, all
+documents will be built.
+
+ You must specify a target output format when you wish to create
+documentation. The available output formats are: `html', `pdf', `info',
+`man', and `alldocs'. It is also possible to output `GNOME help' if
+the configure option (*note Features::) `--enable-ghelp' was used. The
+`alldocs' target will build all output formats except _GNOME help_.
+For example, to create HTML output, type:
+
+
+ make html
+
+ Gnash also uses Doxygen
+(http://www.stack.nl/~dimitri/doxygen/index.html) to produce _HTML_
+documentation of Gnash internals. You must have Doxygen installed to
+produce this documentation, which is built from the `doc' directory
+with the command (documents will be placed in the subdirectory
+`apidoc/html'):
+
+
+ make apidoc
+
+
+File: gnash_ref.info, Node: Running the Tests, Prev: Creating the
Documentation, Up: Building from Source
+
+2.9 Running the Tests
+=====================
+
+Before beginning the potentially lengthy install, it is wise to test
+the installation. If a test fails, please report it by following the
+instructions for reporting a bug (*note Reporting Bugs::).
+
+* Menu:
+
+* Using DejaGnu::
+* Running The Tests Manually::
+* Installation::
+* Cross Configuring::
+
+
+File: gnash_ref.info, Node: Using DejaGnu, Next: Running The Tests Manually,
Up: Running the Tests
+
+2.9.1 Using DejaGnu
+-------------------
+
+The easiest way to run Gnash's test suite is to install _DejaGnu
+(http://www.gnu.org/software/dejagnu)_. After installing DejaGnu, run:
+
+
+ make check
+
+* Menu:
+
+* Increasing Verbosity::
+* Running Some Tests::
+
+
+File: gnash_ref.info, Node: Increasing Verbosity, Next: Running Some Tests,
Up: Using DejaGnu
+
+2.9.1.1 Increasing Verbosity
+............................
+
+If you encounter a problem with a test, increasing the verbosity may
+make the issue easier to spot. Additional details are visible when
+_RUNTESTFLAGS_ are used to add the _verbose_ and _all_ options. The
+`verbose' option prints more information about the testing process,
+while the `all' option includes details on passing tests.
+
+
+ make check RUNTESTFLAGS="-v -a"
+
+
+File: gnash_ref.info, Node: Running Some Tests, Prev: Increasing Verbosity,
Up: Using DejaGnu
+
+2.9.1.2 Running Some Tests
+..........................
+
+It is possible to run just a single test, or a subdirectory of tests,
+by specifying the directory or compiled test file.
+
+ Some tests rely on _testsuite/Dejagnu.swf_, which in turn relies on
+_Ming_. This file is created when you run `make check' for the entire
+testsuite, and can also be created on demand:
+
+
+ make -C testsuite Dejagnu.swf
+
+ In this example, the `clip_as_button2' test is compiled and run:
+
+
+ make -C testsuite/samples clip_as_button2-TestRunner
+ cd testsuite/samples && ./clip_as_button2-TestRunner
+
+This creates and runs all the tests in the directory `movies.all':
+
+
+ make -C testsuite/movies.all check
+
+
+File: gnash_ref.info, Node: Running The Tests Manually, Next: Installation,
Prev: Using DejaGnu, Up: Running the Tests
+
+2.9.2 Running The Tests Manually
+--------------------------------
+
+You may also run test cases by hand, which can be useful if you want to
+see all the debugging output from the test case. Often the messages
+which come from deep within Gnash are most useful for development.
+
+ The first step is to compile the test case, which can be done with
+`make XML-v#.swf' where the '#' is replaced with the _target_ SWF
+version or versions. For example:
+
+
+ make XML-v{5,6,7,8}.swf
+
+* Menu:
+
+* Movie tests::
+* ActionScript Unit Tests::
+
+
+File: gnash_ref.info, Node: Movie tests, Next: ActionScript Unit Tests, Up:
Running The Tests Manually
+
+2.9.2.1 Movie tests
+...................
+
+This creates a Flash movie version of the test case, which can be run
+with a standalone Flash player. For instance, the target for SWF
+version 6 could be run with Gnash:
+
+
+ gnash -v XML-v6.swf
+
+
+File: gnash_ref.info, Node: ActionScript Unit Tests, Prev: Movie tests, Up:
Running The Tests Manually
+
+2.9.2.2 ActionScript Unit Tests
+...............................
+
+Unit tests for ActionScript classes in `testsuite/actionscript.all' are
+run without a graphical display:
+
+
+ gprocessor -v XML-v6.swf
+
+
+File: gnash_ref.info, Node: Installation, Next: Cross Configuring, Prev:
Running The Tests Manually, Up: Running the Tests
+
+2.9.3 Installation
+------------------
+
+Now that Gnash has been compiled and tested, use the following command
+to install it:
+
+
+ make install
+
+The above command installs the standalone player. If the correct files
+were found by `configure' and if the `--disable-plugin' option was not
+specified, the Gnash browser plugin is also installed.
+
+ Gnash installs a number of libraries (*note Libraries::), namely:
+_libgnashbase_, _libgnashamf_, _libgnashmedia_, _libserver_, and
+_libgnashplugin_. Executables (*note Executables::) consist of the
+(optional) plugin, `gprocessor', `cygnal', `dumpshm', `soldumper', and
+`gnash'. Documentation (*note Documentation::) may also be installed.
+The installation location is controlled with the _-prefix_ configure
+option (*note Specifying Custom Paths::), except for plugins, which are
+explicitly set with _-plugin-dir_.
+
+ Note that if you are using a single file-system _NFS_ mounted to
+multiple platforms, the configuration option (*note Specifying Custom
+Paths::) _-exec-prefix_ may be used to specify where platform-dependent
+executables and libraries are installed.
+
+* Menu:
+
+* Libraries::
+* Executables::
+* Documentation::
+
+
+File: gnash_ref.info, Node: Libraries, Next: Executables, Up: Installation
+
+2.9.3.1 Libraries
+.................
+
+Installed libraries are located in `/usr/local/lib' by default. If the
+_-prefix_ option was used during the configuration step, the libraries
+will be installed in the directory `lib' inside the path you specified.
+If the libraries are stored in a non-standard location, you must
+identify the path in one of two ways.
+
+ The traditional way to do this on UNIX platforms is to set the
+_LD_LIBRARY_PATH_ variable to the path plus `/lib'. For example, if you
+installed in `/home/gnash', the _LD_LIBRARY_PATH_ path would be
+`/home/gnash/lib'. Multiple paths are delimited with a colon (':').
+
+ GNU/Linux allows the custom path to be added to `/etc/ld.so.conf'.
+After adding the path, run _ldconfig_ as root to update the runtime
+cache.
+
+
+File: gnash_ref.info, Node: Executables, Next: Documentation, Prev:
Libraries, Up: Installation
+
+2.9.3.2 Executables
+...................
+
+The Mozilla plugin is built from headers (the Mozilla SDK) provided
+with Gnash and does not need extra development packages to be
+installed. By default, the plugin is installed to
+`~/.mozilla/plugins/'. To enable the plugin for other users, copy the
+file `libgnashplugin.so' to `.mozilla/plugins/' in their home directory.
+You may also specify the plugin installation directory by using the
+`--with-plugindir' option at configuration time (*note Specifying
+Custom Paths::).
+
+ These defaults are likely to change in future versions of Gnash.
+
+ The remaining executables are installed in the `bin' subdirectory of
+the directory specified by during configuration. If no path was
+specified, the default is `/usr/local/bin'.
+
+
+File: gnash_ref.info, Node: Documentation, Prev: Executables, Up:
Installation
+
+2.9.3.3 Documentation
+.....................
+
+Documentation is not built by default; please refer to the section on
+documentation (*note Creating the Documentation::) for more information
+on building documentation.
+
+ `man' and `info' are installed in `/usr/local/share/man' and
+`/usr/local/share/info' respectively, unless the `--mandir' or
+`--infodir' configuration options (*note Specifying Custom Paths::) are
+used.
+
+ _GNOME help_ documentation uses the directory
+`/usr/local/share/gnash/doc/gnash/C/' by default. A configuration file
+in the Gnash source tree, `doc/C/gnash.omf' is used to specify under
+which menu item Gnash appears in the _GNOME help_ system.
+
+
+File: gnash_ref.info, Node: Cross Configuring, Prev: Installation, Up:
Running the Tests
+
+2.9.4 Cross Configuring
+-----------------------
+
+To cross configure and compile Gnash, begin by building a target system
+on your workstation. This includes cross compilers for the target
+architecture, and some system headers. You will also need to cross
+compile all the dependencies (*note Documentation Dependencies::)
+normally needed to build Gnash. This can on occasion be a daunting
+process, as not all libraries will cross configure and cross compile.
+There is more information about cross compiling all the dependant
+packages on the http://www.gnashdev.org (http://www.gnashdev.org) web
+site.
+
+ If you need to build your own tool chain, that is beyond the scope
+of this manual. There are various resources on the web for howto's on
+building GCC based cross toolchains. Two popular sites are
+http://frank.harvard.edu/~coldwell/toolchain/
+(http://frank.harvard.edu/~coldwell/toolchain/) and
+http://www.kegel.com/crosstool/ (http://www.kegel.com/crosstool/). This
+can also be a very time consuming and frustrating process, even for
+experienced developers.
+
+ Because the process of building your own cross tool chain can be
+harder than one may wish, there are several other cross development
+environments that simulate a native environment to make it easier to
+develop. These also let you develop for both native and cross builds.
+Several popular ones are Access Linux Platform
+(http://www.access-company.com/products/linux/alp.html), Scratchbox
+(http://www.scratchbox.org/), Open Embedded
+(http://www.openembedded.org/), Maemo (http://maemo.org/).
+
+ To build for an ARM based system on an x86 based systems, configure
+like this using the traditional style cross toolchain, configure like
+this:
+
+
+ ../../gnash/configure --build=i686-pc-linux-gnu
+ --host=arm-linux --prefix=/usr/local/arm/oe --disable-nsapi
+ --disable-kparts --enable-gui=fb --enable-renderer=agg
+ --disable-shared --disable-menus
+
+ The important configuration options are the ones which specify the
+architecture for the build:
+
+-target
+ The target architecture, where the final executables are expected
+ to run.
+
+-host
+ The host architecture, where the executables are expected to run.
+ Usually this is the same as the _-target_, except when building a
+ compiler as a Canadian Cross. In this case, you might build a
+ cross compiler on a UNIX system which runs on a win32 machine,
+ producing code for a third architecture, such as ARM. In this
+ example, _-target_ would be 'arm-unknown-linux-gnu', while _-host_
+ would be 'win32'.
+
+-build
+ This is the system the build is running on.
+
+ The following example of _configure_ builds for an ARM system on an
+x86 system. It was run after an ARM system was built in `/usr/arm' and
+other required libraries were cross compiled.
+
+
+ ./configure -target=arm-unknown-linux-gnu --prefix=/usr/arm \
+ --host=arm-unknown-linux-gnu --build=i686-pc-linux-gnu
--disable-plugin
+
+
+File: gnash_ref.info, Node: Software Internals, Next: Reporting Bugs, Prev:
Building from Source, Up: Top
+
+3 Software Internals
+********************
+
+* Menu:
+
+* A Tour of Gnash::
+* Sound handling in Gnash::
+* Testing : Testing.
+* Adding New ActionScript Class::
+
+
+File: gnash_ref.info, Node: A Tour of Gnash, Next: Sound handling in Gnash,
Up: Software Internals
+
+3.1 A Tour of Gnash
+===================
+
+The top level of Gnash has several libraries, _libgnashbase_,
+_libgnashserver_, _libgnashasobjs_ and _libgnashbackend_. There are
+several utility programs included for debug parsing and processing of
+Flash movie files, and other useful utilities for examining local
+Shared Objects and sniffing LocalConnections.
+
+* Menu:
+
+* The Libraries::
+* The Applications::
+* The Plugin::
+* The Debug Logging System::
+
+
+File: gnash_ref.info, Node: The Libraries, Next: The Applications, Up: A
Tour of Gnash
+
+3.1.1 The Libraries
+-------------------
+
+* Menu:
+
+* libgnashbase::
+* libgnashgui::
+* libgnashserver::
+* libgnashasobjs::
+* libgnashamf::
+* libgnashbackend::
+* libgnashplugin::
+* libklashpart::
+
+
+File: gnash_ref.info, Node: libgnashbase, Next: libgnashgui, Up: The
Libraries
+
+3.1.1.1 libgnashbase
+....................
+
+Libgnashbase contains support classes used by the rest of the code.This
+library has no dependencies on any of the other Gnash libraries.
+
+ Gnash makes heavy use of smart pointers, so memory allocations are
+freed up automatically by the interpreter. Both STL and Boost smart
+pointers are used.
+
+
+File: gnash_ref.info, Node: libgnashgui, Next: libgnashserver, Prev:
libgnashbase, Up: The Libraries
+
+3.1.1.2 libgnashgui
+...................
+
+Libgnashgui contains code for a portable GUI class that supports using
+GTK2, a framebuffer, SDL, or KDE, FLTK, or Aqua.
+
+
+File: gnash_ref.info, Node: libgnashserver, Next: libgnashasobjs, Prev:
libgnashgui, Up: The Libraries
+
+3.1.1.3 libgnashserver
+......................
+
+Libgnashserver is the guts of the interpreter itself. This is where the
+main code for the interpreter lives. Includes in libserver are the two
+support libraries for the parser and the core of the virtual machine.
+
+
+File: gnash_ref.info, Node: libgnashasobjs, Next: libgnashamf, Prev:
libgnashserver, Up: The Libraries
+
+3.1.1.4 libgnashasobjs
+......................
+
+Libgnashasobjs contains all the ActionScript classes used by the
+interpreter.
+
+
+File: gnash_ref.info, Node: libgnashamf, Next: libgnashbackend, Prev:
libgnashasobjs, Up: The Libraries
+
+3.1.1.5 libgnashamf
+...................
+
+AMF is the data format used internally by SWF files. This is Gnash's
+support library to handle AMF data. This is used by the ActionScript
+classes SharedObject and LocalConnection. This is also used by the
+NetStream class when using thre RTMP streaming network protocol.
+
+
+File: gnash_ref.info, Node: libgnashbackend, Next: libgnashplugin, Prev:
libgnashamf, Up: The Libraries
+
+3.1.1.6 libgnashbackend
+.......................
+
+Libgnashbackend is a library containing the rendering code that glues
+this display to the Gnash. Supported rendering backends are OpenGL,
+Cairo, and AGG.
+
+
+File: gnash_ref.info, Node: libgnashplugin, Next: libklashpart, Prev:
libgnashbackend, Up: The Libraries
+
+3.1.1.7 libgnashplugin
+......................
+
+Libgnashplugin is the Mozilla/Firefox plugin.
+
+
+File: gnash_ref.info, Node: libklashpart, Prev: libgnashplugin, Up: The
Libraries
+
+3.1.1.8 libklashpart
+....................
+
+Libklashpart is the Konqueror plugin.
+
+
+File: gnash_ref.info, Node: The Applications, Next: The Plugin, Prev: The
Libraries, Up: A Tour of Gnash
+
+3.1.2 The Applications
+----------------------
+
+There are currently a few standalone programs in Gnash, which serve
+either to assist with Gnash development or to play flash movies.
+
+* Menu:
+
+* The Standalone Player::
+* Gprocessor::
+* SOLdumper::
+* Dumpshm::
+
+
+File: gnash_ref.info, Node: The Standalone Player, Next: Gprocessor, Up:
The Applications
+
+3.1.2.1 The Standalone Player
+.............................
+
+This is the standalone OpenGL backend used to play movies. There are
+several command line options and keyboard control keys used by Gnash.
+
+
+File: gnash_ref.info, Node: Gprocessor, Next: SOLdumper, Prev: The
Standalone Player, Up: The Applications
+
+3.1.2.2 Gprocessor
+..................
+
+Gprocessor is used to print out the actions (using the -va option) or
+the parsing (using the -vp option) of a flash movie. It is also used to
+produce the _.gsc_ files that Gnash uses to cache data, thereby
+speeding up the loading of files.
+
+
+File: gnash_ref.info, Node: SOLdumper, Next: Dumpshm, Prev: Gprocessor,
Up: The Applications
+
+3.1.2.3 SOLdumper
+.................
+
+SOLDumper is a utility program used to find and dump the content of
+_Local Shared Objects_, also called "Flash Cookies" by some.
+
+
+File: gnash_ref.info, Node: Dumpshm, Prev: SOLdumper, Up: The Applications
+
+3.1.2.4 Dumpshm
+...............
+
+Dumpshm is a program used to find and dump the contents of the
+_LocalConnection_ shared memory segment.
+
+
+File: gnash_ref.info, Node: The Plugin, Next: The Debug Logging System,
Prev: The Applications, Up: A Tour of Gnash
+
+3.1.3 The Plugin
+----------------
+
+The plugin is designed to work within Mozilla or Firefox, although
+there is Konqueror support as well. The plugin uses the Mozilla NPAPI
+plugin API to be cross platform, and is portable, as well as being well
+integrated into Mozilla based browsers.
+
+* Menu:
+
+* Current Status::
+* GUI Support::
+* Mozplugger::
+* Klash::
+
+
+File: gnash_ref.info, Node: Current Status, Next: GUI Support, Up: The
Plugin
+
+3.1.3.1 Current Status
+......................
+
+As of March 30, 2006, the plugin works! This works in a fashion similar
+to MozPlugger in that the standalone player is used instead of using a
+thread. This gets around the issue of having to maintain a separate
+player to support the plugin. It also gets around the other issues that
+Gnash itself is not thread safe at this time.
+
+ As of Jan, 2007, streaming video, ala "YouTube" works, along with
+other video sharing sites.
+
+
+File: gnash_ref.info, Node: GUI Support, Next: Mozplugger, Prev: Current
Status, Up: The Plugin
+
+3.1.3.2 GUI Support
+...................
+
+Any plugin that wants to display in a browser window needs to be tied
+into the windowing system of the platform being used. On GNU/Linux
+systems, Firefox is a GTK2+ application. There is also KDE support
+through the use of the Klash plugin.
+
+ Gnash can use either several different GUI toolkits to create the
+window, and to handle events for the standalone player.
+
+ The SDL version is more limited, but runs on all platforms,
+including win32. It has no support for event handling, which means
+mouse clicks, keyboard presses, and window resizing doesn't work. I
+personally find the default event handler slow and unresponsive. Gnash
+has support to use fast events, (currently not enabled) which is an SDL
+hack using a background thread to pump events into the SDL event queue
+at a much higher rate.
+
+ There are a variety of development libraries that build a GUI widget
+system on top of SDL and OpenGL. The use of these to add menus and
+dialog boxes to the SDL version is being considered.
+
+ The GTK support is currently the most functional, and the best
+integrated into Firefox. The performance of this version is better than
+the SDL version because of the more efficient event handling within
+GTK. For the best end user experience, use the GTK enabled version.
+
+ GTK also allows Gnash to have menus and dialog boxes. Currently this
+is only being utilized in a limited fashion for now. There is a right
+mouse button menu that allows the user to control the movie being
+player the same way the existing keyboard commands do.
+
+
+File: gnash_ref.info, Node: Mozplugger, Next: Klash, Prev: GUI Support,
Up: The Plugin
+
+3.1.3.3 Mozplugger
+..................
+
+Mozplugger (http://mozplugger.mozdev.org/) is a _Mozilla/Firefox_
+plugin that uses external programs to play video, audio, and other
+multimedia content in the browser. With some support added to the
+external application, it's possible to force the external program to
+use the internal window in the browser where this plugin is supposed to
+display. This enables one to then run the standalone player and display
+its output in the browser.
+
+ While this is not an optimal solution, it does enable one to use
+Gnash as the flash player when browsing. The main issue appears to be
+that the Flash movie being played doesn't get any mouse or keyboard
+input. That may be a mozplugger configuration issue, however.
+
+ Use of MozPlugger is obsolete now that the Gnash plugin works.
+Still, this may be useful still on some platforms.
+
+ Add this to your _$(HOME)/.mozilla/mozpluggerrc_ file to enable this:
+
+
+ application/x-shockwave-flash:swf:Shockwave Gnash
+ nokill embed noisy ignore_errors hidden fill swallow(Gnash) loop:
gnash -v "$file" -x $window
+ : gnash -v "$file" -x $window
+
+ Once this is added, you must delete the
+_$(HOME)/.mozilla/firefox/pluginreg.dat_ file to force Firefox to
+register the plugins again. This is an ASCII text file, so if the patch
+has been added correctly, you'll see an entry for _swf_ files after it
+is recreated. You will need to restart Firefox to recreate this file.
+
+ This file is not recreated immediately when restarting Firefox, but
+waits till the first time a plugin is used. You can force creation of
+this file by typing _about:plugins_ into the URL entry of the browser
+window. The output will also contain information about the mozplugger.
+You should see an entry for Gnash now.
+
+
+File: gnash_ref.info, Node: Klash, Prev: Mozplugger, Up: The Plugin
+
+3.1.3.4 Klash
+.............
+
+Klash is MozPlugger type support for KDE's Konqueror web browser. Klash
+makes Gnash a _kpart_, so it's integrated into KDE better than when
+using MozPlugger. Klash uses the standalone player, utilizing Gnash's
+"-x" window plugin command line option.
+
+ By default, Klash is not built. To enable building Klash, use the
+_-enable-klash_ option when configuring. Other than installing, there
+is nothing else that needs to be done to install Klash.
+
+
+File: gnash_ref.info, Node: The Debug Logging System, Prev: The Plugin, Up:
A Tour of Gnash
+
+3.1.4 The Debug Logging System
+------------------------------
+
+Gnash supports a debug logging system which supports both C and C++
+natively. This means you can use both _printf()_ style debug messages
+and C++ _iostreams_ style, where you can print C++ objects directly as
+you would when using _cout_.
+
+ In the beginning, Gnash only supported the C API for debug logging,
+so it is the most heavily used in Gnash. This API was used in the
+_log_msg()_ and _log_error()_ functions, and used a callback to set
+them up.
+
+ If a filename is not specified at object construction time, a
+default name of _gnash-dbg.log_ is used. If Gnash is started from the
+command line, the debug log will be created in the current directory.
+When executing Gnash from a launcher under _GNOME_ or _KDE_ the debug
+file goes in your home directory, since that's considered the current
+directory.
+
+ There is common functionality between using the C or C++ API.
+Optional output is based on flags that can be set or unset. Multiple
+levels of verbosity are supported, so you can get more output by
+supplying multiple _-v_ options on the command line. You can also
+disable the creation of the debug log.
+
+ Currently the use of the C++ API for logging is discouraged, do to
+performance issues.and the generic log_msg() has been replaced by more
+spcific function calls to allow more control of what gets displayed and
+logged.
+
+* Menu:
+
+* Logging System C API::
+* Logging System C++ API::
+
+
+File: gnash_ref.info, Node: Logging System C API, Next: Logging System C++
API, Up: The Debug Logging System
+
+3.1.4.1 Logging System C API
+............................
+
+These functions are clones of the originals as they were used for
+Gnash. These function the same as always except output can be logged to
+disk now as well. These currently print no timestamp with the output,
+which is the older functionality. As these functions are implemented on
+top of the C++ API now, they can be used without corrupting the output
+buffers.
+
+log_error(const char* fmt, ...)
+ Display an error message if verbose output is enabled. By default
+ the error messages are always written to the disk file, but
+ optionally displayed in the terminal.
+
+void log_unimpl
+ Displays a warning to the user about missing Gnash features. We
+ expect all calls to this function to disappear over time, as we
+ implement those features of Flash.
+
+void log_trace
+ Used only for explicit user traces
+
+void log_debug
+ Logs debug information.
+
+void log_action
+ Log action execution information. Wrap all calls to this function
+ (and other related statements) into an IF_VERBOSE_ACTION macro, so
+ to allow completely removing all the overhead at compile time and
+ reduce it at runtime.
+
+void log_parse
+ Log SWF parsing Wrap all calls to this function (and other
+ related statements) into an IF_VERBOSE_PARSE macro, so to allow
+ completely removing all the overhead at compile time and reduce it
+ at runtime.
+
+void log_security
+ Display a message with security related information.
+
+void log_swferror
+ This indicates an error in how the binary SWF file was
+ constructed, i.e.probably a bug in the tools used to build the SWF
+ file. Wrap all calls to this function (and other related
+ statements) into an IF_VERBOSE_MALFORMED_SWF macro, so to allow
+ completely removing all the overhead at compile time and reduce it
+ at runtime.
+
+log_warning(const char* fmt, ...)
+ Display a warning message if verbose output is enabled. By default
+ the error messages are always written to the disk file, but
+ optionally displayed in the terminal.
+
+
+File: gnash_ref.info, Node: Logging System C++ API, Prev: Logging System C
API, Up: The Debug Logging System
+
+3.1.4.2 Logging System C++ API
+..............................
+
+This is the new C++ streams based API that can be used to print C++
+objects natively. All output lines are timestamped.
+
+ There are two macros used for program tracing. these can be used in
+both C or C++ code with one little difference. Since C doesn't have
+destructors, you must call _GNASH_REPORT_RETURN_ at the end of a
+function to display the function returning message.
+
+GNASH_REPORT_FUNCTION;
+ When this is included in a C++ method, a message is printed when
+ entering and exiting this method by hooking into the constructor
+ and destructor. These are always written to the disk file, but
+ optionally written to the screen only at the highest levels of
+ verbosity.
+
+GNASH_REPORT_RETURN;
+ This is used by C functions to print the returning from function
+ debug message. For C++, this macro is executed automatically by
+ the destructor.
+
+ This is the main API for the logging system. By default everything
+is setup to write to the default _gnash-dbg.log_ file whenever a
+verbose option is supplied. Optionally it is possible to open a log
+file with a specified name, allowing multiple output files.
+
+closeLog(void)
+ Close a debug log. The disk file remains.
+
+removeLog(void)
+ Delete the debug log file from disk.
+
+setVerbosity(void)
+ Increment the verbosity level.
+
+setVerbosity(int)
+ Set the verbosity level.
+
+setStamp(bool flag)
+ If _flag_ is _true_, then print a timestamp prefixed to every
+ output line. If _flag_ is _false_, then don't print a timestamp.
+
+setWriteDisk(bool flag)
+ If _flag_ is _true_, then create the disk file. If _flag_ is
+ _false_, then don't create the disk file.
+
+
+File: gnash_ref.info, Node: Sound handling in Gnash, Next: Testing, Prev: A
Tour of Gnash, Up: Software Internals
+
+3.2 Sound handling in Gnash
+===========================
+
+When a SWF-file contains audio Gnash uses its sound handlers to play it.
+At the moment there are two sound handlers, but it is likely that more
+will be made.
+
+ There are two different settings related to sound support:
+_pluginsound_ and _sound_. This was done in order to allow the plugin
+to be independently configured, for instance to block sound from
+advertisements.
+
+* Menu:
+
+* Sound types::
+* Sound parsing::
+* Sound playback::
+* The SDL sound backend::
+* The Gstreamer backend::
+* Future audio backends::
+* Detailed description of the Gstreamer backend::
+
+
+File: gnash_ref.info, Node: Sound types, Next: Sound parsing, Up: Sound
handling in Gnash
+
+3.2.1 Sound types
+-----------------
+
+Sounds can be divided into two groups: event-sounds and soundstreams.
+Event-sounds are contained in a single SWF frame, but the playtime can
+span multiple frames. Soundstreams can be (and normally are) divided
+between the SWF frames the soundstreams spans. This means that if a
+gotoframe-action jumps to a frame which contains data for a soundstream,
+playback of the stream can be picked up from there.
+
+
+File: gnash_ref.info, Node: Sound parsing, Next: Sound playback, Prev:
Sound types, Up: Sound handling in Gnash
+
+3.2.2 Sound parsing
+-------------------
+
+When Gnash parses a SWF-file, it creates a sound handler if possible
+and hands over the sounds to it. Since the event-sounds are contained
+in one frame, the entire event-sound is retrieved at once, while a
+soundstream maybe not be completely retrieved before the entire
+SWF-file has been parsed. But since the entire soundstream doesn't need
+to be present when playback starts, it is not necessary to wait.
+
+
+File: gnash_ref.info, Node: Sound playback, Next: The SDL sound backend,
Prev: Sound parsing, Up: Sound handling in Gnash
+
+3.2.3 Sound playback
+--------------------
+
+When a sound is about to be played Gnash calls the sound handler, which
+then starts to play the sound and return. All the playing is done by
+threads (in both SDL and Gstreamer), so once started the audio and
+graphics are not sync'ed with each other, which means that we have to
+trust both the graphic backend and the audio backend to play at correct
+speed.
+
+
+File: gnash_ref.info, Node: The SDL sound backend, Next: The Gstreamer
backend, Prev: Sound playback, Up: Sound handling in Gnash
+
+3.2.4 The SDL sound backend
+---------------------------
+
+The current SDL sound backend has replaced the original sound handler,
+based on SDL_mixer, which by design had some limitations, making it
+difficult to implement needed features such as support for soundstreams.
+The SDL sound backend supports both event-sounds and soundstreams,
+using Gnash's internal ADPCM, and optionally MP3 support, using either
+FFMPEG or LIBMAD. When it receives sound data it is stored without
+being decoded, unless it is ADPCM, which is decoded in the parser. When
+playing, backend relies on a function callback for retrieving output
+sound, which is decoded and re-sampled if needed, and all sound output
+is mixed together. The current SDL sound backend was made since Gnash
+needed a working sound backend as soon as possible, and since the
+gstreamer backend at the time suffered from bugs and/or lack of
+features in gstreamer. The result was the most complete and best sound
+handler so far. The advantages of the SDL sound handler is speed, and
+ease of use, while its only real disadvantage is that it has to be
+compiled with MP3 support, which some Linux distributions will probably
+not like...
+
+
+File: gnash_ref.info, Node: The Gstreamer backend, Next: Future audio
backends, Prev: The SDL sound backend, Up: Sound handling in Gnash
+
+3.2.5 The Gstreamer backend
+---------------------------
+
+The Gstreamer backend, though not complete, supports both soundstreams
+and event-sounds. When receiving sound data it stores it compressed,
+unless if it's ADPCM event-sounds, which it decodes by the parser.
+When the playback starts, the backend sets up a Gstreamer bin
+containing a decoder (and other things needed) and places it in a
+Gstreamer pipeline, which plays the audio. All the sound data is not
+passed at once, but in small chunks, and via callbacks the pipeline
+gets fed. The advantages of the Gstreamer backend is that it supports
+both kinds of sound, it avoids all the legal MP3-stuff, and it should
+be relatively easy to add VORBIS support. The drawbacks are that it has
+longer "reply delay" when starting the playback of a sound, and it
+suffers under some bugs in Gstreamer that are yet to be fixed.
+
+
+File: gnash_ref.info, Node: Future audio backends, Next: Detailed
description of the Gstreamer backend, Prev: The Gstreamer backend, Up: Sound
handling in Gnash
+
+3.2.6 Future audio backends
+---------------------------
+
+It would probably be desirable to make more backends in the future,
+either because other and better backend systems are brought to our
+attention, or perhaps because an internal sound handling is better
+suited for embedded platform with limited software installed.
+
+
+File: gnash_ref.info, Node: Detailed description of the Gstreamer backend,
Prev: Future audio backends, Up: Sound handling in Gnash
+
+3.2.7 Detailed description of the Gstreamer backend
+---------------------------------------------------
+
+Gstreamer uses pipelines, bins and elements. Pipelines are the main
+bin, where all other bins or elements are places. Visually the audio
+pipeline in Gnash looks like this:
+
+
+ ___
+ |Bin|_
+ |___| \
+ ___ \ _____ ____________
+ |Bin|___|Adder|_____|Audio output|
+ |___| |_____| |____________|
+ ___ /
+ |Bin|_/
+ |___|
+
+ There is one bin for each sound which is being played. If a sound is
+played more the once at the same time, multiple bins will be made. The
+bins contains:
+
+
+
+
|source|---|capsfilter|---|decoder|---|aconverter|---|aresampler|---|volume|
+
+ In the source element we place parts of the undecoded sound data, and
+when playing the pipeline will pull the data from the element. Via
+callbacks it is refilled if needed. In the capsfilter the data is
+labeled with the format of the data. The decoder (surprise!) decodes
+the data. The audioconverter converts the now raw sound data into a
+format accepted by the adder, all input to the adder must in the same
+format. The audio re-sampler re-samples the raw sound data into a sample
+accepted by the adder, all input to the adder must in the same sample
+rate. The volume element makes it possible to control the volume of
+each sound.
+
+ When a sound is done being played it emits a End-Of-Stream-signal
+(EOS), which is caught by an event-handler-callback, which then makes
+sure that the bin in question is removed from the pipeline. When a
+sound is told by Gnash to stop playback before it has ended playback,
+we do something (not yet finally implemented), which makes the bin emit
+an EOS, and the event-handler-callback will remove the sound from the
+pipeline. Unfortunately Gstreamer currently has a bug which causes the
+entire pipeline to stop playing when unlinking an element from the
+pipeline; so far no fix is known.
+
+ Gstreamer also contains a bug concerning linking multiple elements to
+the adder in rapid succession, which causes to adder to "die" and stop
+the playback.
+
+
+File: gnash_ref.info, Node: Testing, Next: Adding New ActionScript Class,
Prev: Sound handling in Gnash, Up: Software Internals
+
+3.3 Testing
+===========
+
+Instructions on running tests (*note Running the Tests::) can be found
+in the section on building Gnash.
+
+* Menu:
+
+* Testing Tools::
+* Test Cases::
+* Writing ActionScript Tests::
+* Writing Ming-based self-contained SWF tests::
+* Writing self-contained SWF tests with other compilers::
+* Writing Test Runners::
+
+
+File: gnash_ref.info, Node: Testing Tools, Next: Test Cases, Up: Testing
+
+3.3.1 Testing Tools
+-------------------
+
+Currently Gnash uses three other tools to help with testing. Two of
+these are free compilers for the Flash format. This lets us write
+simple test cases for Gnash to test specific features, and to see how
+the features operate.
+
+ The primary compiler used at this time is Ming (http://ming.sf.net).
+Since release 0.3, _Ming_ includes a command-line compiler, _makeswf_.
+This allows test case development to be done entirely with free tools.
+
+ The other tools are optional. DejaGnu
+(http://www.gnu.org/software/dejagnu) is used to run multiple test
+cases in an automated manner. _DejaGnu_ is used by many other GNU
+(http://www.gnu.org) projects like GCC (http://gcc.gnu.org) and Samba
+(http://www.samba.org).
+
+
+File: gnash_ref.info, Node: Test Cases, Next: Writing ActionScript Tests,
Prev: Testing Tools, Up: Testing
+
+3.3.2 Test Cases
+----------------
+
+ActionScript test cases are located under testsuite/actionscript.all/;
+these are organized in one file for the ActionScript class. Other
+Ming-generated tests are under testsuite/ming-misc.all/; these are
+typically used to test specific tag types. Full movies are located in
+testsuite/movies.all/ and sample movies are found in testsuite/samples/.
+Other directories in testsuite/ are (or shall be) used for other kind
+of tests.
+
+
+File: gnash_ref.info, Node: Writing ActionScript Tests, Next: Writing
Ming-based self-contained SWF tests, Prev: Test Cases, Up: Testing
+
+3.3.3 Writing ActionScript Tests
+--------------------------------
+
+Writing ActionScript tests is very simple. The _makeswf_ compiler makes
+use of the C preprocessor, thus allowing the inclusion of definitions
+for macros and external files. We use these feature to provide common
+utilities for test units.
+
+ Each test unit sets an _rcsid_ variable, includes the _check.as_
+file and performs some checks using the provided macros. Here is an
+example:
+
+
+
+ // This variable will be used by check.as
+ // to show testcase info as part of the test runs.
+ rcsid="Name and version of this testcase, usually the RCS id";
+
+ #include "check.as"
+
+ // Test object creation
+ check(new Object() instanceOf Object);
+
+ // Test parseInt
+ check(isNaN(parseInt('none')));
+
+ // Test assignment
+ var a = 1;
+ check_equals(a, 1);
+
+ // .. your tests here ...
+
+ The check(expr) macro will _trace_ PASSED or FAILED together with
+the expression being evaluated and the line number of the check. This
+is the format expected by DejaGnu.
+
+ The _check_equals(obtained, expected)_ macro uses equality operator
+_==_ to check for equality. When possible, use of the _check_equals()_
+macro is preferred over _check()_ because it shows what the actual
+result was in case of a failure.
+
+ Additionally, the check.as file provides a transparent way to send
+results to a TextField rather then using trace. This is very useful
+when you use a flash player without tracing support.
+
+ Test units are built by running _make TestName-v#.swf_. This will
+use TestName.as as source and the value of # as target version.
+Allowed target version are from 5 to 8 (inclusive).
+
+ Note that if you get a syntax error from the compiler, the line
+number will refer to the pre-processed file. This file is called
+_TestName.as.pp_ or _TestName-v#.swf.frame#.pp_ (depending on Ming
+version) and it's not thrown away by _makeswf_ to make debugging easier.
+
+ Sometimes an expression is only supported by a specific SWF version,
+or it's evaluated differently by different SWF versions. For this
+purpose the framework provides an OUTPUT_VERSION macro that you can use
+to switch code based on output version. For example:
+
+
+
+ #if OUTPUT_VERSION >= 7
+ check(_root.getSWFVersion == OUTPUT_VERSION);
+ #endif
+
+
+File: gnash_ref.info, Node: Writing Ming-based self-contained SWF tests,
Next: Writing self-contained SWF tests with other compilers, Prev: Writing
ActionScript Tests, Up: Testing
+
+3.3.4 Writing Ming-based self-contained SWF tests
+-------------------------------------------------
+
+Ming-based test cases are located in testsuite/misc-ming.all and
+contain a test generator and a test runner. The test generator
+(usually a C program) is used to produce the SWF file, while the test
+runner (a C++ program) will run it using a MovieTester class. Note
+that only the test generator needs Ming, not the test runner, so if
+Ming isn't installed on the user's host, the test cases can still be
+run as long as SWF has been distributed.
+
+ Producing tests using Ming has the advantage that you can easily see
+and modify the full source code for the SWF movie, and you can use some
+facilities (*note Using Ming-based test generators facilities::)
+provided by the Gnash testing framework to easily run tests.
+
+ For generic Ming API documentation, see http://www.libming.org
+(http://www.libming.org/).
+
+* Menu:
+
+* Using Ming-based test generators facilities::
+
+
+File: gnash_ref.info, Node: Using Ming-based test generators facilities, Up:
Writing Ming-based self-contained SWF tests
+
+3.3.4.1 Using Ming-based test generators facilities
+...................................................
+
+Ming-based test generator facilities, which might be moved into a
+loadable SWF in the future, can be currently used by your test
+generator by including the ming_utils.h file and calling the
+appropriate functions.
+
+ The most useful facility provided for Ming-based SWF test generators
+is a Dejagnu-like TestState ActionScript class. In order to use this
+facility you must call 'add_dejagnu_functions()' right after Movie
+creation. The function takes an SWFMovie object and some parameters
+specifying depth and location of the "visual" trace textfield; it
+instantiates a global 'TestState' ActionScript object to keep track of
+test's state.
+
+ You will _not_ need to directly invoke the TestState object created
+by the 'add_dejagnu_functions()' routine, rather you will be using C
+macros hiding its complexity:
+
+
+
+ check(SWFMovie mo, const char* expr)
+
+ Evaluate an ActionScript expression.
+
+ xcheck(SWFMovie mo, const char* expr)
+
+ Evaluate an ActionScript expression.
+ A failure is expected
+ (for cases where the call exposes a known bug).
+
+ check_equals(SWFMovie mo, const char* obtained, const char* expected)
+
+ Evaluate an ActionScript expression against an expected output.
+
+ xcheck_equals(SWFMovie mo, const char* obtained, const char* expected)
+
+ Evaluate an ActionScript expression against an expected output.
+ A failure is expected (for cases where the call exposes a known
bug).
+
+ print_tests_summary(SWFMovie mo)
+
+ This will print a summary of tests run, and should be
+ called as the last step in your SWF generator.
+
+ Test cases generated using Ming and the provided facilities (*note
+Using Ming-based test generators facilities::) will be self-contained,
+which means they can be used as tests by simply running them with
+whatever Player you might have. Any 'check' or 'check_equals' result
+will be both traced and printed in a textfield. You can use 'gprocessor
+-v' to have Gnash use them as tests.
+
+ See section Writing Test Runners (*note Writing Test Runners::) for
+information about writing SWF test runners.
+
+
+File: gnash_ref.info, Node: Writing self-contained SWF tests with other
compilers, Next: Writing Test Runners, Prev: Writing Ming-based
self-contained SWF tests, Up: Testing
+
+3.3.5 Writing self-contained SWF tests with other compilers
+-----------------------------------------------------------
+
+If you want/need to use a different compiler for your test cases
+(there's plenty of open source tools for generating SWF out there), you
+can still make use of a loadable SWF utility provided as part of the
+Gnash testsuite to let your test consistent with the rest of the suite.
+
+ The loadable module is called _Dejagnu.swf_ and is built during
+_make check_ under testsuite/misc-ming.all. In order to use it you will
+need to load it into your SWF. We currently load it with an IMPORT tag
+for our ActionScript based test cases, but you can probably also use
+loadMovie or whatever works in the target SWF you're generating. Just
+make sure that the module is initialized before using it. You can check
+this by inspecting the _dejagnu_module_initialized_ variable, which will
+be set to 'true' when all initialization actions contained in the
+_Dejagnu.swf_ file are executed.
+
+ Once the module is loaded you will be able to invoke the following
+functions, all registered against the __root_ sprite (effects of
+__lockroot_ untested):
+
+
+
+ check(expression, [message]);
+
+ Evaluate the expression.
+ Trace result (PASSED: expression / FAILED: expression).
+ If fails, *visually* trace the failure.
+ If second argument is given, it will be used instead of
+ 'expression' for printing results.
+
+ check_equals(obtained, expected)
+
+ Evaluate an expression against an expected output.
+ Trace result (PASSED: obtained == expected / FAILED: expected X,
obtained Y)
+ If fails, *visually* trace the failure.
+
+ xcheck(expression, [message]);
+
+ Evaluate the expression.
+ Trace result (XPASSED: expression / XFAILED: expression).
+ If fails, *visually* trace the failure.
+ If second argument is given, it will be used instead of
+ 'expression' for printing results.
+
+ xcheck_equals(obtained, expected)
+
+ Evaluate an expression against an expected output.
+ Trace result (XPASSED: obtained == expected / XFAILED: expected X,
obtained Y)
+ If fails, *visually* trace the failure.
+
+ note(string)
+
+ Print string, both as debugging and *visual* trace.
+
+ totals()
+
+ Print a summary of tests run, both as debugging and *visual* traces.
+
+ Visual traces are lines of text pushed to a textarea defined by the
+_Dejagnu.swf_ module. The textarea is initially placed at _0, 50_ and is
+_600x800_ in size. You can resize/move the clip after loading it. Also,
+you can completely make the clip invisible if that bothers you. The
+important thing is the _debugging_ trace (call to the trace function).
+The latter will be used by the testing framework.
+
+ See section Writing Test Runners (*note Writing Test Runners::) for
+information about writing a test runners for your self-contained tests.
+
+
+File: gnash_ref.info, Node: Writing Test Runners, Prev: Writing
self-contained SWF tests with other compilers, Up: Testing
+
+3.3.6 Writing Test Runners
+--------------------------
+
+Test runners are executables that run one or more tests, writing
+results in Dejagnu form to standard output.
+
+ The Dejagnu form uses a standard set of labels when printing test
+results. These are:
+
+Label Meaning
+PASSED The test succeeded.
+FAILED The test failed.
+XPASSED The test succeeded, but was
+ expected to fail.
+XFAILED The test failed, and was expected
+ to fail.
+UNRESOLVED The results of the test could not
+ be automatically parsed.
+UNTESTED This test case is not complete.
+UNSUPPORTED The test case relies on a
+ conditional feature which is not
+ present in your environment.
+
+ The following labels may also appear:
+
+Label Meaning
+ERROR There was a serious error in
+ running the test.
+WARNING There may have been a problem with
+ running the test.
+NOTE There was some additional
+ information given about the test.
+
+* Menu:
+
+* Using the generic test runner for self-contained SWF tests::
+* Writing Movie testers::
+
+
+File: gnash_ref.info, Node: Using the generic test runner for self-contained
SWF tests, Next: Writing Movie testers, Up: Writing Test Runners
+
+3.3.6.1 Using the generic test runner for self-contained SWF tests
+..................................................................
+
+The simplest test runner is one that simply invokes Gnash in verbose
+mode against a self-contained SWF test movie. Self-contained SWF test
+movies are the ones that print the PASSED/FAILED etc. lines using
+ActionScript (traces). By invoking Gnash in verbose mode this movie
+will behave as a compliant "Test Runner".
+
+ A generator for simple test runners can be found in
+_testsuite/generic-testrunner.sh_. The script can be invoked by
+passing it _$(top_builddir)_ as the first argument and the name of the
+SWF file (without the path) as the second argument. This will create a
+specific runner for your test in the current build directory. A simple
+Makefile.am rule for doing this follows:
+
+
+ MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+ sh $(srcdir)/../generic-testrunner.sh $(top_builddir) MyTest.swf >
$@
+ chmod +x $@
+
+ By default, the generated test runner will play the movie up to the
+last frame. If you want the movie to be played more then once (maybe
+because you're exactly testing loop features) you can use the -r switch
+to the generic-testrunner.sh call. The following will create a runner
+playing the movie twice:
+
+
+ MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+ sh $(srcdir)/../generic-testrunner.sh -r2 $(top_builddir)
MyTest.swf > $@
+ chmod +x $@
+
+ In case your test movie stops before the last frame, or you want to
+control the exact number of times to call the frame advancement
+routine, you can use the -f switch to control that.
+
+
+ MyTest-Runner: $(srcdir)/../generic-testrunner.sh MyTest.swf
+ sh $(srcdir)/../generic-testrunner.sh -f10 $(top_builddir)
MyTest.swf > $@
+ chmod +x $@
+
+When both -f and -r are given, the first exit condition reached will
+take effect.
+
+
+File: gnash_ref.info, Node: Writing Movie testers, Prev: Using the generic
test runner for self-contained SWF tests, Up: Writing Test Runners
+
+3.3.6.2 Writing Movie testers
+.............................
+
+There are some parts of Gnash that can NOT be tested by only using
+ActionScript tests. Examples include: frame advancements, actual
+actions execution, gui events and so on.
+
+ In this case you might want to use the MovieTester class to
+implement a C++ test runner. Be aware that you can _mix_ tests in the
+MovieTester-based class with _self-contained_ tests in the SWF file as
+long as you activate verbosity for the debug logfile. This is done, for
+example, for the DefineEditTextVariableNameTest.swf file. The
+corresponding test runner (DefineEditTextVariableNameTest-Runner) is a
+C++ runner based on MovieTester class. If you run the runner you see
+two kinds of test results: the ones coming from the ActionScript
+engine, and the ones coming from the test runner. You can distinguish
+between the two because the former contains an additional timestamp and
+the latter does not. Also, you'll see two final summaries for the two
+test sets. The 'make check' rule, which uses the testsuite/simple.exp
+output parser as its work-horse, will count test results from both test
+sets.
+
+ Movie testers are executables which load an SWF, generate events
+(both user or system) on it, and check its state using a standard
+interface.
+
+ To help this process a MovieTester class is defined in the
+testsuite/MovieTester.{h,cpp} files; see Doxygen documentation for more
+information.
+
+ Note that you do NOT need access to the SWF source code in order to
+implement a Movie tester for it. Some knowledge about the expected
+behavior suffices.
+
+
+File: gnash_ref.info, Node: Adding New ActionScript Class, Prev: Testing,
Up: Software Internals
+
+3.4 Adding New ActionScript Class
+=================================
+
+In this document, the term 'ActionScript class' refers to the C++ class
+which is instantiated by Gnash when some ActionScript code instantiates
+a corresponding class. The C++ class stores instance data and
+implements the methods which are called on the object in the
+ActionScript code.
+
+ Adding a new ActionScript class is relatively simple, but the
+process is complicated by the fact that the interface has evolved over
+time and the current code base represents several different formats.
+This document describes the current interface. The Boolean class
+should be considered the authoritative example of a modern ActionScript
+class.
+
+ ActionScript classes contain a header file and a C++ implementation.
+The name is usually the name of the class as it is called in the
+ActionScript specifications; for instance _Boolean.cpp_ for the Boolean
+class.
+
+* Menu:
+
+* Prototype::
+* Declaration::
+* Instantiation::
+* Methods::
+* Dynamic Properties::
+* The as_value Object Type::
+* Object ActionScript Class::
+
+
+File: gnash_ref.info, Node: Prototype, Next: Declaration, Up: Adding New
ActionScript Class
+
+3.4.1 Prototype
+---------------
+
+In ActionScript, a prototype is a base object which contains all the
+methods that an instantiated object will contain. In short, it
+contains every part of the class except for the portions dealing with
+the storage of instance data.
+
+ In Gnash, the prototype of an ActionScript object is implemented as
+an _as_object_. At startup, the methods and properties of the
+ActionScript class are attached to the _as_object_. The following
+example demonstrates how methods can be attached:
+
+
+ static void
+ attachBooleanInterface(as_object& o) {
+ o.init_member("toString", new builtin_function(boolean_tostring));
+ o.init_member("valueOf", new builtin_function(boolean_valueof));
+ }
+
+ Static properties can also be added to the ActionScript prototype
+(dynamic properties (*note Dynamic Properties::) are addressed later).
+They are attached in a similar way:
+
+
+ o.init_member("myProperty", as_value("HelloWorld"));
+
+ Properties which have been added in this manner can be directly
+accessed in ActionScript code without a function call, as this piece of
+ActionScript code compiled by Ming's _makeswf_ compiler demonstrates:
+
+
+ // Get the value of the myProperty property
+ if (node.myProperty == "HelloWorld") {
+ trace("MATCHED");
+ }
+
+
+File: gnash_ref.info, Node: Declaration, Next: Instantiation, Prev:
Prototype, Up: Adding New ActionScript Class
+
+3.4.2 Declaration
+-----------------
+
+A new class should derive from _as_object_, which is the base class of
+every ActionScript object in Gnash.
+
+
+File: gnash_ref.info, Node: Instantiation, Next: Methods, Prev:
Declaration, Up: Adding New ActionScript Class
+
+3.4.3 Instantiation
+-------------------
+
+When a new object is needed, instance data is added to the methods and
+properties inherited from the prototype.
+
+ The init method should be called in the constructor in _Global.cpp_,
+where all other ActionScript classes are similarly referenced. This
+method constructs a prototype, which is implemented as an _as_object_.
+In addition, the method registers the constructor to be used for future
+object creation, and attaches methods and properties to the prototype.
+
+
+File: gnash_ref.info, Node: Methods, Next: Dynamic Properties, Prev:
Instantiation, Up: Adding New ActionScript Class
+
+3.4.4 Methods
+-------------
+
+Every method you implement and attach (*note Prototype::) will receive
+an _fn_call_ data structure as an argument when it is called.
+
+* Menu:
+
+* Accessing Arguments::
+* Returning a Value to ActionScript::
+* Additional fn_call Members::
+
+
+File: gnash_ref.info, Node: Accessing Arguments, Next: Returning a Value to
ActionScript, Up: Methods
+
+3.4.4.1 Accessing Arguments
+...........................
+
+The arguments stored in _fn_call_ should be accessed using _arg()_. For
+instance, the first element can be popped with _fn.arg(0)_.
+
+ The element popped off the stack is an _as_value_ object (*note The
+as_value Object Type::).
+
+
+File: gnash_ref.info, Node: Returning a Value to ActionScript, Next:
Additional fn_call Members, Prev: Accessing Arguments, Up: Methods
+
+3.4.4.2 Returning a Value to ActionScript
+.........................................
+
+The return value should be an _as_value_ object (*note The as_value
+Object Type::). For example:
+
+
+ return as_value('Goodbye, cruel world.');
+
+
+File: gnash_ref.info, Node: Additional fn_call Members, Prev: Returning a
Value to ActionScript, Up: Methods
+
+3.4.4.3 Additional fn_call Members
+..................................
+
+There are two other useful members of the _fn_call_ structure, namely
+_this_ptr_ and _nargs_. The former points to the class which is
+invoking this method, while the latter is a count of the number of
+arguments in the stack (*note Accessing Arguments::).
+
+ You may also see instances of the _env_ pointer being used. This
+is being deprecated. Instances which could be replaced with _arg()_
+(*note Accessing Arguments::) are already deprecated; other uses will
+be deprecated in the near future.
+
+ Beyond the _arg() (*note Accessing Arguments::)_ method, there is
+one method of note. _dump_args()_ can be used in debugging to output
+the entire argument stack.
+
+
+File: gnash_ref.info, Node: Dynamic Properties, Next: The as_value Object
Type, Prev: Methods, Up: Adding New ActionScript Class
+
+3.4.5 Dynamic Properties
+------------------------
+
+This section describes accessors to dynamic properties. Read-only
+properties are described in the prototype (*note Prototype::) section.
+
+ Accessors should be written as a single get/set method. Previously
+this was done by overriding _get_member()_ and _set_member()_, but this
+practice is deprecated.
+
+ The accessor is written so that it sets the property if it is called
+with an argument, and puts the property in the _fn_call_ (*note
+Methods::) result pointer (*note Returning a Value to ActionScript::).
+For instance:
+
+
+ void
+ MyClass::myProperty_getset(const fn_call& fn) {
+ boost::intrusive_ptr<MyClass> ptr = ensureType<MyClass>(fn.this_ptr);
+
+ // setter
+ if ( fn.nargs > 0 ) {
+ bool h = fn.arg(0).to_bool();
+ ptr->MyMethod(h);
+ return;
+ }
+
+ // getter
+ bool h = ptr->MyMethod();
+ fn.result->set_bool(h);
+ }
+
+ It has not yet been decided whether properties should be set in the
+exported interface (*note Prototype::) or attached to instances of the
+class. A property is attached in the following manner:
+
+
+ boost::intrusive_ptr<builtin_function> gettersetter;
+ gettersetter = new builtin_function(&MyClass::myProperty_getset, NULL);
+ o.init_property("myProperty", *gettersetter, *gettersetter);
+
+
+File: gnash_ref.info, Node: The as_value Object Type, Next: Object
ActionScript Class, Prev: Dynamic Properties, Up: Adding New ActionScript
Class
+
+3.4.6 The as_value Object Type
+------------------------------
+
+The _as_value_ class is used throughout the interpreter to create
+generic objects to hold data.
+
+* Menu:
+
+* Data Types::
+* Determining the Type::
+* Fetching the Value::
+* Setting the Value and Type::
+* Further Reading::
+
+
+File: gnash_ref.info, Node: Data Types, Next: Determining the Type, Up: The
as_value Object Type
+
+3.4.6.1 Data Types
+..................
+
+The following data types are supported: _NULLTYPE_, _BOOLEAN_, _STRING_,
+_NUMBER_, _OBJECT_, _AS_FUNCTION_, and _MOVIECLIP_ (sprite). The type
+_C_FUNCTION_ is being deprecated.
+
+
+File: gnash_ref.info, Node: Determining the Type, Next: Fetching the Value,
Prev: Data Types, Up: The as_value Object Type
+
+3.4.6.2 Determining the Type
+............................
+
+Several methods allow you to determine if a value stored in _as_value_
+is of a specific type. These follow the form of _is_TYPE_, for example
+_is_as_function()_ and _is_number()_. In general, the type names match
+the data types (*note Data Types::) listed above, with the exception of
+the type _MOVIECLIP_ which has a method _is_sprite()_.
+
+
+File: gnash_ref.info, Node: Fetching the Value, Next: Setting the Value and
Type, Prev: Determining the Type, Up: The as_value Object Type
+
+3.4.6.3 Fetching the Value
+..........................
+
+Another set of methods will return a representation of the value as a
+particular type. They follow the _to_TYPE_ naming convention. Examples
+are _to_number()_ and _to_bool()_. The type names are as listed (*note
+Data Types::) earlier, except for _MOVIECLIP_, which uses _to_sprite()_.
+
+
+File: gnash_ref.info, Node: Setting the Value and Type, Next: Further
Reading, Prev: Fetching the Value, Up: The as_value Object Type
+
+3.4.6.4 Setting the Value and Type
+..................................
+
+Finally, there is the _set_TYPE_ series of methods. They change the
+type to the type specified in the method name, and set the value to the
+one given as an argument. It is also possible to accomplish the same
+thing with the _=_ operator. Again, type names match those named
+earlier (*note Data Types::), except in the case of _MOVIECLASS_. Its
+method is called _set_sprite()_.
+
+
+File: gnash_ref.info, Node: Further Reading, Prev: Setting the Value and
Type, Up: The as_value Object Type
+
+3.4.6.5 Further Reading
+.......................
+
+Please refer to _as_value.h_ or the Doxygen documentation (see
+'Processing The Documentation' in the Gnash manual for instructions on
+generating documents with Doxygen) for more information about which
+methods are available for the _as_value_ object.
+
+
+File: gnash_ref.info, Node: Object ActionScript Class, Prev: The as_value
Object Type, Up: Adding New ActionScript Class
+
+3.4.7 Object ActionScript Class
+-------------------------------
+
+This class implements an Object object.
+
+* Menu:
+
+* The Methods of the Class::
+* The Properties of the Object Class::
+* Object Class Conformance::
+
+
+File: gnash_ref.info, Node: The Methods of the Class, Next: The Properties
of the Object Class, Up: Object ActionScript Class
+
+3.4.7.1 The Methods of the Class
+................................
+
+addProperty()
+
+registerClass()
+
+toString()
+
+unwatch()
+
+valueOf()
+
+watch()
+
+Sharedclear()
+
+Sharedflush()
+
+SharedgetLocal()
+
+SharedgetSize()
+
+
+File: gnash_ref.info, Node: The Properties of the Object Class, Next: Object
Class Conformance, Prev: The Methods of the Class, Up: Object ActionScript
Class
+
+3.4.7.2 The Properties of the Object Class
+..........................................
+
+constructor
+
+__proto__
+
+__resolve
+
+Shareddata
+
+SharedonStatus
+
+
+File: gnash_ref.info, Node: Object Class Conformance, Prev: The Properties
of the Object Class, Up: Object ActionScript Class
+
+3.4.7.3 Object Class Conformance
+................................
+
+Class Name Conformance
+addProperty() This method has an unknown status.
+registerClass() This method has an unknown status.
+toString() This method has an unknown status.
+unwatch() This method has an unknown status.
+valueOf() This method has an unknown status.
+watch() This method has an unknown status.
+Sharedclear() This method has an unknown status.
+Sharedflush() This method has an unknown status.
+SharedgetLocal() This method has an unknown status.
+SharedgetSize() This method has an unknown status.
+constructor This property has an unknown
+ status.
+__proto__ This property has an unknown
+ status.
+__resolve This property has an unknown
+ status.
+Shareddata This property has an unknown
+ status.
+SharedonStatus This property has an unknown
+ status.
+
+
+File: gnash_ref.info, Node: Reporting Bugs, Next: Gnash Extensions, Prev:
Software Internals, Up: Top
+
+4 Reporting Bugs
+****************
+
+The Gnash project relies on the community of Gnash users to test the
+player, feedback is critical to any successful project. Not only does
+it let us know that people use Gnash, but it helps us understand the
+community's needs. Gnash uses a bug tracker on
+`http://savannah.gnu.org' to manage these reports.
+
+ When filing a report, please follow the guidelines below. The better
+your bug report is, the easier it will be for the developers to address
+the issue. Bug reports without enough information will initially be
+asked to provide this information anyway. Adding critical details, like
+the Operating System you are on, its version, and any relevant error
+messages from Gnash that you get.
+
+* Menu:
+
+* Get a Fresh Binary Package::
+* Determine if the bug was previously reported::
+* Review the bug writing guidelines::
+* Filing a bug report::
+
+
+File: gnash_ref.info, Node: Get a Fresh Binary Package, Next: Determine if
the bug was previously reported, Up: Reporting Bugs
+
+4.1 Get a Fresh Binary Package
+==============================
+
+For starters, it's a good idea to obtain a copy of the latest snapshot.
+Although Gnash is primarily released as source, the Gnash build
+infrastructure allows the automated building of binary packages. Often
+the version of Gnash as packaged by a GNU/Linux or BSD distribution is
+based on the last official release, which could be months out of date.
+It is helpful if this is the case to try a newer packaged build of
+Gnash.
+
+ You can get a fresh binary package of Gnash, as well as recent
+source packages from http://www.getgnash.org/packages
+(http://www.getgnash.org/packages/).
+
+
+File: gnash_ref.info, Node: Determine if the bug was previously reported,
Next: Review the bug writing guidelines, Prev: Get a Fresh Binary Package,
Up: Reporting Bugs
+
+4.2 Determine if the bug was previously reported
+================================================
+
+Search the Gnash bug tracker
+(https://savannah.gnu.org/bugs/?group=gnash) to see if the bug has
+already been identified.
+
+ If the issue has already been reported, you should not file a bug
+report. However, you may add some additional information to the ticket
+if you feel that it will be beneficial to the developers. For
+instance, if someone reported a memory issue on Ubuntu GNU/Linux, and
+you noticed the same problem on OpenBSD, your stacktrace would be
+useful. Conversely, adding a "me too" note to a feature request is not
+helpful.
+
+
+File: gnash_ref.info, Node: Review the bug writing guidelines, Next: Filing
a bug report, Prev: Determine if the bug was previously reported, Up:
Reporting Bugs
+
+4.3 Review the bug writing guidelines
+=====================================
+
+A good bug report should be precise, explicit, and discrete. This
+means that there should be just one bug per ticket, and that a ticket
+should contain the following information:
+
+ * An overview of the problem;
+
+ * Instructions on how to replicate the bug;
+
+ * A description of what happened when you performed the steps to
+ replicate the bug, and what you expected to happen;
+
+ * Your system information: operating system name and version, as
+ well as the versions of major development dependencies;
+
+ * The release number or checkout timestamp for the version of Gnash
+ where you observe the problem;
+
+ * The file `config.log', which should be attached as a file;
+
+ * A descriptive title.
+
+ Include any additional information that you feel might be useful to
+the developers.
+
+
+File: gnash_ref.info, Node: Filing a bug report, Prev: Review the bug
writing guidelines, Up: Reporting Bugs
+
+4.4 Filing a bug report
+=======================
+
+After following the steps described above, you can file a bug report at
+`https://savannah.gnu.org/bugs/?group=gnash'.
+
+
+File: gnash_ref.info, Node: Gnash Extensions, Next: RTMP Protocol, Prev:
Reporting Bugs, Up: Top
+
+5 Gnash Extensions
+******************
+
+Gnash supports extending the Flash specification by creating custom
+ActionScript classes that are compiled code, as opposed to the existing
+method of defining custom classes as ActionScript. Executing compiled
+code has many performance benefits over having to interpret the byte
+stream of the ActionScript opcodes.
+
+ I can already hear people complaining now about the concept of
+extending Flash, so this in no way affects Gnash's ability to play
+Flash movies when functioning as a browser plugin. Gnash's goal is
+still to function in a way that is compatible with the current
+proprietary Flash player.
+
+ But at the same time, we see Flash as the ideal scripting language
+for a digital multi-media streaming environment. There are many
+resources for Flash movie creators for widgets, higher level APIs, all
+sorts of desirable things. But for those of use committed to using free
+software tools for Flash, our options are very limited.
+
+ Rather than launching a multi-year project to duplicate all classes
+in the commercial Flash IDE, it's much more efficient to use existing
+development libraries much like Python or Perl do. The extension
+mechanism in Gnash allows wrappers to be created for any C or C++
+development library. Unlike the proprietary Flash IDE, which compiles
+all the extension libraries into byte codes from ActionScript, the
+support is moved to the player side. Movies with all of the goodies of
+the proprietary IDE in them play in Gnash just fine, as it's all just
+byte codes by then.
+
+ This trick works because until Flash player version 9, all the
+ActionScript class names and methods are passed as ASCII strings into
+the Flash movie. So the Gnash Virtual Machine just loads the extension
+file if that class name is invoked in the movie. All extension files
+specify the class name and methods it implements in an identical style
+as adding any new ActionScript class. The advantage is the class itself
+is compiled code, and runs much faster than the equivalent byte codes
+which all have to be interpreted..
+
+* Menu:
+
+* Creating A New Extension::
+* Debugging An Extension::
+* Included Extensions::
+
+
+File: gnash_ref.info, Node: Creating A New Extension, Next: Debugging An
Extension, Up: Gnash Extensions
+
+5.1 Creating A New Extension
+============================
+
+Each new extension should live in it's own directory. The extensions
+included in Gnash are all in the _gnash/extensions_ directory. Creating
+an extension requires a Makefile.am,
+
+ If you are adding this extension to the Gnash source tree itself,
+then you need to make two changes to add the new extension.
+
+ The first change is to add the directory to the list in
+extensions/Makefile.am. This can be done either by adding the new
+directory to the SUBDIRS setting, or by wrapping it in a conditional
+test.
+
+ The other change is to add it to the AC_OUTPUT list in
+_configure.ac_ so the new directory will be configured along with the
+rest of Gnash.
+
+ Each extension should have an ActionScript source file included that
+tests the new class, and this file should be referenced in the new
+Makefile.am in the _check_PROGRAMS_ variable so that "make check" works.
+
+ When creating an extension that is a wrapper for an existing
+development library API, it's often better to make this a thin layer,
+than to get carried away with creating beautiful abstractions.
+Higher-level classes that offer a lot of new functionality are fine,
+but is different than wrapping a library so it can be used from within
+Gnash.
+
+* Menu:
+
+* Crafting an Extension::
+
+
+File: gnash_ref.info, Node: Crafting an Extension, Up: Creating A New
Extension
+
+5.1.1 Crafting an Extension
+---------------------------
+
+All extensions have the same requirements, namely setting up a few
+defined function callbacks, which the Gnash VM then uses to do the
+right thing. The initial two function callbacks are for handling the
+interface of the newly created object so that Gnash can find and use it.
+
+ The first function is commonly called _attachInterface_, and this
+sets the other function callbacks for all the methods this class
+supports. The method callbacks are attached to the parent class by
+using _init_member()_ to set a C function pointer to the string value
+used in the Flash movie.
+
+
+ // Attach DummyClass 'func1' and 'func2' methods to the given object
+ static void
+ attachInterface(as_object& obj) {
+ obj.init_member("func1", &ext_func1);
+ obj.init_member("func2", &ext_func2);
+ }
+
+ The second function is commonly called _getInterface()_, and this
+returns a pointer to a static prototype of the class. Gnash uses
+garbage collection for ActionScript objects so you need to register the
+static with the VM to give it a chance to be marked as reachable.
+
+
+ static as_object*
+ getInterface()
+ {
+ static boost::intrusive_ptr<as_object> o;
+ if (o == NULL) {
+ o = new as_object();
+ VM::get().addStatic(o);
+ attachInterface(*o);
+ }
+ return o.get();
+ }
+
+ This is the callback that gets executed when constructing a new
+object for the VM. In this example we'll assume the new ActionScript
+class is called _DummyExt_, and has two methods, _func1_ and _func2_.
+
+
+ static as_value
+ dummyext_ctor(const fn_call& fn)
+ {
+ DummyExt *obj = new DummyExt(); // will setup prototypes
+
+ return as_value(obj);
+ }
+
+ The trick for the above simple constructor to work is that class
+appartenence is setup in the C++ DummyExt constructor itself, which
+should derive from as_object and construct the base passing it the
+interface (prototype) of it's class.
+
+
+ class DummyExt : public as_object
+ {
+ public:
+ DummyExt()
+ :
+ as_object(getInterface()) // returns the static prototype
+ {}
+
+ };
+
+ Initialize the extension. This is looked for by the extension
+handling code in each extension, and is executed when the extension is
+loaded. This is the main entry point into the extension. This function
+can be found because the prefix of _dummyext_, which also matches the
+file name of the extension. Gnash uses the name of the extension file
+itself when looking for the init function.
+
+
+ extern "C" {
+ void
+ dummyext_class_init(as_object &obj)
+ {
+ static builtin_function* cl=NULL;
+ if (!cl)
+ {
+ // Create a builtin function using the given
constructor
+ // to instanciate objects and exporting the given
interface
+ cl = new builtin_function(&dummyext_ctor, getInterface());
+ VM::get().addStatic(cl); // will forbid to collect the class
+ }
+
+ obj.init_member("DummyExt", cl);
+ }
+ } // end of extern C
+
+ The callbacks are all C functions. Like all the other code that
+implements ActionScript, parameters to the function are passed in using
+the _fn_call_ data structure. The return code, if any, is also returned
+using this data structure. _this_ptr_ is the object that the method is
+a member of.
+
+
+ // Creates a new button with the label as the text.
+ as_value func1(const fn_call& fn) {
+ // Following line will ensure 'func1' is called for a
DummyExt instance,
+ // or would throw an exception which should behave as if we
returned the
+ // undefined value.
+ boost::intrusive_ptr<DummyExt> ptr =
ensureType<DummyExt>(fn.this_ptr);
+
+ if (fn.nargs > 0) {
+ std::string label = fn.arg(0).to_string();
+ bool ret = ptr->dummy_text_label(label);
+ return as_value(ret);
+ }
+ }
+
+
+File: gnash_ref.info, Node: Debugging An Extension, Next: Included
Extensions, Prev: Creating A New Extension, Up: Gnash Extensions
+
+5.2 Debugging An Extension
+==========================
+
+As extensions are loaded dynamically at runtime, debugging one can be
+difficult. You can use GDB, but you have the problem of not being able
+to set a breakpoint in Gnash until _after_ the extension has been
+loaded into Gnash's VM. The easy solution is to use the Gnash debugger.
+
+ You can insert these few lines in any file that you wish to manually
+start the debugger. Once at the console, you can attach GDB to the
+process. Then you can set breakpoints, etc... and you are at the point
+of execution where the console was started. To then continue playing
+the movie, type the _c_ (for continue) command to the Gnash console.
+
+
+ // Get the debugger instance
+ static Debugger& debugger = Debugger::getDefaultInstance();
+
+ // Enable the debugger
+ debugger.enabled(true);
+ // Stop and drop into a console
+ debugger.console();
+
+ You can also resort to the time honored technique of creating a loop
+before the point you want to set a breakpoint for. Gnash will stop
+playing the movie at this point, and then you can externally attach GDB
+to the running process, or type _^C_ to drop into the GDB command
+console.
+
+
+ bool stall = true;
+ while (stall) {
+ sleep 1;
+ }
+
+ Once you have set the breakpoints you want, reset the value of the
+_stall_ variable to break out of the loop, and the Flash movie will
+then continue playing.
+
+
+ (gdb) set variable stall = false;
+ continue
+
+
+File: gnash_ref.info, Node: Included Extensions, Prev: Debugging An
Extension, Up: Gnash Extensions
+
+5.3 Included Extensions
+=======================
+
+Gnash has some extensions included in the distribution. This is mostly
+because they were written by the Gnash team. Extensions can be external
+to gnash, Gnash needs no compiled in knowledge to load an extension
+file.
+
+* Menu:
+
+* Gtk Extension::
+* File I/O Extension::
+* MySQL Extension::
+
+
+File: gnash_ref.info, Node: Gtk Extension, Next: File I/O Extension, Up:
Included Extensions
+
+5.3.1 Gtk Extension
+-------------------
+
+The GTK ActionScript class follows the same API as Gtk2, even down to
+the same arguments to the same function names. This means you're
+actually programming GTK,you're just using ActionScript instead of
+python, perl, or C. This extension makes it possible to write Flash
+movies that use the Gtk2 widgets for user interface components.
+
+window_new
+ Create a new window.
+
+signal_connect
+ Add an event handler to a widget.
+
+container_set_border_width
+ Set the width of the window border.
+
+button_new_with_label
+ Create a new button and give it the specified label.
+
+signal_connect_swapped
+ Swap signals. Commonly used for _delete_ event handling.
+
+container_add
+ Add one widget to another as a child.
+
+widget_show
+ Display the widget on the screen.
+
+main
+ Start the main GTK event loop. This function does not return.
+
+
+File: gnash_ref.info, Node: File I/O Extension, Next: MySQL Extension,
Prev: Gtk Extension, Up: Included Extensions
+
+5.3.2 File I/O Extension
+------------------------
+
+Flash movies are traditionally forbidden from accessing the filesystem,
+but this may be necessary for some embedded applications. Especially in
+the case of a user console, currently there is no way to get input into
+a Flash movie but through a TextField.
+
+fopen
+ Open the file.
+
+fread
+ Read a series of bytes from the opened file.
+
+fgetc
+ Read a single byte from the opened file.
+
+fgets
+ Read a single line until a Carriage Return from the opened file.
+
+gets
+ Read a single line from the standard in.
+
+getchar
+ Read a single character from the standard in.
+
+fwrite
+
+fputc
+ Write a single character to the opened file.
+
+fputs
+ Write a single line to the opened file.
+
+puts
+ Write a single line to standard out..
+
+putchar
+ Write a single character to standard out..
+
+fflush
+ Flush the current opened file to disk.
+
+fseek
+ Seek to a location within the opened file.
+
+ftell
+ Report the current position within the opened file.
+
+fclose
+ Close the opened file.
+
+
+File: gnash_ref.info, Node: MySQL Extension, Prev: File I/O Extension, Up:
Included Extensions
+
+5.3.3 MySQL Extension
+---------------------
+
+The MySQL ActionScript class follows the same API as MySQL, even down
+to the same arguments to the same function names. This enables a Flash
+movie to have direct access to a MySQL database. Traditionally Flash
+movies have had no database support, they either had to use arrays, or
+use XML to communicate to an application specific external database
+daemon.
+
+connect
+ Connect to a MySQL database.
+
+qetData
+ Get data from the database.
+
+disconnect
+ Disconnect from a MySQL database.
+
+query
+ Execute an SQL query to the database.
+
+fetch_row
+ Fetch a row from the query results.
+
+num_fields
+
+free_result
+ Free the results of a query.
+
+store_results
+ Store the results of a query.
+
+
+File: gnash_ref.info, Node: RTMP Protocol, Next: Mozilla/Firefox NPAPI
Plugin, Prev: Gnash Extensions, Up: Top
+
+6 RTMP Protocol
+***************
+
+This document is based mostly on my own reverse engineering of the RTMP
+protocol and AMF format. _tcpdump_ and _ethereal_ are your friend. Some
+additional info that got me started was from the Red5
+(http://www.osflash.org/red5) project. _Red5_ is the only other open
+source Flash server. So some details are still vague, but as the
+implementation appears to work, we'll figure out what they are later.
+
+ The Real Time Messaging Protocol was created by MacroMedia (now
+Adobe) for delivering Flash objects and video over a network
+connection. Currently the only servers which support this format are
+the MacroMedia Media sever, and the Open Source Red5 project.
+
+ This is a simple protocol, optimized for poor bandwidth connections.
+It can support up to 64 concurrent streams over the same network
+connection. Part of each AMF packet header contains the index number of
+the stream. A single RTMP message can contain multiple AMF packets.
+
+ An RTMP connection uses Tcp/ip port 1935. It is also possible to
+tunnel RTMP over an HTTP connection using port 80. Each AMF packet is
+128 bytes long except for streaming audio, which has 64 byte packets.
+
+ The basics of the RTMP protocol are as follows. All communications
+are initiated by the client.
+
+Image of the RTMP protocol.
+
+ The client starts the RTMP connection by sending a single byte with
+a value of 0x3. This byte is followed by a data block of 1536 bytes.
+The format if this data block is unknown, but it appears to not be
+actually used by the protocol except as a handshake.
+
+ The server receives this packet, stores the 1536 byte data block,
+and then send a single byte with the value of 0x3, followed by two 1536
+data blocks. The second data block is the full contents of the original
+data block as sent by the client.
+
+ The client receives the 1536 byte data block, and if they match, the
+connection is established. After the handshake process is done, there
+are three other messages that the client sends to the sever to start
+the data flowing.
+
+ The first AMF packet sent to the server contains the _connect_
+packet. This doesn't appear to do much but notify the server the client
+is happy with the handshake, and ready to start reading packets.
+
+ The second packet is the _NetConnection_ object from the client.
+This ActionScript class is used by the Flash movie to create the
+network connection to the server.
+
+ The third packet is the _NetStream_ object from the client. This is
+the ActionScript class used to specify the file to be streamed by the
+server.
+
+ The RTMP packet for our example looks like this:
+
+
+ 030000190000c91400000000020007connect00?f0000000000000030003app0200#
+ software/gnash/tests/1153948634.flv0008flashVer02000cLNX 6,0,82,0
0006
+ swfUrl02001dfile:///file|%2Ftmp%2Fout.swfc30005tcUrl\002\0004
+ rtmp://localhost/software/gnash/tests/1153948634.flv\000\000\t
+ \002\000\005userx
+
+We'll take this apart in a bit, but you can see how all three AMF
+packets are in the same message. The message is received in several 128
+byte blocks, with the last one being less than that. The total size of
+the RTMP message is in the header, so the reader can tell if the entire
+message was read or not.
+
+ The RTMP header is first, followed by the connect message as an
+ASCII string as the message body. The following AMF packet is the
+_NetConnection_ one, which specifies that this is coming from a Flash
+application. This also contains the file path the server can use to
+find the file to stream. This is then followed by the version number,
+which I assume is the version of the Flash player, so the server knows
+what it is talking to.
+
+ The third packet is the one from _NetStream_, which specifies the
+URL used for the movie, followed by the user name for a semblance of
+security.
+
+ For the next level of detail, we'll explain the format of AMF. AMF
+is used by the RTMP protocol to transfer data. Each Flash object is
+encapsulated in an AMF packet, including streaming audio or video.
+
+ The first byte of the RTMP header determines two things about the
+rest of the message. The first 2 bits of this byte signify the total
+size of the RTMP header. The RTMP header is of a variable size, so this
+is important.
+
+00
+ This specifies the header contains 12 bytes, including this one.
+
+01
+ This specifies the header contains 8 bytes, including this one.
+
+02
+ This specifies the header contains 4 bytes, including this one.
+
+03
+ This specifies the header contains 1 byte, so this is the complete
+ header.
+
+ The other 6 bits in this byte represent the AMF index. As a single
+RTMP connection can support multiple data streams, this signifies which
+stream this packet is for. Once an AMF object is fully received by the
+client, the AMF index may be reused.
+
+ For messages with headers of at least 4 bytes, the next 3 bytes are
+used by audio and video data packets, but at this time the meaning of
+this field is unknown.
+
+ For messages with a 8 byte or larger header, the next 3 bytes
+determine the size of the RTMP message being transmitted. Messages with
+a 1 byte or 4 byte header use a standard size, 128 bytes for video, and
+64 bytes for audio.
+
+ For messages with an 8 byte or larger header, the next byte is the
+type of the AMF object.
+
+0x3
+ This specifies the content type of the RTMP packet is the number
+ of bytes read. This is used to start the RTMP connection.
+
+0x4
+ This specifies the content type of the RTMP message is a _ping_
+ packet.
+
+0x5
+ This specifies the content type of the RTMP message is server
+ response of some type.
+
+0x6
+ This specifies the content type of the RTMP packet is client
+ request of some type.
+
+0x8
+ This specifies the content type of the RTMP packet is an audio
+ message.
+
+0x9
+ This specifies the content type of the RTMP message is a video
+ packet.
+
+0x12
+ This specifies the content type of the RTMP message is notify.
+
+0x13
+ This specifies the content type of the RTMP message is shared
+ object.
+
+0x14
+ This specifies the content type of the RTMP message is remote
+ procedure call. This invokes the method of a Flash class remotely.
+
+ There are two sets of data types to consider. One set is used by the
+to specify the content type of the AMF object, the other is an
+ActionScript data type tag used to denote which type of object is being
+transferred.
+
+ The values of the initial type byte are:
+
+0x0
+ This specifies the data in the AMF packet is a numeric value. All
+ numeric values in Flash are 64 bit, _big-endian_.
+
+0x1
+ This specifies the data in the AMF packet is a boolean value.
+
+0x2
+ This specifies the data in the AMF packet is an _ASCII_ string.
+
+0x3
+ This specifies the data in the AMF packet is a Flash object. The
+ Flash object data type field further along in the message
+ specifies which type of ActionScript object it is.
+
+0x4
+ This specifies the data in the AMF packet is a Flash movie, ie.
+ another Flash movie.
+
+0x5
+ This specifies the data in the AMF packet is a NULL value. NULL is
+ often used as the return code from calling Flash functions.
+
+0x6
+ This specifies the data in the AMF packet is a undefined. This is
+ also used as the return code from calling Flash functions.
+
+0x7
+ This specifies the data in the AMF packet is a reference.
+
+0x8
+ This specifies the data in the AMF packet is a ECMA array.
+
+0x9
+ This specifies the data in the AMF packet is the end of an object
+ definition. As an object is transmitted with multiple AMF packets,
+ this lets the server know when the end of the object is reached.
+
+0xa
+ This specifies the data in the AMF packet is a Strict array.
+
+0xb
+ This specifies the data in the AMF packet is a date.
+
+0xc
+ This specifies the data in the AMF packet is a multi-byte string.
+ Multi-byte strings are used for international language support to
+ represent non _ASCII_ fonts.
+
+0xd
+ This specifies the data in the AMF packet is a an unsupported
+ feature.
+
+0xe
+ This specifies the data in the AMF packet is a record set.
+
+0xf
+ This specifies the data in the AMF packet is a AML object. XML
+ objects are then parsed by the _XML_ ActionScript class.
+
+0x10
+ This specifies the data in the AMF packet is a typed object.
+
+ For messages with a 12 byte header, the last 4 bytes are the routing
+of the message. If the destination is the server, this value is the
+NetStream object source. If the destination is the client, this is the
+NetStream object for this RTMP message. A value of 0x00000000 appears
+to be reserved for the NetConnection object.
+
+ Multiple AMF streams can be contained in a single RTMP messages, so
+it's important to check the index of each AMF packet.
+
+ An example RTMP header might look like this. (spaces added between
+fields for clarity) All the numbers are in hex.
+
+
+ 03 000019 0000c9 14 000000000
+
+03
+ The first two bits of this byte are the size of the header, which
+ in this example is 00, for a 12 byte header. The next 6 bits is
+ the AMF stream index number, which in this example is 0x3.
+
+000019
+ These 3 bytes currently have an unknown purpose.
+
+000c9
+ Since this example has a 12 byte header, this is the size of the
+ RTMP message, in this case 201 bytes.
+
+14
+ This is the content type of the RTMP message, which in this case
+ is to invoke a remote function call. (which we later see is the
+ connect function).
+
+00000000
+ The source is the NetConnection object used to start this
+ connection.
+
+* Menu:
+
+* AMF Format::
+
+
+File: gnash_ref.info, Node: AMF Format, Up: RTMP Protocol
+
+6.1 AMF Format
+==============
+
+The AMF format is used in the LocalConnection, SharedObject,
+NetConnection, and NetStream ActionScript classes. This is a means of
+binary data interchange between Flash movies, or between a Flash player
+and a Flash server.
+
+ Like the RTMP messages, an AMF packet header can be of a variable
+size. The size is either the same as the initial header of the RTMP
+message, or a 1 byte header, which is commonly used for streaming audio
+or video data.
+
+ The body of an AMF packet may look something like this example. The
+spaces have been added for clarity.
+
+
+ 02 0007 636f6e6e656374
+
+02
+ This is a single byte header. The value of the first 2 bits is
+ 0x3, and the AMF index is also 0x3.
+
+0007
+ This is the length in bytes of the string.
+
+63 6f 6e 6e 65 63 74
+ This is the string. Note that there is no null terminator since
+ the length is specified.
+
+
+File: gnash_ref.info, Node: Mozilla/Firefox NPAPI Plugin, Next: Appendix,
Prev: RTMP Protocol, Up: Top
+
+7 Mozilla/Firefox NPAPI Plugin
+******************************
+
+The Mozilla SDK has two API layers for plugins. The older layer is
+documented in the Geeko Plugin API Reference
+(http://www.gnu.org/software/gnash/manual/plugin.pdf), and the newer
+layer doesn't appear to be documented. The new API is simpler, and is
+portable across multiple versions of Mozilla or Firefox. The new API is
+just a layer on top of the older one, so this manual still applies.
+
+ Most of the programming of a plugin is filling in real emphasis for
+the standard API functions and methods. Firefox uses these to create
+the plugin, and to send it data.
+
+ When initializing or destroying a plugin, no matter how many
+instances are being used, the C API is used. These functions are
+typically called once for each plugin that is loaded.
+
+* Menu:
+
+* Plugin C API::
+* Plugin C++ API::
+* OpenGL and Threads::
+* Plugin Event Handling::
+
+
+File: gnash_ref.info, Node: Plugin C API, Next: Plugin C++ API, Up:
Mozilla/Firefox NPAPI Plugin
+
+7.1 Plugin C API
+================
+
+The lower layer is a C based API which is used by Firefox to initialize
+and destroy a plugin. This is so a plugin can be portable across
+multiple systems, since C++ emphasis is not portable between most C++
+compilers. This is where most of the behind the scenes work is done in
+a plugin. For Gnash, the sources this lower layer are in
+_plugin/mozilla-sdk_. They were added to the Gnash source tree so it
+wouldn't be necessary to have the Mozilla development packages
+installed to compile the Gnash plugin.
+
+ This is also the older API used for plugins, so is usually the one
+used if you dig around for plugin examples on the web. These are the
+main functions which have to be implemented in a plugin for it to be
+recognized by the browser, and to be initialized and destroyed.
+
+NS_PluginInitialize
+ This C function gets called once when the plugin is loaded,
+ regardless of how many instantiations there are actually playing
+ movies. So this is where all the one time only initialization
+ stuff goes that is shared by all the threads.
+
+NS_NewPluginInstance
+ This instantiates a new object for the browser. Returning a
+ pointer to the C++ plugin object is what ties the C++ and C
+ emphasis parts of the API together.
+
+NS_DestroyPluginInstance
+ This destroys our instantiated object when the browser is done.
+
+NS_PluginShutdown
+ This is called when a plugin is shut down, so this is where all
+ the one time only shutdown stuff goes.
+
+NPP_GetMIMEDescription
+ This is called to get the MIME types the plugin supports.
+
+NS_PluginGetValue
+ This is used by Firefox to query information from the plugin, like
+ the supported MIME type, the version number, and a description.
+
+
+File: gnash_ref.info, Node: Plugin C++ API, Next: OpenGL and Threads, Prev:
Plugin C API, Up: Mozilla/Firefox NPAPI Plugin
+
+7.2 Plugin C++ API
+==================
+
+The higher level layer is the one we are most concerned with. This is
+an instantiation of the _nsPluginInstanceBase_ class, as defined by the
+Mozilla SDK, for our plugin. With this API, a plugin is mostly defining
+the standard entry points for Firefox, and the emphasis that implements
+the glue between the Firefox and our plugin.
+
+ These are called for each instantiation of plugin. If there are
+three Flash movies on a web page, then three instances are created.
+Unfortunately for plugin programmers, these functions may randomly be
+called more than once, so it's good to use initialization flags for
+things that should only be done one per thread. For instance,
+_nsPluginInstance::init()_ and _nsPluginInstance::SetWindow()_ are
+called more than once, so the plugin must protect against actions that
+could be destructive.
+
+nsPluginInstance::nsPluginInstance
+ Create a new plugin object.
+
+nsPluginInstance::init
+ This methods initializes the plugin object, and is called for
+ every movie which gets played. This is where the thread-specific
+ information goes.
+
+nsPluginInstance::SetWindow
+ This sets up the window the plugin is supposed to render into.
+ This calls passes in various information used by the plugin to
+ setup the window. This may get called multiple times by each
+ instantiated object, so it can't do much but window specific setup
+ here. This is where the main emphasis is that sets up the window
+ for the plugin.
+
+nsPluginInstance::NewStream
+ Opens a new incoming data stream, which is the flash movie we want
+ to play. A URL can be pretty ugly, like in this example:
+
http://www.sickwave.com/swf/navbar/navbar_sw.swf?atfilms=http%3a//www.atm.com/af/home/&shickwave=http%3a//www.sickwave.com&gblst=http%3a//gbst.sickwave.com/gb/gbHome.jsp&known=0
+
../flash/gui.swf?ip_addr=foobar.com&ip_port=3660&show_cursor=true&path_prefix=../flash/&trapallkeys=true"
+ So this is where we parse the URL to get all the options passed in
+ when invoking the plugin.
+
+nsPluginInstance::Write
+ Read the data stream from Mozilla/Firefox. For now we read the
+ bytes and write them to a disk file.
+
+nsPluginInstance::WriteReady
+ Return how many bytes we can read into the buffer.
+
+nsPluginInstance::DestroyStream
+ Destroy the data stream we've been reading. For Gnash, when the
+ stream is destroyed means we've grabbed the entire movie. So we
+ signal the thread to start reading and playing the movie.
+
+nsPluginInstance::shut
+ This is where the movie playing specific shutdown emphasis goes.
+
+nsPluginInstance::~nsPluginInstance
+ This destroys our plugin object.
+
+NS_PluginInitialize::initGL
+ This is a Gnash internal function that sets up OpenGL.
+
+NS_PluginInitialize::destroyContext
+ This is a Gnash internal function that destroys a GLX context.
+
+nsPluginInstance::getVersion
+ This returns the version of Mozilla this plugin supports.
+
+nsPluginInstance::GetValue
+ This returns information to the browser about the plugin's name
+ and description.
+
+nsPluginInstance::URLNotify
+
+
+File: gnash_ref.info, Node: OpenGL and Threads, Next: Plugin Event Handling,
Prev: Plugin C++ API, Up: Mozilla/Firefox NPAPI Plugin
+
+7.3 OpenGL and Threads
+======================
+
+Neither OpenGL nor X11 has any built-in support for threads. Most
+actions aren't even atomic, so care has to be made to not corrupt any
+internal data. While it is difficult to render OpenGL from multiple
+threads, it can be done with the proper locking. The downside is the
+locking adds a performance hit, since all the threads will have to have
+the access synchronized by using mutexes.
+
+ The X11 context is maintained one per instantiation of the plugin.
+It is necessary to lock access to the X11 context when using threads by
+using _XLockDisplay()_ and _XUnlockDisplay()_. A connection to the X11
+server is opened for every instantiation of the plugin using
+_XOpenDisplay()_.
+
+ The _GLX Context_ is maintained one per instantiation of the plugin
+for a web page. If there are more than one Flash movie, there is more
+than one GLX Context. A GLX context can be created by using
+_glXCreateContext()_, and then later destroyed by using
+_glXDestroyContext()_. When swapping threads, the context is changed
+using _glXMakeCurrent()_.
+
+ All the emphasis that directly accesses a GLX context or the X11
+display must be wrapped with a mutex.
+
+
+File: gnash_ref.info, Node: Plugin Event Handling, Prev: OpenGL and Threads,
Up: Mozilla/Firefox NPAPI Plugin
+
+7.4 Plugin Event Handling
+=========================
+
+Firefox on most UNIX systems is a GTK+ application, so it is possible
+to have the plugin hook into the X11 event handling via GLX or GTK.
+Since Firefox uses GTK, so does Gnash. This also allows the addition of
+a right-click mouse menu for controlling the player. The GTK build of
+Gnash offers the best browsing experience as it's more functional than
+the SDL version.
+
+ It is also possible to disable the _GTK_ support so only the older
+_SDL_ support is used. In this case Gnash can't support event handling
+within the browser. This means that when using the SDL of the plugin,
+mouse clicks and keys pressed get ignored. Windows also can't be
+resized, and sometimes they overrun their boundaries as well. To
+disable the GTK support and force SDL to be used anyway, configure with
+_-disable-glext_
+
+
+File: gnash_ref.info, Node: Appendix, Next: Authors, Prev: Mozilla/Firefox
NPAPI Plugin, Up: Top
+
+8 Appendix
+**********
+
+* Menu:
+
+* Code Style::
+
+
+File: gnash_ref.info, Node: Code Style, Up: Appendix
+
+8.1 Code Style
+==============
+
+I know any discussion of coding styles leads to strong opinions, so
+I'll state simply I follow the GNU Coding Standards
+(http://www.gnu.org/prep/standards/standards.html). Where there is some
+flexibility as to the location of braces, I prefer mine on the end of a
+line when using an _if_, _while_, or _do_ statement. I find this more
+compact style easier to read and parse by eye. I'm also a big fan of
+always using braces around _if_ statements, even if they're one liners.
+
+ Here's my tweaked style settings for _Emacs_, the one true editor to
+rule them all.
+
+
+ (defconst my-style
+ '((c-tab-always-indent . t)
+ (c-auto-newline . t)
+ (c-hanging-braces-alist . (
+ (brace-list-intro)
+ (namespace-open)
+ (inline-open)
+ (block-open)
+ (brace-list-open)
+ (brace-list-close)
+ (brace-entry-open)
+ (brace-else-brace)
+ (brace-elseif-brace)
+ (class-open after)
+ (class-close)
+ (defun-open after)
+ (defun-close)
+ (extern-lang-open)
+ (inexpr-class-open)
+ (statement-open)
+ (substatement-open)
+ (inexpr-class-close)))
+ (c-hanging-colons-alist . ((member-init-intro before)
+ (inher-intro)
+ (case-label after)
+ (label after)
+ (access-label after)))
+ (c-offsets-alist . (
+ (innamespace . 0)
+ (case-label . 2)
+ ))
+ (c-cleanup-list . (
+ (scope-operator)
+ (empty-defun-braces)
+ (brace-else-brace)
+ (brace-elseif-brace)
+ (defun-close-semi)
+ (list-close-comma)
+ )
+ )
+ ;; no automatic newlines after ';' if following line non-blank or
inside
+ ;; one-line inline methods
+ (add-to-list 'c-hanging-semi&comma-criteria
+ 'c-semi&comma-no-newlines-before-nonblanks)
+ (add-to-list 'c-hanging-semi&comma-criteria
+ 'c-semi&comma-no-newlines-for-oneline-inliners)
+ ; (knr-argdecl-intro . -)
+ (c-echo-syntactic-information-p . t)
+ )
+ "My GNU Programming Style")
+
+ Another coding consideration: comments are good! Over commenting
+isn't good. Here is an over commented example:
+
+
+ counter++; // increment counter
+
+Gnash also uses Doxygen (http://www.doxygen.org) style comments. These
+are processed by Doxygen when building a cross reference of all the
+classes, and is a good way to help push internals documentation from
+the depths of the code into documentation where it can be seen by
+others.
+
+ _Doxygen_ style comments for _C++_ code involves simply using three
+slashes _///_ instead of the standard two slashes _//_ used for C++
+comments. Here's a short comment block for the _XML::cloneNode()_
+method:
+
+
+ /// \brief copy a node
+ ///
+ /// Method; constructs and returns a new XML node of the same type,
+ /// name, value, and attributes as the specified XML object. If deep
+ /// is set to true, all child nodes are recursively cloned, resulting
+ /// in an exact copy of the original object's document tree.
+ XMLNode &
+ XML::cloneNode(XMLNode &newnode, bool deep) {
+ ...
+ }
+
+ The _\brief_ keyword means that the text becomes associated when
+listing all the classes on the generated web pages. The text after the
+blank link becomes the detailed description which appears on the
+generated web page for that class and method.
+
+
+File: gnash_ref.info, Node: Authors, Next: GNU Free Documentation License,
Prev: Appendix, Up: Top
+
+9 Authors
+*********
+
+Gnash is maintained by Rob Savoye. Other active developers are: Sandro
+Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad Musick, Benjamin
+Wolsey, and Zou Lunkai. Please send all comments and suggestions to
+<address@hidden>. Past and sometimes current developers are Tomas
+Groth and Markus Gothe.
+
+ Gnash was initially derived from GameSWF. GameSWF is maintained by
+Thatcher Ulrich <address@hidden>. The following people contributed to
+GameSWF: Mike Shaver, Thierry Berger-Perrin, Ignacio Castan~o, Willem
+Kokke, Vitaly Alexeev, Alexander Streit, and Rob Savoye.
+
+
+File: gnash_ref.info, Node: GNU Free Documentation License, Prev: Authors,
Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+* Menu:
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_ref.info, Node: 0_ PREAMBLE, Next: 1_ APPLICABILITY AND
DEFINITIONS, Up: GNU Free Documentation License
+
+A.1 0. PREAMBLE
+===============
+
+The purpose of this License is to make a manual, textbook, or other
+written document "free" in the sense of freedom: to assure everyone the
+effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or non-commercially. Secondarily,
+this License preserves for the author and publisher a way to get credit
+for their work, while not being considered responsible for
+modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft license
+designed for free software.
+
+ We have designed this License in order to use it for manuals for
+free software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals; it
+can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+File: gnash_ref.info, Node: 1_ APPLICABILITY AND DEFINITIONS, Next: 2_
VERBATIM COPYING, Prev: 0_ PREAMBLE, Up: GNU Free Documentation License
+
+A.2 1. APPLICABILITY AND DEFINITIONS
+====================================
+
+This License applies to any manual or other work that contains a notice
+placed by the copyright holder saying it can be distributed under the
+terms of this License. The "Document", below, refers to any such manual
+or work. Any member of the public is a licensee, and is addressed as
+"you".
+
+ A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+of the Document (*note fdl-document::) that deals exclusively with the
+relationship of the publishers or authors of the Document to the
+Document's overall subject (or to related matters) and contains nothing
+that could fall directly within that overall subject. (For example, if
+the Document is in part a textbook of mathematics, a Secondary Section
+may not explain any mathematics.) The relationship could be a matter
+of historical connection with the subject or with related matters, or of
+legal, commercial, philosophical, ethical or political position
+regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections (*note
+fdl-secondary::) whose titles are designated, as being those of
+Invariant Sections, in the notice that says that the Document (*note
+fdl-document::) is released under this License.
+
+ The "Cover Texts" are certain short passages of text that are
+listed, as Front-Cover Texts or Back-Cover Texts, in the notice that
+says that the Document (*note fdl-document::) is released under this
+License.
+
+ A "Transparent" copy of the Document (*note fdl-document::) means a
+machine-readable copy, represented in a format whose specification is
+available to the general public, whose contents can be viewed and edited
+directly and straightforwardly with generic text editors or (for images
+composed of pixels) generic paint programs or (for drawings) some
+widely available drawing editor, and that is suitable for input to text
+formatters or for automatic translation to a variety of formats
+suitable for input to text formatters. A copy made in an otherwise
+Transparent file format whose markup has been designed to thwart or
+discourage subsequent modification by readers is not Transparent. A
+copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML or
+XML using a publicly available DTD, and standard-conforming simple HTML
+designed for human modification. Opaque formats include PostScript, PDF,
+proprietary formats that can be read and edited only by proprietary
+word processors, SGML or XML for which the DTD and/or processing tools
+are not generally available, and the machine-generated HTML produced by
+some word processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in formats
+which do not have any title page as such, "Title Page" means the text
+near the most prominent appearance of the work's title, preceding the
+beginning of the body of the text.
+
+
+File: gnash_ref.info, Node: 2_ VERBATIM COPYING, Next: 3_ COPYING IN
QUANTITY, Prev: 1_ APPLICABILITY AND DEFINITIONS, Up: GNU Free Documentation
License
+
+A.3 2. VERBATIM COPYING
+=======================
+
+You may copy and distribute the Document (*note fdl-document::) in any
+medium, either commercially or noncommercially, provided that this
+License, the copyright notices, and the license notice saying this
+License applies to the Document are reproduced in all copies, and that
+you add no other conditions whatsoever to those of this License. You
+may not use technical measures to obstruct or control the reading or
+further copying of the copies you make or distribute. However, you may
+accept compensation in exchange for copies. If you distribute a large
+enough number of copies you must also follow the conditions in section
+3 (*note 3_ COPYING IN QUANTITY::).
+
+ You may also lend copies, under the same conditions stated above,
+and you may publicly display copies.
+
+
+File: gnash_ref.info, Node: 3_ COPYING IN QUANTITY, Next: 4_ MODIFICATIONS,
Prev: 2_ VERBATIM COPYING, Up: GNU Free Documentation License
+
+A.4 3. COPYING IN QUANTITY
+==========================
+
+If you publish printed copies of the Document (*note fdl-document::)
+numbering more than 100, and the Document's license notice requires
+Cover Texts (*note fdl-cover-texts::), you must enclose the copies in
+covers that carry, clearly and legibly, all these Cover Texts:
+Front-Cover Texts on the front cover, and Back-Cover Texts on the back
+cover. Both covers must also clearly and legibly identify you as the
+publisher of these copies. The front cover must present the full title
+with all words of the title equally prominent and visible. You may add
+other material on the covers in addition. Copying with changes limited
+to the covers, as long as they preserve the title of the Document
+(*note fdl-document::) and satisfy these conditions, can be treated as
+verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+ If you publish or distribute Opaque (*note fdl-transparent::) copies
+of the Document (*note fdl-document::) numbering more than 100, you
+must either include a machine-readable Transparent (*note
+fdl-transparent::) copy along with each Opaque copy, or state in or
+with each Opaque copy a publicly-accessible computer-network location
+containing a complete Transparent copy of the Document, free of added
+material, which the general network-using public has access to download
+anonymously at no charge using public-standard network protocols. If
+you use the latter option, you must take reasonably prudent steps, when
+you begin distribution of Opaque copies in quantity, to ensure that
+this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+the Document (*note fdl-document::) well before redistributing any
+large number of copies, to give them a chance to provide you with an
+updated version of the Document.
+
+
+File: gnash_ref.info, Node: 4_ MODIFICATIONS, Next: 5_ COMBINING DOCUMENTS,
Prev: 3_ COPYING IN QUANTITY, Up: GNU Free Documentation License
+
+A.5 4. MODIFICATIONS
+====================
+
+You may copy and distribute a Modified Version (*note fdl-modified::)
+of the Document (*note fdl-document::) under the conditions of sections
+2 (*note 2_ VERBATIM COPYING::) and 3 (*note 3_ COPYING IN QUANTITY::)
+above, provided that you release the Modified Version under precisely
+this License, with the Modified Version filling the role of the
+Document, thus licensing distribution and modification of the Modified
+Version to whoever possesses a copy of it. In addition, you must do
+these things in the Modified Version:
+
+ * *A. * Use in the Title Page (*note fdl-title-page::) (and on the
+ covers, if any) a title distinct from that of the Document (*note
+ fdl-document::), and from those of previous versions (which
+ should, if there were any, be listed in the History section of the
+ Document). You may use the same title as a previous version if the
+ original publisher of that version gives permission.
+
+ * *B. * List on the Title Page (*note fdl-title-page::), as authors,
+ one or more persons or entities responsible for authorship of the
+ modifications in the Modified Version (*note fdl-modified::),
+ together with at least five of the principal authors of the
+ Document (*note fdl-document::) (all of its principal authors, if
+ it has less than five).
+
+ * *C. * State on the Title Page (*note fdl-title-page::) the name of
+ the publisher of the Modified Version (*note fdl-modified::), as
+ the publisher.
+
+ * *D. * Preserve all the copyright notices of the Document (*note
+ fdl-document::).
+
+ * *E. * Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ * *F. * Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified Version
+ (*note fdl-modified::) under the terms of this License, in the
+ form shown in the Addendum below.
+
+ * *G. * Preserve in that license notice the full lists of Invariant
+ Sections (*note fdl-invariant::) and required Cover Texts (*note
+ fdl-cover-texts::) given in the Document's (*note fdl-document::)
+ license notice.
+
+ * *H. * Include an unaltered copy of this License.
+
+ * *I. * Preserve the section entitled "History", and its title, and
+ add to it an item stating at least the title, year, new authors,
+ and publisher of the Modified Version (*note fdl-modified::)as
+ given on the Title Page (*note fdl-title-page::). If there is no
+ section entitled "History" in the Document (*note fdl-document::),
+ create one stating the title, year, authors, and publisher of the
+ Document as given on its Title Page, then add an item describing
+ the Modified Version as stated in the previous sentence.
+
+ * *J. * Preserve the network location, if any, given in the Document
+ (*note fdl-document::) for public access to a Transparent (*note
+ fdl-transparent::) copy of the Document, and likewise the network
+ locations given in the Document for previous versions it was based
+ on. These may be placed in the "History" section. You may omit a
+ network location for a work that was published at least four years
+ before the Document itself, or if the original publisher of the
+ version it refers to gives permission.
+
+ * *K. * In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+
+ * *L. * Preserve all the Invariant Sections (*note fdl-invariant::)
+ of the Document (*note fdl-document::), unaltered in their text
+ and in their titles. Section numbers or the equivalent are not
+ considered part of the section titles.
+
+ * *M. * Delete any section entitled "Endorsements". Such a section
+ may not be included in the Modified Version (*note fdl-modified::).
+
+ * *N. * Do not retitle any existing section as "Endorsements" or to
+ conflict in title with any Invariant Section (*note
+ fdl-invariant::).
+
+ If the Modified Version (*note fdl-modified::) includes new
+front-matter sections or appendices that qualify as Secondary Sections
+(*note fdl-secondary::) and contain no material copied from the
+Document, you may at your option designate some or all of these
+sections as invariant. To do this, add their titles to the list of
+Invariant Sections (*note fdl-invariant::) in the Modified Version's
+license notice. These titles must be distinct from any other section
+titles.
+
+ You may add a section entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version (*note
+fdl-modified::) by various parties-for example, statements of peer
+review or that the text has been approved by an organization as the
+authoritative definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text
+(*note fdl-cover-texts::), and a passage of up to 25 words as a
+Back-Cover Text (*note fdl-cover-texts::), to the end of the list of
+Cover Texts (*note fdl-cover-texts::) in the Modified Version (*note
+fdl-modified::). Only one passage of Front-Cover Text and one of
+Back-Cover Text may be added by (or through arrangements made by) any
+one entity. If the Document (*note fdl-document::) already includes a
+cover text for the same cover, previously added by you or by
+arrangement made by the same entity you are acting on behalf of, you
+may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document (*note
+fdl-document::) do not by this License give permission to use their
+names for publicity for or to assert or imply endorsement of any
+Modified Version (*note fdl-modified::).
+
+
+File: gnash_ref.info, Node: 5_ COMBINING DOCUMENTS, Next: 6_ COLLECTIONS OF
DOCUMENTS, Prev: 4_ MODIFICATIONS, Up: GNU Free Documentation License
+
+A.6 5. COMBINING DOCUMENTS
+==========================
+
+You may combine the Document (*note fdl-document::) with other
+documents released under this License, under the terms defined in
+section 4 (*note 4_ MODIFICATIONS::) above for modified versions,
+provided that you include in the combination all of the Invariant
+Sections (*note fdl-invariant::) of all of the original documents,
+unmodified, and list them all as Invariant Sections of your combined
+work in its license notice.
+
+ The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections (*note fdl-invariant::) may be
+replaced with a single copy. If there are multiple Invariant Sections
+with the same name but different contents, make the title of each such
+section unique by adding at the end of it, in parentheses, the name of
+the original author or publisher of that section if known, or else a
+unique number. Make the same adjustment to the section titles in the
+list of Invariant Sections in the license notice of the combined work.
+
+ In the combination, you must combine any sections entitled "History"
+in the various original documents, forming one section entitled
+"History"; likewise combine any sections entitled "Acknowledgements",
+and any sections entitled "Dedications". You must delete all sections
+entitled "Endorsements."
+
+
+File: gnash_ref.info, Node: 6_ COLLECTIONS OF DOCUMENTS, Next: 7_
AGGREGATION WITH INDEPENDENT WORKS, Prev: 5_ COMBINING DOCUMENTS, Up: GNU
Free Documentation License
+
+A.7 6. COLLECTIONS OF DOCUMENTS
+===============================
+
+You may make a collection consisting of the Document (*note
+fdl-document::) and other documents released under this License, and
+replace the individual copies of this License in the various documents
+with a single copy that is included in the collection, provided that
+you follow the rules of this License for verbatim copying of each of the
+documents in all other respects.
+
+ You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+File: gnash_ref.info, Node: 7_ AGGREGATION WITH INDEPENDENT WORKS, Next: 8_
TRANSLATION, Prev: 6_ COLLECTIONS OF DOCUMENTS, Up: GNU Free Documentation
License
+
+A.8 7. AGGREGATION WITH INDEPENDENT WORKS
+=========================================
+
+A compilation of the Document (*note fdl-document::) or its derivatives
+with other separate and independent documents or works, in or on a
+volume of a storage or distribution medium, does not as a whole count
+as a Modified Version (*note fdl-modified::) of the Document, provided
+no compilation copyright is claimed for the compilation. Such a
+compilation is called an "aggregate", and this License does not apply
+to the other self-contained works thus compiled with the Document , on
+account of their being thus compiled, if they are not themselves
+derivative works of the Document. If the Cover Text (*note
+fdl-cover-texts::) requirement of section 3 (*note 3_ COPYING IN
+QUANTITY::) is applicable to these copies of the Document, then if the
+Document is less than one quarter of the entire aggregate, the
+Document's Cover Texts may be placed on covers that surround only the
+Document within the aggregate. Otherwise they must appear on covers
+around the whole aggregate.
+
+
+File: gnash_ref.info, Node: 8_ TRANSLATION, Next: 9_ TERMINATION, Prev: 7_
AGGREGATION WITH INDEPENDENT WORKS, Up: GNU Free Documentation License
+
+A.9 8. TRANSLATION
+==================
+
+Translation is considered a kind of modification, so you may distribute
+translations of the Document (*note fdl-document::) under the terms of
+section 4 (*note 4_ MODIFICATIONS::). Replacing Invariant Sections
+(*note fdl-invariant::) with translations requires special permission
+from their copyright holders, but you may include translations of some
+or all Invariant Sections in addition to the original versions of these
+Invariant Sections. You may include a translation of this License
+provided that you also include the original English version of this
+License. In case of a disagreement between the translation and the
+original English version of this License, the original English version
+will prevail.
+
+
+File: gnash_ref.info, Node: 9_ TERMINATION, Next: 10_ FUTURE REVISIONS OF
THIS LICENSE, Prev: 8_ TRANSLATION, Up: GNU Free Documentation License
+
+A.10 9. TERMINATION
+===================
+
+You may not copy, modify, sublicense, or distribute the Document (*note
+fdl-document::) except as expressly provided for under this License.
+Any other attempt to copy, modify, sublicense or distribute the
+Document is void, and will automatically terminate your rights under
+this License. However, parties who have received copies, or rights,
+from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+
+File: gnash_ref.info, Node: 10_ FUTURE REVISIONS OF THIS LICENSE, Next:
Addendum, Prev: 9_ TERMINATION, Up: GNU Free Documentation License
+
+A.11 10. FUTURE REVISIONS OF THIS LICENSE
+=========================================
+
+The Free Software Foundation (http://www.gnu.org/fsf/fsf.html) may
+publish new, revised versions of the GNU Free Documentation License
+from time to time. Such new versions will be similar in spirit to the
+present version, but may differ in detail to address new problems or
+concerns. See http://www.gnu.org/copyleft/
+(http://www.gnu.org/copyleft).
+
+ Each version of the License is given a distinguishing version
+number. If the Document (*note fdl-document::) specifies that a
+particular numbered version of this License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that specified version or of any later version
+that has been published (not as a draft) by the Free Software
+Foundation. If the Document does not specify a version number of this
+License, you may choose any version ever published (not as a draft) by
+the Free Software Foundation.
+
+
+File: gnash_ref.info, Node: Addendum, Prev: 10_ FUTURE REVISIONS OF THIS
LICENSE, Up: GNU Free Documentation License
+
+A.12 Addendum
+=============
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright 2008, Free Software Foundation.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with noInvariant Sections (*note fdl-invariant::),
+ with no Front-Cover Texts (*note fdl-cover-texts::), and with no
+ Back-Cover Texts (*note fdl-cover-texts::). A copy of the license
+ is included in the section entitled "GNU Free Documentation
+ License".
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License
+(http://www.gnu.org/copyleft/gpl.html), to permit their use in free
+software.
+
+
+
+Tag Table:
+Node: Top168
+Node: Introduction1998
+Node: Audience2803
+Node: What Is Supported?3130
+Node: Building from Source5647
+Node: Overview6027
+Node: Getting The Source7069
+Node: Releases7275
+Node: CVS Access7643
+Node: Code Dependencies8355
+Ref: Code Dependency Table9052
+Node: Testing Dependencies34567
+Ref: Testing Dependency Table34875
+Node: Documentation Dependencies38799
+Ref: Documentation Dependency Table39068
+Node: Configuring Gnash48136
+Node: Features50430
+Ref: Configuration Options - Features51030
+Node: Specifying Custom Paths57360
+Ref: Custom Path Options57830
+Node: Compiling the Code67453
+Node: Creating the Documentation68394
+Node: Running the Tests69740
+Node: Using DejaGnu70194
+Node: Increasing Verbosity70557
+Node: Running Some Tests71093
+Node: Running The Tests Manually71913
+Node: Movie tests72575
+Node: ActionScript Unit Tests72929
+Node: Installation73246
+Node: Libraries74559
+Node: Executables75415
+Node: Documentation76285
+Node: Cross Configuring77040
+Node: Software Internals80120
+Node: A Tour of Gnash80389
+Node: The Libraries80941
+Node: libgnashbase81228
+Node: libgnashgui81652
+Node: libgnashserver81922
+Node: libgnashasobjs82293
+Node: libgnashamf82529
+Node: libgnashbackend82952
+Node: libgnashplugin83267
+Node: libklashpart83473
+Node: The Applications83643
+Node: The Standalone Player84013
+Node: Gprocessor84310
+Node: SOLdumper84704
+Node: Dumpshm84971
+Node: The Plugin85190
+Node: Current Status85668
+Node: GUI Support86226
+Node: Mozplugger87907
+Node: Klash89798
+Node: The Debug Logging System90348
+Node: Logging System C API91909
+Node: Logging System C++ API94113
+Node: Sound handling in Gnash95954
+Node: Sound types96697
+Node: Sound parsing97234
+Node: Sound playback97802
+Node: The SDL sound backend98332
+Node: The Gstreamer backend99651
+Node: Future audio backends100667
+Node: Detailed description of the Gstreamer backend101157
+Node: Testing103408
+Node: Testing Tools103879
+Node: Test Cases104711
+Node: Writing ActionScript Tests105290
+Node: Writing Ming-based self-contained SWF tests107793
+Node: Using Ming-based test generators facilities108950
+Node: Writing self-contained SWF tests with other compilers111310
+Node: Writing Test Runners114435
+Node: Using the generic test runner for self-contained SWF tests116184
+Node: Writing Movie testers118274
+Node: Adding New ActionScript Class120014
+Node: Prototype121194
+Node: Declaration122611
+Node: Instantiation122876
+Node: Methods123503
+Node: Accessing Arguments123894
+Node: Returning a Value to ActionScript124290
+Node: Additional fn_call Members124669
+Node: Dynamic Properties125523
+Node: The as_value Object Type127028
+Node: Data Types127466
+Node: Determining the Type127787
+Node: Fetching the Value128319
+Node: Setting the Value and Type128809
+Node: Further Reading129403
+Node: Object ActionScript Class129818
+Node: The Methods of the Class130158
+Node: The Properties of the Object Class130497
+Node: Object Class Conformance130812
+Node: Reporting Bugs132351
+Node: Get a Fresh Binary Package133343
+Node: Determine if the bug was previously reported134121
+Node: Review the bug writing guidelines134939
+Node: Filing a bug report135990
+Node: Gnash Extensions136273
+Node: Creating A New Extension138543
+Node: Crafting an Extension139961
+Node: Debugging An Extension144265
+Node: Included Extensions145957
+Node: Gtk Extension146401
+Node: File I/O Extension147388
+Node: MySQL Extension148574
+Node: RTMP Protocol149425
+Node: AMF Format159221
+Node: Mozilla/Firefox NPAPI Plugin160197
+Node: Plugin C API161215
+Node: Plugin C++ API163074
+Node: OpenGL and Threads166338
+Node: Plugin Event Handling167666
+Node: Appendix168635
+Node: Code Style168787
+Node: Authors172617
+Node: GNU Free Documentation License173313
+Node: 0_ PREAMBLE174076
+Node: 1_ APPLICABILITY AND DEFINITIONS175382
+Ref: fdl-document175607
+Ref: fdl-modified175898
+Ref: fdl-secondary176085
+Ref: fdl-invariant176730
+Ref: fdl-cover-texts176979
+Ref: fdl-transparent177192
+Ref: fdl-title-page178482
+Node: 2_ VERBATIM COPYING178871
+Node: 3_ COPYING IN QUANTITY179851
+Node: 4_ MODIFICATIONS182208
+Node: 5_ COMBINING DOCUMENTS188268
+Node: 6_ COLLECTIONS OF DOCUMENTS189765
+Node: 7_ AGGREGATION WITH INDEPENDENT WORKS190656
+Node: 8_ TRANSLATION191884
+Node: 9_ TERMINATION192787
+Node: 10_ FUTURE REVISIONS OF THIS LICENSE193442
+Node: Addendum194582
+
+End Tag Table
+
+
+Local Variables:
+coding: US-ASCII
+End:
Index: doc/C/preformatted/gnash_user.html.in
===================================================================
RCS file: doc/C/preformatted/gnash_user.html.in
diff -N doc/C/preformatted/gnash_user.html.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnash_user.html.in 3 Mar 2008 23:46:43 -0000
1.1.2.1
@@ -0,0 +1,1316 @@
+<html><head><meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1"><title>Gnash User Manual</title><meta name="generator"
content="DocBook XSL Stylesheets V1.73.2"></head><body bgcolor="white"
text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"
lang="en"><div class="titlepage"><div><div><h1 class="title"><a
name="index"></a>Gnash User Manual</h1></div><div><p class="releaseinfo">
+ This manual describes version 0.8.2 of Gnash.
+ </p></div><div><p class="copyright">Copyright © 2005, 2006, 2007, 2008
Free Software Foundation</p></div><div><div class="legalnotice"><a
name="legalnotice"></a><p>
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the <a class="link" href="#fdl" title="Appendix A. GNU
Free Documentation License"><em class="citetitle">GNU
+ Free Documentation License</em></a>, Version 1.1 or any later
+ version published by the Free Software Foundation with no Invariant
+ Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find
+ a copy of the GFDL at this
+ <a class="link" href="#fdl" title="Appendix A. GNU Free Documentation
License">link</a> or in the file COPYING-DOCS
+ distributed with this manual.
+ </p></div></div><div><div class="revhistory"><table border="1" width="100%"
summary="Revision history"><tr><th align="left" valign="top"
colspan="2"><b>Revision History</b></th></tr><tr><td align="left">Revision
Gnash User Manual version 0.1</td><td align="left">Feb 2008</td></tr><tr><td
align="left" colspan="2">
+ <p class="author">Rob Savoye
+ <code class="email"><<a class="email"
href="mailto:address@hidden">address@hidden</a>></code>
+ The end user parts of the manual have been pulled out of
+ the original version of the manual and rewritten.
+ </p>
+
+ <p class="publisher">Open Media Now! Foundation</p>
+ </td></tr></table></div></div></div><hr></div><div class="toc"><p><b>Table
of Contents</b></p><dl><dt><span class="chapter"><a href="#intro">1.
Introduction</a></span></dt><dd><dl><dt><span class="sect1"><a
href="#audience">Audience</a></span></dt><dt><span class="sect1"><a
href="#runs-on">What Is Supported?</a></span></dt></dl></dd><dt><span
class="chapter"><a href="#usage">2. Using <span
class="application">Gnash</span></a></span></dt><dd><dl><dt><span
class="sect1"><a href="#options"><span class="application">Gnash</span> Command
Line Options</a></span></dt><dt><span class="sect1"><a href="#keys"><span
class="application">Gnash</span> Interactive Control
Keys</a></span></dt><dt><span class="sect1"><a href="#gnashrc">User
Configuration File</a></span></dt></dl></dd><dt><span class="chapter"><a
href="#build">3. Installing and Configuring
Gnash</a></span></dt><dd><dl><dt><span class="sect1"><a
href="#requirements">Requirements</a></span></dt><dd><dl><dt><span
class="sect2"><a href="#hardware">Hardware
Requirements</a></span></dt><dt><span class="sect2"><a
href="#software">Software Requirements</a></span></dt></dl></dd><dt><span
class="sect1"><a href="#downloading">Downloading
Gnash</a></span></dt><dd><dl><dt><span class="sect2"><a
href="#gettingsource">Getting the Source</a></span></dt><dt><span
class="sect2"><a href="#getcodecs">Getting Codec
Support</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a
href="#bugreport">4. Reporting Bugs</a></span></dt><dd><dl><dt><span
class="sect1"><a href="#bugstep_package">Get a Fresh Binary
Package</a></span></dt><dt><span class="sect1"><a
href="#bugstep_search">Determine if the bug was previously
reported</a></span></dt><dt><span class="sect1"><a
href="#bugstep_guidelines">Review the bug writing
guidelines</a></span></dt><dt><span class="sect1"><a
href="#bugstep_file">Filing a bug report</a></span></dt></dl></dd><dt><span
class="glossary"><a href="#glossary">Glossary</a></span></dt><dt><span
class="chapter"><a href="#authors">5. Authors</a></span></dt><dt><span
class="appendix"><a href="#fdl">A. GNU Free Documentation
License</a></span></dt><dd><dl><dt><span class="sect1"><a
href="#fdl-preamble">0. PREAMBLE</a></span></dt><dt><span class="sect1"><a
href="#fdl-section1">1. APPLICABILITY AND DEFINITIONS</a></span></dt><dt><span
class="sect1"><a href="#fdl-section2">2. VERBATIM
COPYING</a></span></dt><dt><span class="sect1"><a href="#fdl-section3">3.
COPYING IN QUANTITY</a></span></dt><dt><span class="sect1"><a
href="#fdl-section4">4. MODIFICATIONS</a></span></dt><dt><span class="sect1"><a
href="#fdl-section5">5. COMBINING DOCUMENTS</a></span></dt><dt><span
class="sect1"><a href="#fdl-section6">6. COLLECTIONS OF
DOCUMENTS</a></span></dt><dt><span class="sect1"><a href="#fdl-section7">7.
AGGREGATION WITH INDEPENDENT WORKS</a></span></dt><dt><span class="sect1"><a
href="#fdl-section8">8. TRANSLATION</a></span></dt><dt><span class="sect1"><a
href="#fdl-section9">9. TERMINATION</a></span></dt><dt><span class="sect1"><a
href="#fdl-section10">10. FUTURE REVISIONS OF THIS
LICENSE</a></span></dt><dt><span class="sect1"><a
href="#fdl-using">Addendum</a></span></dt></dl></dd></dl></div><div
class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>2.1. <a
href="#tb-command-line-options">Gnash Command Line Options</a></dt><dt>2.2. <a
href="#tb-control-keys">Gnash Interactive Control Keys</a></dt><dt>2.3. <a
href="#tb-config-variables">User Configuration Variables</a></dt><dt>3.1. <a
href="#tb-os-cpu">Build Matrix</a></dt></dl></div><div class="chapter"
lang="en"><div class="titlepage"><div><div><h2 class="title"><a
name="intro"></a>Chapter 1. Introduction</h2></div></div></div><div
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a
href="#audience">Audience</a></span></dt><dt><span class="sect1"><a
href="#runs-on">What Is Supported?</a></span></dt></dl></div><p>
+ <span class="application">Gnash</span> is a free SWF movie player. It is
available as a
+ stand-alone application or as a plugin for several popular
+ web browsers. It supports playing media from a disk or streaming
+ over a network connection. Some popular video sharing sites like
+ YouTube are supported on a wide variety of devices from
+ embedded ones to modern desktops.
+ </p><p>
+ <span class="application">Gnash</span> has a better focus on security,
allowing the user tight
+ control of all network or disk based I/O. Gnash also supports
+ extending ActionScript by creating your own classes. You can write
+ wrappers for any development library, and import them into the
+ player much like Perl or Python does.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a
name="audience"></a>Audience</h2></div></div></div><p>
+ This manual is primarily focused on users interested in how to
+ get Gnash installed from a package, and basic usage as a web
+ browser plugin. For more technical details, please refer to the
+ Gnash Reference manual.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="runs-on"></a>What Is Supported?</h2></div></div></div><p>
+ Gnash is known to compile for most any POSIX and ANSI C++
+ conforming system if you have all the dependent libraries
+ installed. Systems we test on, and which Gnash is known to
+ run on are Ubuntu, Fedora, Debian, Mandriva, OpenBSD, NetBSD, FreeBSD,
+ Win32, and Darwin (OSX) primarily. Occasionally other platforms
+ are built, primarily by those distribution maintainers. This
+ includes BeOS, Haiku, Syllable, OS/2, Solaris, Slackware, and
+ Gentoo.
+ </p><p>
+ Gnash is capable of reading up to SWF v9 files and opcodes,
+ but primarily supports SWF v7, with better SWF v8 and v9
+ support under heavy development. With the 0.8.2 release,
+ Gnash includes initial parser support for SWF v8 and v9.
+ Not all ActionScript 2 classes are implemented yet, but all of the
+ most heavily used ones are. Many ActionScript 2 classes are
+ partially implemented; there is support for all of the
+ commonly used methods of each class.
+ </p><p>
+ Gnash has implemented about 80% of ActionScript v2.0, and has
+ begun implementing ActionScript v3.0. Gnash supports the
+ majority of Flash opcodes up to SWF v9, and a wide
+ sampling of ActionScript classes for SWF v8.
+ </p><p>
+ As ActionScript 3 is a more developed version of
+ ActionScript 2, many of the same classes work for
+ both. Support has been added to Gnash's ActionScript library
+ to support the new ActionScript 3 filters, which get applied
+ to every class. Implementing ActionScript clases is often the
+ easiest way for new Gnash developers to make a contribution
+ without a deep internal knpowledge of Gnash.
+ </p><p>
+ Gnash has included video support since early 2007, but this is
+ an ever changing field of reverse engineering. Many of the
+ popular video sharing sites use SWF v8 or v9, which Gnash
+ still has imperfect support for. This is improving all the
+ time, so often builds from a development snapshot will work
+ when using the older release packaged in your distribution
+ doesn't. You can find daily snapshots of the latest CVS tree
+ at: <a class="ulink" href="http://www.gnashdev.org/dev_snapshots/"
target="_top">
+ http://www.gnashdev.org/dev_snapshots</a>.
+ </p><p>
+ Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+ should work with Gnash. Gnash supports the loading of patent
+ free codecs like Ogg Vorbis or Theora from disk based files,
+ while work is being done to support these codecs when embedded
+ in a SWF file. Ffmpeg contains the codecs used by the current
+ SWF defintion, FLV, VP6 (ON2), H.263, H.264, and MP3.
+ </p></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="usage"></a>Chapter 2.
Using <span class="application">Gnash</span></h2></div></div></div><div
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a
href="#options"><span class="application">Gnash</span> Command Line
Options</a></span></dt><dt><span class="sect1"><a href="#keys"><span
class="application">Gnash</span> Interactive Control
Keys</a></span></dt><dt><span class="sect1"><a href="#gnashrc">User
Configuration File</a></span></dt></dl></div><p>
+ When used as a standalone player, you can play any Flash file from
+ the command line by entering a command of the format:
+ </p><pre class="programlisting">
+ gnash <em class="replaceable"><code><option>
<flashfile.swf></code></em>
+ </pre><p>
+ The only required argument is the name (and location)of the file
+ to be played.
+ </p><p>
+ The available options are listed in the following section, or you
+ may view them in the terminal window by executing the following at
+ the command line:
+ </p><pre class="programlisting">
+ gnash --help | less
+ </pre><p>
+ </p><p>
+ The source code download of <span class="application">Gnash</span>
includes several example .SWF
+ files. They are located in the
+ <code class="filename">testsuite/samples/</code> directory of the <span
class="application">Gnash</span>
+ source directory. If you have installed <span
class="application">Gnash</span> correctly, issuing
+ the a command similar to the following plays a short animation of
+ a car swerving and crashing:
+ </p><pre class="programlisting">
+ gnash
+ /home/<em
class="replaceable"><code><username></code></em>/gnash/testsuite/car_smash.swf
+ </pre><p>
+ </p><div class="mediaobject" align="center"><img
src="images/car_crash.png" align="middle"></div><p>
+ </p><p>
+ The above is useful for playing Flash files downloaded to your
+ local system. It is also possible to play Flash files directly
+ from the web. To do so, use the <code class="option">-u</code> option
along
+ with the URL of the desired file.
+ </p><pre class="programlisting">
+ gnash -u http://example.domain.com/flashfile.swf
+ </pre><p>
+ Note that this will not work with every website; some embedded
+ Flash files are difficult to play.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a name="options"></a><span
class="application">Gnash</span> Command Line Options</h2></div></div></div><p>
+ No options are required for <span class="application">Gnash</span>'s
default behavior. However,
+ there are many options that can be used to that behavior.
+ </p><p>
+ </p><pre class="programlisting">
+ gnash <em class="replaceable"><code><options></code></em>
+ <code class="filename">filename.swf</code>
+ </pre><p>
+ </p><div class="table"><a name="tb-command-line-options"></a><p
class="title"><b>Table 2.1. Gnash Command Line Options</b></p><div
class="table-contents"><table summary="Gnash Command Line Options"
border="1"><colgroup><col><col></colgroup><thead><tr><th
align="left">Option</th><th
align="left">Function</th></tr></thead><tbody><tr><td align="left"><code
class="option">-h</code></td><td align="left">
+ Print usage information.
+ </td></tr><tr><td align="left">
+ <code class="option">-s factor</code>
+ </td><td align="left">
+ Scale the movie up/down by the specified factor.
+ </td></tr><tr><td align="left">
+ <code class="option">-c</code>
+ </td><td align="left">
+ Produce a core file instead of letting SDL trap it. By
+ default, SDL traps all signals, but sometimes a core file
+ is desired to assist with debugging.
+ </td></tr><tr><td align="left">
+ <code class="option">-d num</code>
+ </td><td align="left">
+ Number of milliseconds to delay in main loop. The main
+ loop polls continuously with a delay to adjust how long
+ <span class="emphasis"><em><span
class="application">Gnash</span></em></span> sleeps between iterations of the
+ loop. The smaller the number, the higher the CPU load
+ gets, and of course, the more iterations of the main
+ command loop.
+ </td></tr><tr><td align="left">
+ <code class="option">-v</code>
+ </td><td align="left">
+ Be verbose; i.e. print important messages to stdout.
+ </td></tr><tr><td align="left">
+ <code class="option">-vv</code>
+ </td><td align="left">
+ Be very verbose; i.e. also print debug messages to stdout.
+ </td></tr><tr><td align="left">
+ <code class="option">-va</code>
+ </td><td align="left">
+ Be verbose about movie actions (for ActionScript debugging). This
+ generates very large amounts of text and will affect <span
class="application">Gnash</span>'s performance.
+ </td></tr><tr><td align="left">
+ <code class="option">-vp</code>
+ </td><td align="left">
+ Be verbose about parsing the movie. Warning: this can
+ generate a lot of text, and can affect the performance of
+ the movie you are playing.
+ </td></tr><tr><td align="left">
+ <code class="option">-ml bias</code>
+ </td><td align="left">
+ Specify the texture LOD bias (float, default is -1) This
+ affects the fuzziness of small objects, especially small
+ text.
+ </td></tr><tr><td align="left">
+ <code class="option">-w</code>
+ </td><td align="left">
+ Write a debug log called gnash-dbg.log. This will
+ record of all the debug messages whether they are printed
+ to the screen or not.
+ </td></tr><tr><td align="left">
+ <code class="option">-j</code>
+ </td><td align="left">
+ Specify the width of the window. This is mostly used
+ only by the plugin.
+ </td></tr><tr><td align="left">
+ <code class="option">-k</code>
+ </td><td align="left">
+ Specify the height of the window. This is mostly used
+ only by the plugin.
+ </td></tr><tr><td align="left">
+ <code class="option">-1</code>
+ </td><td align="left">
+ Play once; exit when/if movie reaches the last
+ frame.
+ </td></tr><tr><td align="left">
+ <code class="option">-r [0|1|2|3]</code>
+ </td><td align="left">
+ <div class="itemizedlist"><ul type="disc"><li><p>
+ 0 disables rendering and sound (good for batch tests).
+ </p></li><li><p>
+ 1 enables rendering and disables sound (default setting).
+ </p></li><li><p>
+ 2 enables sound and disables rendering.
+ </p></li><li><p>
+ 3 enables rendering and sound.
+ </p></li></ul></div>
+ </td></tr><tr><td align="left">
+ <code class="option">-t sec</code>
+ </td><td align="left">
+ Timeout and exit after the specified number of
+ seconds. This is useful for movies which repeat
+ themselves.
+ </td></tr><tr><td align="left">
+ <code class="option">-g</code>
+ </td><td align="left">
+ Start <span class="application">Gnash</span> with a Flash
debugger console so one can set
+ break points or watchpoints.
+ </td></tr><tr><td align="left">
+ <code class="option">-x id</code>
+ </td><td align="left">
+ This specifies the X11 window ID to display
+ in; this is mainly used by plugins.
+ </td></tr><tr><td align="left">
+ <code class="option">-u url</code>
+ </td><td align="left">
+ Set the _url member of the root movie. This is useful
+ when you download a movie and play it from a different
+ location. See also the -U switch.
+ </td></tr><tr><td align="left">
+ <code class="option">-U baseurl</code>
+ </td><td align="left">
+ Set base URL for this run. URLs are resolved relative to
+ this base. If omitted defaults to the _url member of the
+ top-level movie (see the -u switch).
+ </td></tr><tr><td align="left">
+ <code class="option">-P parameter</code>
+ </td><td align="left">
+ Parameters are given in the syntax "ParamName=Value" and are
mostly
+ useful for the plugin to honour EMBED tags attributes
+ or explicit OBJECT PARAM tags. A common use for -P
+ is to provide FlashVars
+ (ie: -P "FlashVars=home=http://www.gnu.org").
+ </td></tr><tr><td align="left">
+ <code class="option">-F filedescriptor</code>
+ </td><td align="left">
+ Use the given filedescriptor to send requests to the host
+ application. This is currently only used for GETURL requests.
+ The protocol is not documented yet, and also needs improvement.
+ Primary use for this switch is for the NPAPI plugin to properly
+ support javascript and target windows in geturl requests.
+ </td></tr></tbody></table></div></div><br
class="table-break"></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="keys"></a><span class="application">Gnash</span> Interactive Control
Keys</h2></div></div></div><p>
+ While a movie is playing, there are several control
+ keys. These can be used to step through frames, pause the
+ playing, and control other actions.
+ </p><div class="table"><a name="tb-control-keys"></a><p
class="title"><b>Table 2.2. Gnash Interactive Control Keys</b></p><div
class="table-contents"><table summary="Gnash Interactive Control Keys"
border="1"><colgroup><col><col></colgroup><thead><tr><th align="left">Key
Combination</th><th align="left">Function</th></tr></thead><tbody><tr><td
align="left">
+ <code class="option">CTRL-Q</code>
+ </td><td align="left">
+ Quit/Exit.
+ </td></tr><tr><td align="left">
+ <code class="option">CTRL-W</code>
+ </td><td align="left">
+ Quit/Exit.
+ </td></tr><tr><td align="left">
+ <code class="option">ESC</code>
+ </td><td align="left">
+ Quit/Exit.
+ </td></tr><tr><td align="left">
+ <code class="option">CTRL-P</code>
+ </td><td align="left">
+ Toggle Pause.
+ </td></tr><tr><td align="left">
+ <code class="option">CTRL-R </code>
+ </td><td align="left">
+ Restart the movie.
+ </td></tr><tr><td align="left">
+ <code class="option">CTRL-L</code>
+ </td><td align="left">
+ Force immediate redraw.
+ </td></tr><tr><td align="left">
+ <code class="option">CTRL-T</code>
+ </td><td align="left">
+ Debug. Test the set_variable() function.
+ </td></tr><tr><td align="left">
+ <code class="option">CTRL-G</code>
+ </td><td align="left">
+ Debug. Test the get_variable() function.
+ </td></tr><tr><td align="left">
+ <code class="option">CTRL-M</code>
+ </td><td align="left">
+ Debug. Test the call_method() function.
+ </td></tr></tbody></table></div></div><br
class="table-break"></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="gnashrc"></a>User Configuration File</h2></div></div></div><p>
+ Individual user preferences may be set by editing variables with
+ the <code class="filename">.gnashrc</code> file:
+ </p><pre class="programlisting">
+ ~/.gnashrc
+ </pre><p>
+ </p><p>
+ Each line must begin with an action: either
+ <span class="emphasis"><em>set</em></span> or, in the case of lists, also
+ <span class="emphasis"><em>append</em></span>.
+ </p><p>
+ The values in this configuration file apply only to an individual
+ user, and become the default settings of the standalone player and
+ the plugin. Note that any command line options take precedence
+ over <code class="filename">.gnashrc</code> settings.
+ </p><p>
+ The variables in the <code class="filename">.gnashrc</code> file support
+ three types of arguments: on/off, numeric values, or in the case
+ of the whitelist and blacklist, a list of hostnames as ASCII text.
+ </p><div class="table"><a name="tb-config-variables"></a><p
class="title"><b>Table 2.3. User Configuration Variables</b></p><div
class="table-contents"><table summary="User Configuration Variables"
border="1"><colgroup><col><col><col></colgroup><thead><tr><th
align="left">Variable</th><th align="left">Value</th><th
align="left">Function</th></tr></thead><tbody><tr><td
align="left">localdomain</td><td align="left">on/off</td><td align="left">This
value can be set to either <span class="emphasis"><em>on</em></span> or
+ <span class="emphasis"><em>off</em></span>, and controls the loading
of
+ external Flash movies over a network. This option
+ tells Gnash to only load Flash movies from the existing
domain.</td></tr><tr><td align="left">localhost</td><td
align="left">on/off</td><td align="left">This value can be set to either <span
class="emphasis"><em>on</em></span> or
+ <span class="emphasis"><em>off</em></span>, and controls the loading
of
+ external Flash movies over a network. This is a stricter
+ version of the <span class="emphasis"><em>localdomain</em></span>
setting as
+ this allows the loading of Flash movies to the same host
+ that is running <span
class="application">Gnash</span>.</td></tr><tr><td
align="left">whitelist</td><td align="left">hostnames</td><td align="left">This
is a list of hostnames separated by spaces, or <span
class="emphasis"><em>off</em></span>
+ to disable the whitelist. The hostname must be given
+ without a protocol (http://, https://). If this list is populated,
+ <span class="application">Gnash</span> will only load external Flash
movies from the specified hosts. The
+ whitelist takes precedence over the blacklist. Because several files
can
+ be parsed in succession, each file can override or add to
+ lists in other files. Use <span class="emphasis"><em>set</em></span>
to override
+ all other lists or <span class="emphasis"><em>append</em></span> to
add your blacklisted
+ hosts to lists in previously parsed files.</td></tr><tr><td
align="left">blacklist</td><td align="left">hostnames</td><td align="left">This
is a list of hostnames separated by spaces, or <span
class="emphasis"><em>off</em></span>
+ to disable the blacklist. The hostname must be given
+ without a protocol (http://, https://).
+ External flash movies from these
+ domains are never allowed to load. If whitelist is present
+ and not empty, blacklist is not used. Because several files can
+ be parsed in succession, each file can override or add to
+ lists in other files. Use <span class="emphasis"><em>set</em></span>
to override
+ all other lists or <span class="emphasis"><em>append</em></span> to
add your blacklisted
+ hosts to lists in previously parsed files.</td></tr><tr><td
align="left">localSandboxPath</td><td align="left">dirs</td><td
align="left">This is a list of directories separated by spaces.
+ Only resources from these directories and from the directory
+ portion of movie filename (if loaded from filesystem) are allowed to
load.
+ Because several files can be parsed in succession, each file can
override
+ or add to lists in other files. Use <span
class="emphasis"><em>set</em></span> to override
+ all other lists or <span class="emphasis"><em>append</em></span> to
add new sandboxes.
+ Note that there's currently no way to *drop* the directory of base dir
+ from the list of allowed local sandboxes.
+ </td></tr><tr><td align="left">delay</td><td
align="left">Number</td><td align="left"><span class="application">Gnash</span>
uses a timer-based event mechanism to advance frames
+ at a steady rate. This option overrides the default
+ setting in Gnash to play a movie slower or faster.</td></tr><tr><td
align="left">verbosity</td><td align="left">Number</td><td align="left">This is
a numeric value which defines the default level of
+ verbosity from the player.</td></tr><tr><td
align="left">MalformedSWFVerbosity</td><td align="left">on/off</td><td
align="left">This value can be set to either <span
class="emphasis"><em>on</em></span> or
+ <span class="emphasis"><em>off</em></span>, and controls whether
malformed SWF errors should
+ be printed. If set to true, verbosity level is automatically
incremented.
+ Set <code class="option">verbosity</code> to 0 afterwards to
hush.</td></tr><tr><td align="left">ASCodingErrorsVerbosity</td><td
align="left">on/off</td><td align="left">This value can be set to either <span
class="emphasis"><em>on</em></span> or
+ <span class="emphasis"><em>off</em></span>, and controls whether
ActionScript coding
+ errors should be printed. If set to true, verbosity level is
+ automatically incremented. Set <code class="option">verbosity</code>
to 0 afterwards to hush.</td></tr><tr><td align="left">debuglog</td><td
align="left">Absolute path</td><td align="left">This is the full path and name
of debug logfile as
+ produced by <span class="application">Gnash</span>. On systems with a
UNIX-type shell,
+ a tilde prefix (~) will be expanded as by Posix shell requirements
+ (see
http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_01).</td></tr><tr><td
align="left">writelog</td><td align="left">on/off</td><td align="left">This
value can be set to either <span class="emphasis"><em>on</em></span> or
+ <span class="emphasis"><em>off</em></span>, and controls whether a
debug log
+ is always written by <span class="application">Gnash</span>, or not
at all.</td></tr><tr><td align="left">sound</td><td align="left">on/off</td><td
align="left">This value can be set to either <span
class="emphasis"><em>on</em></span> or
+ <span class="emphasis"><em>off</em></span>, and controls the sound of
the
+ standalone player. By default <span class="application">Gnash</span>
enables playing the
+ sound in any Flash movie.</td></tr><tr><td
align="left">pluginsound</td><td align="left">on/off</td><td align="left">This
value can be set to either <span class="emphasis"><em>on</em></span> or
+ <span class="emphasis"><em>off</em></span>, and controls the sound of
the
+ player when running as a browser plugin. By default, sound
+ is enabled when using <span class="application">Gnash</span> as a
browser plugin.</td></tr><tr><td align="left">EnableExtensions</td><td
align="left">on/off</td><td align="left">Set to <span
class="emphasis"><em>on</em></span> to enable extensions. This option is <span
class="emphasis"><em>off</em></span> by default</td></tr><tr><td
align="left">StartStopped</td><td align="left">on/off</td><td align="left">Set
to <span class="emphasis"><em>on</em></span> to have the GUI start in "stop"
mode. This is useful in particular
+ for the plugin, so you have to explicitly start any movie on a
webpage. This option is <span class="emphasis"><em>off</em></span> by default.
+ </td></tr><tr><td align="left">flashVersionString</td><td
align="left">string</td><td align="left">Set the string returned by $version
and System.capabilities.version.
+ Useful to get around some flash version detection movies.
+ Note that the version advertised by the plugin is NOT affected by
this setting,
+ instead you need to set the GNASH_FLASH_VERSION environment variable
for
+ the latter (which doesn't affect $version and
System.capabilities.version).</td></tr><tr><td
align="left">flashSystemOS</td><td align="left">string</td><td align="left">The
string that Gnash should return for System.capabilities.OS</td></tr><tr><td
align="left">flashSystemManufacturer</td><td align="left">string</td><td
align="left">The string that Gnash should return for
System.capabilities.manufacturer</td></tr><tr><td
align="left">StreamsTimeout</td><td align="left">double</td><td align="left">
+ Set the number of seconds after which streams download time out.
Note that timeouts only occurs after the given number of seconds
+ passed w/out anything was received.
+ </td></tr><tr><td align="left">insecureSSL</td><td
align="left">on/off</td><td align="left">If set to <span
class="emphasis"><em>on</em></span>, no verification of SSL connections
+ is performed. This means that, although the connection is encrypted,
the server
+ certificate could be invalid, may not belong to the host, or both.
Equivalent
+ to curl --insecure. By default, this option is <span
class="emphasis"><em>off</em></span> and
+ connections will fail when a host cannot be
verified.</td></tr><tr><td align="left">SOLsafedir</td><td
align="left">Absolute path</td><td align="left">The full path to a directory
where <span class="application">Gnash</span> should store Shared Object files
("flash cookies") if
+ they are enabled.</td></tr><tr><td align="left">SOLreadonly</td><td
align="left">on/off</td><td align="left">If set to <span
class="emphasis"><em>on</em></span>, <span class="application">Gnash</span>
will not write Shared Object files.</td></tr><tr><td
align="left">URLOpenerFormat</td><td align="left">string</td><td align="left">
+ Set the format of an url opener command. The %u label would be
substituted by the actual url to be opened.
+ Examples:
+ <pre class="programlisting">
+ set urlOpenerFormat firefox -remote 'openurl(%u)'
+ set urlOpenerFormat xdg-open %u
+ set urlOpenerFormat open %u
+ set urlOpenerFormat kfmclient exec %u
+ </pre>
+ </td></tr></tbody></table></div></div><br class="table-break"><p>
+ The following example <code class="filename">.gnashrc</code> file allows a
user to only play Flash files saved locally to the machine on which <span
class="application">Gnash</span> is running. It also specifically forbids
content from doubleclick.com and mochibot.com. <span
class="application">Gnash</span>'s error output is set to be fairly verbose,
with the debug log placed in a location convenient for the user. Finally,
sound is turned on for both the standalone player and the plugin.
+ </p><pre class="programlisting">
+
+ #
+ # Gnash client options
+ #
+
+ # Only access remote content from our local domain
+ set localdomain on
+
+ # Only access content from our local host
+ set localhost on
+
+ # These sites are OK
+ # uncommenting the following line will allow load of external
+ # movies *only* from the specified hosts.
+ #set whitelist www.doonesbury.com www.cnn.com www.9news.com
+
+ # Disable whitelists set in any other gnashrc files, because
+ # these could override our blacklist.
+ set whitelist off
+
+ # Don't access content from these sites
+ set blacklist www.doubleclick.com mochibot.com
+
+ # The delay between timer interrupts
+ set delay 50
+
+ # The default verbosity level
+ set verbosity 1
+
+ # Be verbose about malformed SWF
+ set MalformedSWFVerbosity true
+
+ # Be verbose about AS coding errors
+ set ASCodingErrorsVerbosity true
+
+ # The full path to the debug log
+ set debuglog ~/gnash-dbg.log
+
+ # Write a debug log to disk
+ set writelog on
+
+ # Enable or Disable sound for the standalone player
+ set sound on
+
+ # Enable or Disable sound for the standalone player
+ set pluginsound on
+
+ # Make sure SSL connections are always verified
+ set insecureSSL off
+
+ # Use firefox to open urls
+ set urlOpenerFormat firefox -remote 'openurl(%u)'
+
+ </pre></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="build"></a>Chapter 3.
Installing and Configuring Gnash</h2></div></div></div><div
class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a
href="#requirements">Requirements</a></span></dt><dd><dl><dt><span
class="sect2"><a href="#hardware">Hardware
Requirements</a></span></dt><dt><span class="sect2"><a
href="#software">Software Requirements</a></span></dt></dl></dd><dt><span
class="sect1"><a href="#downloading">Downloading
Gnash</a></span></dt><dd><dl><dt><span class="sect2"><a
href="#gettingsource">Getting the Source</a></span></dt><dt><span
class="sect2"><a href="#getcodecs">Getting Codec
Support</a></span></dt></dl></dd></dl></div><p>
+ There are two ways of installing Gnash:
+
+ using a package manager, or <a class="link" href="#gettingsource"
title="Getting the Source">installing from source</a>.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a
name="requirements"></a>Requirements</h2></div></div></div><p>
+ Before downloading and installing Gnash, check that your
+ hardware and software meet the following requirements.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="hardware"></a>Hardware
Requirements</h3></div></div></div><p>
+ One of the goals of Gnash is to make it portable enough to
+ install on small devices. As a result, the hardware
+ requirements are minimal. Gnash has even run on an ARM9 at 200
+ MHz with 32 MB of RAM! (It ran without video support in this
+ case.) While firm minimums have not been established, Gnash
+ has been shown to run successfully with the following:
+ </p><div class="itemizedlist"><ul type="disc"><li><p>
+ 336 MHz processor
+ </p></li><li><p>
+ 128 MB RAM
+ </p></li><li><p>
+ Gnash will run on anything from a raw frame
+ buffer up to an OpenGL-supporting graphics card.
+ </p></li></ul></div><p>
+ The following table provides a list of the Operating System/CPU
+ combinations on which Gnash has been shown to run.
+ </p><div class="table"><a name="tb-os-cpu"></a><p class="title"><b>Table
3.1. Build Matrix</b></p><div class="table-contents"><table summary="Build
Matrix" border="1"><colgroup><col><col></colgroup><thead><tr><th
align="left">Operating System</th><th
align="left">Processor</th></tr></thead><tbody><tr><td align="left">OpenBSD,
FreeBSD, NetBSD</td><td align="left">Alpha AXP, AMD64, i386, Itanium, PC-98,
PowerPC, SPARC64
+ </td></tr><tr><td align="left">Debian</td><td align="left">Alpha
AXP, AMD64, ARM, hppa, i386, Itanium, MIPS,
+ PowerPC, IBM zSeries (s390), SPARC
+ </td></tr><tr><td align="left">Fedora</td><td
align="left">x86-32, x86-64, Geode GX, Geode LX
+ </td></tr><tr><td align="left">Gentoo</td><td align="left">AMD64,
PowerPC, SPARC, x86
+ </td></tr><tr><td align="left">Maemo 2.1</td><td
align="left">i385, ARMv5t</td></tr><tr><td align="left">Scratchbox</td><td
align="left">i386, ARMv5t</td></tr><tr><td align="left">Access Linux Platform
+ </td><td align="left">i386, ARMv5t</td></tr><tr><td
align="left">Mandriva
+ </td><td align="left">i386, x86-64, MIPS</td></tr><tr><td
align="left">Open Embedded, OpenMoko, Poky
+ </td><td align="left">ARM
+ </td></tr><tr><td align="left">YellowDog Linux 6
+ </td><td align="left">PowerPC, PS3
+ </td></tr><tr><td align="left">OpenSuSE 10
+ </td><td align="left">i586, x86-64
+ </td></tr><tr><td align="left">Red Hat Enterprise, CentOS
+ </td><td align="left">x86-32, x86-64
+ </td></tr><tr><td align="left">Ubuntu
+ </td><td align="left">x86-64, x86-32, PowerPC, UltraSPARC
+ </td></tr><tr><td align="left">Haiku</td><td
align="left">i386</td></tr><tr><td align="left">Syllable</td><td
align="left">i386</td></tr><tr><td align="left">Irix 6.5
+ </td><td align="left">MIPS R10K
+ </td></tr><tr><td align="left">Darwin (MacOS X)
+ </td><td align="left">PowerPC and x86-32
+ </td></tr><tr><td align="left">Windows XP, Windows Vista</td><td
align="left">x86-32</td></tr></tbody></table></div></div><br
class="table-break"></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="software"></a>Software
Requirements</h3></div></div></div><p>
+ The 0.8.2 release of Gnash has been designed to run on
+ UNIX/Linux variants, and has been run on most of the free ones.
+ However, Gnash has successfully run on Windows, Darwin (Mac OS X),
+ Irix, Solaris, BeOs, OS/2, and Haiku. Gnash has also run on the
+ following 64-bit systems: PowerPC, Itanium, UltraSparc, and AMD64.
+ For now, it is important to be sure that the following code, testing,
+ and documentation dependencies are met before installing Gnash. If
+ you will be downloading Gnash with a package manager, these
+ dependencies may be solved by the package manager. Otherwise, you
+ must first verify that each of these dependencies are installed on the
+ target system.
+ </p></div></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="downloading"></a>Downloading Gnash</h2></div></div></div><p>
+ There are two ways to download Gnash: using a package manager or by
+ downloading the source code and building it on your system. If
+ possible, it is advisable to use a package manager to download Gnash,
+ as it will resolve dependencies for you. However, if you want the
+ very latest features, or a Gnash package is not available for your
+ operating system, it is better to download the source code and build
+ Gnash locally.
+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3
class="title"><a name="gettingsource"></a>Getting the
Source</h3></div></div></div><p>
+ Gnash is available as a <a class="link" href="#sourcereleases"
title="Releases">release
+ tarball</a>, a <a class="link" href="#sourcerepo"
title="Repository">development
+ checkout</a>, or a <a class="link" href="#sourcesnapshot"
title="Snapshot">development
+ snapshot</a>.
+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4
class="title"><a name="sourcereleases"></a>Releases</h4></div></div></div><p>
+ The source can be acquired from a
+ <a class="ulink" href="http://www.gnu.org/prep/ftp.html"
target="_top">GNU FTP
+ Mirror</a>. The release version is intended to be
+ stable, and is probably your best choice if the release took
+ place recently. If you need features or fixes which were
+ introduced after the release, consider a
+ <a class="link" href="#sourcerepo" title="Repository">CVS
checkout</a> or the
+ <a class="link" href="#sourcesnapshot" title="Snapshot">daily
snapshot</a>.
+ </p><p>
+ To download, select a mirror near you, then choose the
+ <code class="filename">gnash</code> directory.
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="sourcesnapshot"></a>Snapshot</h4></div></div></div><p>
+ The daily development snapshot can be downloaded from
+ <a class="ulink" href="http://www.gnashdev.org/dev_snapshots/"
target="_top">http://www.gnashdev.org/dev_snapshots/</a>.
+ This is the best option if you need changes which were introduced
+ after the <a class="link" href="#sourcereleases"
title="Releases">last release</a> of
+ Gnash, but are unable to <a class="link" href="#sourcerepo"
title="Repository">download
+ directly from the repository.</a>
+ </p></div><div class="sect3" lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
name="sourcerepo"></a>Repository</h4></div></div></div><p>
+ The latest development sources are available via
+ anonymous CVS. This is recommended
+ if you need features or bug fixes which were introduced after
+ the <a class="link" href="#sourcereleases" title="Releases">last
release</a>. Look at
+ the <a class="link" href="#sourcesnapshot" title="Snapshot">daily
snapshot</a> if you
+ experience difficulty accessing the repository.
+ </p><p>
+ To download via anonymous CVS, first set the
+ environment variable <span
class="command"><strong>CVS_RSH</strong></span> to
+ <span class="command"><strong>ssh</strong></span>, then check out
the source code.
+ The example below uses the GNU Bourne-Again shell (bash):
+ </p><pre class="screen">
+ export CVS_RSH="ssh"
+ cvs -z3 -d:pserver:address@hidden:/sources/gnash co gnash
+ </pre><p>
+ It is also possible to browse the repository
+ <a class="ulink"
href="http://cvs.savannah.gnu.org/viewcvs/gnash/?root=gnash"
target="_top">http://cvs.savannah.gnu.org/viewcvs/gnash/?root=gnash</a> on the
web.
+ </p></div></div><div class="sect2" lang="en"><div
class="titlepage"><div><div><h3 class="title"><a name="getcodecs"></a>Getting
Codec Support</h3></div></div></div><p>
+ Gnash requires codec support to handle audio and video
+ correctly. Some platforms like Ubuntu or Fedora under the
+ GNOME desktop will automatically notify the user that the
+ proper codecs aren't installed, and pop up a dialog box to
+ let the user download the codecs Gnash needs to make site
+ like YouTube work correctly. If you have installed Gnash on
+ any other platform, and video doesn't work, it's highly
+ likely you need to install the proper codecs. For most
+ platforms, this is the Gstreamer-ffmpeg plugin, available
+ from your distributions repository.
+ </p></div></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="bugreport"></a>Chapter
4. Reporting Bugs</h2></div></div></div><div class="toc"><p><b>Table of
Contents</b></p><dl><dt><span class="sect1"><a href="#bugstep_package">Get a
Fresh Binary Package</a></span></dt><dt><span class="sect1"><a
href="#bugstep_search">Determine if the bug was previously
reported</a></span></dt><dt><span class="sect1"><a
href="#bugstep_guidelines">Review the bug writing
guidelines</a></span></dt><dt><span class="sect1"><a
href="#bugstep_file">Filing a bug report</a></span></dt></dl></div><p>
+ The Gnash project relies on the community of Gnash users to test
+ the player, feedback is critical to any successful project. Not
+ only does it let us know that people use Gnash, but it helps us
+ understand the community's needs. Gnash uses a bug tracker on
+ <a class="ulink" href="http://savannah.gnu.org"
target="_top">http://savannah.gnu.org</a> to manage these reports.
+ </p><p>
+ When filing a report, please follow the guidelines below. The better
+ your bug report is, the easier it will be for the developers to
+ address the issue. Bug reports without enough information will
+ initially be asked to provide this information anyway. Adding
+ critical details, like the Operating System you are on, its
+ version, and any relevant error messages from Gnash that you get.
+ </p><div class="sect1" lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a name="bugstep_package"></a>Get a Fresh
Binary Package</h2></div></div></div><p>
+ For starters, it's a good idea to obtain a copy of the latest
+ snapshot. Although Gnash is primarily released as source, the
+ Gnash build infrastructure allows the automated building of
+ binary packages. Often the version of Gnash as packaged by a
+ GNU/Linux or BSD distribution is based on the last official
+ release, which could be months out of date. It is helpful if
+ this is the case to try a newer packaged build of Gnash.
+ </p><p>
+ You can get a fresh binary package of Gnash, as well as recent
+ source packages from
+ <a class="ulink" href="http://www.getgnash.org/packages/" target="_top">
+ http://www.getgnash.org/packages
+ </a>.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="bugstep_search"></a>Determine if the bug was previously
reported</h2></div></div></div><p>
+ Search the <a class="ulink"
href="https://savannah.gnu.org/bugs/?group=gnash" target="_top">Gnash
+ bug tracker</a> to see if the bug has already been identified.
+ </p><p>
+ If the issue has already been reported, you should not file
+ a bug report. However, you may add some additional information
+ to the ticket if you feel that it will be beneficial to the
+ developers. For instance, if someone reported a memory issue
+ on Ubuntu GNU/Linux, and you noticed the same problem on OpenBSD,
+ your stacktrace would be useful. Conversely, adding a "me too"
+ note to a feature request is not helpful.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="bugstep_guidelines"></a>Review the bug writing
guidelines</h2></div></div></div><p>
+ A good bug report should be precise, explicit, and discrete.
+ This means that there should be just one bug per ticket, and
+ that a ticket should contain the following information:
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type: circle"><p>
+ An overview of the problem;
+ </p></li><li style="list-style-type: circle"><p>
+ Instructions on how to replicate the bug;
+ </p></li><li style="list-style-type: circle"><p>
+ A description of what happened when you performed the steps
+ to replicate the bug, and what you expected to happen;
+ </p></li><li style="list-style-type: circle"><p>
+ Your system information: operating system name and version, as
+ well as the versions of major development dependencies;
+ </p></li><li style="list-style-type: circle"><p>
+ The release number or checkout timestamp for the version of Gnash
+ where you observe the problem;
+ </p></li><li style="list-style-type: circle"><p>
+ The file <code class="filename">config.log</code>, which should be
+ attached as a file;
+ </p></li><li style="list-style-type: circle"><p>
+ A descriptive title.
+ </p></li></ul></div><p>
+ Include any additional information that you feel might be useful
+ to the developers.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="bugstep_file"></a>Filing a bug report</h2></div></div></div><p>
+ After following the steps described above, you can file a bug report at
+ <a class="ulink" href="https://savannah.gnu.org/bugs/?group=gnash"
target="_top">https://savannah.gnu.org/bugs/?group=gnash</a>.
+ </p></div></div><div class="glossary"><div class="titlepage"><div><div><h2
class="title"><a name="glossary"></a>Glossary</h2></div></div></div><div
class="glossdiv"><h3 class="title">A</h3><dl><dt>
+ ActionScript
+ </dt><dd><p>
+ <span class="emphasis"><em>ActionScript</em></span>, or "AS", is the
scripting
+ language for <span class="emphasis"><em>Flash</em></span>
+ applications. It is compiled to bytecode, which is a subset of
+ the <span class="emphasis"><em>SWF</em></span> format.
+ </p></dd><dt>
+ AGG
+ </dt><dd><p>
+ AGG is the AntiGrain 2D graphics library, which can be used
+ as a renderer in Gnash. It is faster than OpenGL on systems
+ without hardware graphics acceleration. As of Gnash version
+ 0.8.1 it is the more feature complete renderer.
+ </p></dd><dt>
+ AMF
+ </dt><dd><p>
+ <span class="emphasis"><em>AMF</em></span>
+ is the object format used by <span
class="emphasis"><em>Flash</em></span>
+ for shared objects and streaming video.
+ </p></dd><dt>
+ as_environment
+ </dt><dd><p>
+ In Gnash terms, the as_environment, or ActionScript
+ execution environment, contains a stack of objects,
+ characters and values which are in the immediate environment
+ of the current fn_call. Please refer to the Gnash
+ ActionScript manual for more information.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">C</h3><dl><dt>
+ Cairo
+ </dt><dd><p>
+ Cairo is a 2D graphics library with support for multiple
+ output devices. Can be used as a renderer in Gnash. A useful
+ feature of Cairo is that it will automatically use graphic
+ card acceleration when available. Cairo has an experimental
+ OpenGL backend.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">D</h3><dl><dt>
+ DejaGNU
+ </dt><dd><p>
+ DejaGNU is a framework for testing software.
+ </p></dd><dt>
+ DocBook
+ </dt><dd><p>
+ <span class="emphasis"><em>DocBook</em></span>
+ is a markup language for presentation-neutral
+ documentation, such as manuals.
+ </p></dd><dt>
+ Doxygen
+ </dt><dd><p>
+ <span class="emphasis"><em>Doxygen</em></span>
+ is a documentation generator for for multiple languages
+ which uses comments in the source code to create stand-alone
+ documentation.
+ </p></dd><dt>
+ Drupal
+ </dt><dd><p>
+ Drupal is a CMS/blog system used for the main Gnash website.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">E</h3><dl><dt>
+ extensions
+ </dt><dd><p>
+ A <span class="application">Gnash</span> <span
class="emphasis"><em>extension</em></span> is a plugin (not a
+ browser plugin) which implements additional functionality
+ beyond what is covered by <span class="emphasis"><em>Flash</em></span>
+ specification. These are shared libraries which are loaded
+ at runtime.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">F</h3><dl><dt>
+ ffmpeg
+ </dt><dd><p>
+ ffmpeg is an audio and video decoding library which can be
+ used by Gnash to decode mp3, FLV and other media types.
+ </p></dd><dt>
+ Flash
+ </dt><dd><p>
+ The term <span class="emphasis"><em>Flash</em></span> is used to
describe both the
+ Adobe IDE for creating <span class="emphasis"><em>SWF</em></span>
+ files, and the technology itself. Flash is a trademarked
+ term of Adobe's, we prfer to use SWF to refer to the files
+ themselves, as well as the format, instead of flash(tm).
+ </p></dd><dt>
+ FLV
+ </dt><dd><p>
+ FLV is a proprietary file format used to deliver Flash
+ video. It is used by YouTube, among others.
+ </p></dd><dt>
+ FLTK
+ </dt><dd><p>
+ FLTK, or the 'Fast Light ToolKit', is a portable GUI library
+ which is intended to replace the SDL GUI. Currently in Gnash,
+ FLTK may be used with the Cairo and AGG renderers. FLTK has an
+ experimental Cairo backend.
+ </p></dd><dt>
+ FrameBuffer
+ </dt><dd><p>
+ In Gnash, this is a GUI library that outputs directly to the
+ Linux Frame Buffer and so does not need a window system to
+ run. This makes it particularly suitable for use on small
+ devices.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">G</h3><dl><dt>
+ Gnash
+ </dt><dd><p>
+ Gnash is the GNU Flash movie player.
+ </p></dd><dt>
+ Gstreamer
+ </dt><dd><p>
+ Gstreamer is a multimedia framework which Gnash can use for
+ decoding audio and video. Gstreamer itself cannot decode
+ anything, so it needs some appropriate decoding-plugins to do
+ the work for it. Remember to install them if you use Gnash
+ with Gstreamer enabled. To get the best out of Gnashs
+ gstreamer-parts, it is recommended to install the
+ gst-plugins-good, gst-plugins-good and gst-ffmpeg plugins
+ packages.
+ </p></dd><dt>
+ GTK
+ </dt><dd><p>
+ GTK is the GIMP Toolkit GUI library. It is one of the GUI
+ options for Gnash. As of Gnash 0.7.2, this is the more
+ performant and feature-rich choice. GTK uses Cairo
+ internally.
+ </p></dd><dt>
+ GUI
+ </dt><dd><p>
+ A <span class="emphasis"><em>GUI</em></span> is a
+ "graphical user interface". In <span class="application">Gnash</span>,
the GUI
+ library provides a wrapper for mouse and keyboard events,
+ menus, windowing (where available) and a drawing area.
+ You must choose a GUI library during the
+ configuration stage of building Gnash.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">K</h3><dl><dt>
+ Klash
+ </dt><dd><p>
+ <span class="emphasis"><em>Klash</em></span> was the name given to
the stand-alone
+ instance of <span class="application">Gnash</span> which used the KDE
GUI. It has been replaced with
+ an implementation using Qt. Some documentation may incorrectly
+ refer to the Konqueror plugin as <span
class="emphasis"><em>Klash</em></span>.
+ The plugin was renamed <span class="emphasis"><em>Kpart</em></span>.
+ </p></dd><dt>
+ Kpart
+ </dt><dd><p>
+ <span class="emphasis"><em>Kpart</em></span> is a plugin for
Konqueror which is
+ enabled with the configuration option --enable-kparts.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">L</h3><dl><dt>
+ libmad
+ </dt><dd><p>
+ libmad is a mp3-decoding library, which used to be an option for Gnash
+ handling of sound (dropped since 0.8.2).
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">M</h3><dl><dt>
+ Mesa
+ </dt><dd><p>
+ <span class="emphasis"><em>Mesa</em></span> is the free software
OpenGL
+ implementation. <span class="application">Gnash</span> documentation
will sometimes use the
+ glossterms 'OpenGL' and 'Mesa' interchangeably.
+ </p></dd><dt>
+ Ming
+ </dt><dd><p>
+ Ming is a C library for generating SWF ("Flash") format
+ movies, plus a set of wrappers for using the library. It is
+ used by the Gnash project for generating testcases.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">N</h3><dl><dt>
+ Nellymoser
+ </dt><dd><p>
+ Nellymoser is a proprietary audio codec introduced in the
+ Flash Player in version 6. For more information, please see
+ Wikipedia.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">O</h3><dl><dt>
+ OpenGL
+ </dt><dd><p>
+ OpenGL (Open Graphics Library) is a standard specification
+ defining a cross-language cross-platform API for writing
+ applications that produce 3D and 2D computer
+ graphics. Accelerated graphic cards usually provide OpenGL at
+ the hardware level. Please refer to Wikipedia for availability
+ of free software OpenGL hardware drivers. A free software
+ implementation of the API is available (Mesa). OpenGL can be
+ used as a renderer in Gnash.
+ </p></dd><dt>
+ ORM
+ </dt><dd><p>
+ ORM is a system for ensuring the rights of the creator over a piece
of digital content. It is more passive than DRM.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">P</h3><dl><dt>
+ plugin
+ </dt><dd><p>
+ The glossterm <span class="emphasis"><em>plugin</em></span> is used
in <span class="application">Gnash</span> to
+ refer to both any <span class="application">Gnash</span> browser
plugin, as well as the Firefox
+ plugin specifically. The Konqueror plugin is called
+ <span class="emphasis"><em>Kpart</em></span>. Sometimes, the term is
used in
+ an even more generic sense to refer to
+ <span class="emphasis"><em>extensions</em></span>.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">Q</h3><dl><dt>
+ Qt
+ </dt><dd><p>
+ Qt is a GUI library which is used by KDE. The plugin version
+ of Gnash using this GUI library is Kpart. The standalone
+ version is enabled with --enable-gui=kde.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">R</h3><dl><dt>
+ renderer
+ </dt><dd><p>
+ The <span class="emphasis"><em>renderer</em></span> is the subsystem
of <span class="application">Gnash</span>
+ which renders content. Only one renderer may be used; it is
+ selected at configuration time if building from source.
+ </p><p>
+ Available renderers are: AGG, OpenGL, and Cairo. In terms of
+ feature completeness, AGG comes first; followed by OpenGL and
+ then Cairo. In most cases, AGG is preferred for performance,
+ except cases where it is beneficial to have hardware accelerated
+ rendering (for example, when you have a very slow CPU but a very
+ fast graphics card). In this case OpenGL should be used.
+ </p></dd><dt>
+ RTMP
+ </dt><dd><p>
+ RTMP is the Real Time Messaging Protocol primarily used with
+ to stream audio and video over the internet to the Flash
+ Player client.
+ </p></dd><dt>
+ RTMPT
+ </dt><dd><p>
+ RTMPT is basically a HTTP wrapper around the RTMP protocol
+ that is sent using POST requests from the client to the
+ server. Because of the non-persistent nature of HTTP
+ connections, RTMPT requires the clients to poll for updates
+ periodically in order to get notified about events that are
+ generated by the server or other clients.
+ </p></dd><dt>
+ RTMPTS
+ </dt><dd><p>
+ RTMPTS is the same as RTMPT, but instead of being a HTTP
+ wrapper, it is a HTTP SSL wrapper (HTTP secure connection).
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">S</h3><dl><dt>
+ SDL
+ </dt><dd><p>
+ Simple DirectMedia Layer is a cross-platform multimedia free
+ software library that creates an abstraction over various
+ platforms' graphics, sound, and input APIs. Gnash can use it
+ as a GUI and/or as a sound handler. Note that the two usages
+ are independent of each other: you can use it for a task and
+ not for the other if you wish. At time or writing (2007-01-11)
+ the SDL GUI lacks menus and a performant input event
+ architecture; the SDL sound handler is the most feature rich,
+ supporting Video through ffmpeg.
+ </p></dd><dt>
+ sound handler
+ </dt><dd><p>
+ The <span class="emphasis"><em>sound handler</em></span> is the part
of <span class="application">Gnash</span>
+ which handles both event sounds and streaming sound. Audio
+ from external sources are also handled through the sound handler
+ when SDL is used. The sound handler must be selected during
+ configuration of Gnash when compiling.
+ </p><p>
+ There are currently two sound handlers available in <span
class="application">Gnash</span>:
+ ffmpeg and Gstreamer. The ffmpeg sound handler uses SDL for
+ mixing.
+ The Gstreamer-sound handler uses the available
+ plugins to decode the audio, so it might not work if some
+ important plugins are missing. The GST sound handler is
+ recommended (the default).
+ </p></dd><dt>
+ sprite
+ </dt><dd><p>
+ A sprite is an element of an Flash Movie. It's basically a
+ Movie inside another, having its own timeline.
+ </p></dd><dt>
+ Stage
+ </dt><dd><p>
+ The visible area of a Flash movie. The name derives from a
theater analogy. Graphical elements are referred to as
+ characters.
+ </p></dd><dt>
+ SWF
+ </dt><dd><p>
+ <span class="emphasis"><em>SWF</em></span> is the file format for
+ <span class="emphasis"><em>Flash</em></span> movies.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">T</h3><dl><dt>
+ Tamarin
+ </dt><dd><p>
+ The Tamarin project seeks to create an open source
+ implementation of the ECMAScript 4th edition language
+ specification. The code is used by Adobe as part of the
+ ActionScript Virtual Machine within the Adobe Flash
+ Player. Gnash does not use Tamarin; it already has a working
+ virtual server and most ActionScript classes are implemented.
+ </p></dd><dt>
+ timeline
+ </dt><dd><p>
+ In Flash technology, a timeline is a sequence of "frames". A
+ single Flash movie can contain multiple timelines, each
+ independently controlled (STOP or PLAY). At regular intervals
+ (FPS) the player advances all timelines in PLAY mode to the
+ next frame, looping back when last frame is reached.
+ </p></dd></dl></div><div class="glossdiv"><h3
class="title">X</h3><dl><dt>
+ X.org
+ </dt><dd><p>
+ X.org is the most commonly used X server; it was forked from
+ XFree86.
+ </p></dd></dl></div></div><div class="chapter" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="authors"></a>Chapter 5.
Authors</h2></div></div></div><p>
+ <span class="application">Gnash</span> is maintained by Rob Savoye.
Other active developers
+ are: Sandro Santilli, Bastiaan Jacques, Udo Giacomozzi, Chad
+ Musick, Benjamin Wolsey, and Zou Lunkai. Please send all
+ comments and suggestions to <code class="email"><<a class="email"
href="mailto:address@hidden">address@hidden
+ </a>></code>. Past and sometimes current developers are Tomas
+ Groth and Markus Gothe.
+ </p><p>
+ <span class="application">Gnash</span> was initially derived from
<span class="application">GameSWF</span>.
+ <span class="application">GameSWF</span> is maintained by
+ Thatcher Ulrich <code class="email"><<a class="email"
href="mailto:address@hidden">address@hidden</a>></code>. The following
+ people contributed to <span class="application">GameSWF</span>:
+ Mike Shaver, Thierry Berger-Perrin,
+ Ignacio Castaño, Willem Kokke, Vitaly Alexeev, Alexander Streit,
+ and Rob Savoye.
+ </p></div><div class="appendix" lang="en"><div
class="titlepage"><div><div><h2 class="title"><a name="fdl"></a>Appendix A. GNU
Free Documentation License</h2></div><div><p class="releaseinfo">
+ Version 1.1, March 2000
+ </p></div><div><p class="copyright">Copyright © 2000 Free Software
Foundation, Inc.</p></div><div><div class="legalnotice"><a
name="fdl-legalnotice"></a><p>
+ </p><div class="address"><p>Free Software Foundation, Inc. <span
class="street">59 Temple Place, <br>
+ Suite 330</span>, <span class="city">Boston</span>, <span
class="state">MA</span> <br>
+ <span class="postcode">02111-1307</span> <span
class="country">USA</span></p></div><p>
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ </p></div></div></div></div><div class="toc"><p><b>Table of
Contents</b></p><dl><dt><span class="sect1"><a href="#fdl-preamble">0.
PREAMBLE</a></span></dt><dt><span class="sect1"><a href="#fdl-section1">1.
APPLICABILITY AND DEFINITIONS</a></span></dt><dt><span class="sect1"><a
href="#fdl-section2">2. VERBATIM COPYING</a></span></dt><dt><span
class="sect1"><a href="#fdl-section3">3. COPYING IN
QUANTITY</a></span></dt><dt><span class="sect1"><a href="#fdl-section4">4.
MODIFICATIONS</a></span></dt><dt><span class="sect1"><a href="#fdl-section5">5.
COMBINING DOCUMENTS</a></span></dt><dt><span class="sect1"><a
href="#fdl-section6">6. COLLECTIONS OF DOCUMENTS</a></span></dt><dt><span
class="sect1"><a href="#fdl-section7">7. AGGREGATION WITH INDEPENDENT
WORKS</a></span></dt><dt><span class="sect1"><a href="#fdl-section8">8.
TRANSLATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section9">9.
TERMINATION</a></span></dt><dt><span class="sect1"><a href="#fdl-section10">10.
FUTURE REVISIONS OF THIS LICENSE</a></span></dt><dt><span class="sect1"><a
href="#fdl-using">Addendum</a></span></dt></dl></div><div class="sect1"
lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear:
both"><a name="fdl-preamble"></a>0. PREAMBLE</h2></div></div></div><p>
+ The purpose of this License is to make a manual, textbook, or
+ other written document "free" in the sense of
+ freedom: to assure everyone the effective freedom to copy and
+ redistribute it, with or without modifying it, either
+ commercially or non-commercially. Secondarily, this License
+ preserves for the author and publisher a way to get credit for
+ their work, while not being considered responsible for
+ modifications made by others.
+ </p><p>
+ This License is a kind of "copyleft", which means
+ that derivative works of the document must themselves be free in
+ the same sense. It complements the GNU General Public License,
+ which is a copyleft license designed for free software.
+ </p><p>
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same
+ freedoms that the software does. But this License is not limited
+ to software manuals; it can be used for any textual work,
+ regardless of subject matter or whether it is published as a
+ printed book. We recommend this License principally for works
+ whose purpose is instruction or reference.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section1"></a>1. APPLICABILITY AND
DEFINITIONS</h2></div></div></div><p><a name="fdl-document"></a>
+ This License applies to any manual or other work that contains a
+ notice placed by the copyright holder saying it can be
+ distributed under the terms of this License. The
+ "Document", below, refers to any such manual or
+ work. Any member of the public is a licensee, and is addressed
+ as "you".
+ </p><p><a name="fdl-modified"></a>
+ A "Modified Version" of the Document means any work
+ containing the Document or a portion of it, either copied
+ verbatim, or with modifications and/or translated into another
+ language.
+ </p><p><a name="fdl-secondary"></a>
+ A "Secondary Section" is a named appendix or a
+ front-matter section of the <a class="link"
href="#fdl-document">Document</a> that deals exclusively
+ with the relationship of the publishers or authors of the
+ Document to the Document's overall subject (or to related
+ matters) and contains nothing that could fall directly within
+ that overall subject. (For example, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.) The relationship could be a matter of historical
+ connection with the subject or with related matters, or of
+ legal, commercial, philosophical, ethical or political position
+ regarding them.
+ </p><p><a name="fdl-invariant"></a>
+ The "Invariant Sections" are certain <a class="link"
href="#fdl-secondary"> Secondary Sections</a> whose titles
+ are designated, as being those of Invariant Sections, in the
+ notice that says that the <a class="link"
href="#fdl-document">Document</a> is released under this
+ License.
+ </p><p><a name="fdl-cover-texts"></a>
+ The "Cover Texts" are certain short passages of
+ text that are listed, as Front-Cover Texts or Back-Cover Texts,
+ in the notice that says that the <a class="link"
href="#fdl-document">Document</a> is released under this
+ License.
+ </p><p><a name="fdl-transparent"></a>
+ A "Transparent" copy of the <a class="link" href="#fdl-document">
Document</a> means a machine-readable
+ copy, represented in a format whose specification is available
+ to the general public, whose contents can be viewed and edited
+ directly and straightforwardly with generic text editors or (for
+ images composed of pixels) generic paint programs or (for
+ drawings) some widely available drawing editor, and that is
+ suitable for input to text formatters or for automatic
+ translation to a variety of formats suitable for input to text
+ formatters. A copy made in an otherwise Transparent file format
+ whose markup has been designed to thwart or discourage
+ subsequent modification by readers is not Transparent. A copy
+ that is not "Transparent" is called "Opaque".
+ </p><p>
+ Examples of suitable formats for Transparent copies include
+ plain ASCII without markup, Texinfo input format, LaTeX input
+ format, SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML designed for human
+ modification. Opaque formats include PostScript, PDF,
+ proprietary formats that can be read and edited only by
+ proprietary word processors, SGML or XML for which the DTD
+ and/or processing tools are not generally available, and the
+ machine-generated HTML produced by some word processors for
+ output purposes only.
+ </p><p><a name="fdl-title-page"></a>
+ The "Title Page" means, for a printed book, the
+ title page itself, plus such following pages as are needed to
+ hold, legibly, the material this License requires to appear in
+ the title page. For works in formats which do not have any title
+ page as such, "Title Page" means the text near the
+ most prominent appearance of the work's title, preceding the
+ beginning of the body of the text.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section2"></a>2. VERBATIM COPYING</h2></div></div></div><p>
+ You may copy and distribute the <a class="link"
href="#fdl-document">Document</a> in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that
+ you add no other conditions whatsoever to those of this
+ License. You may not use technical measures to obstruct or
+ control the reading or further copying of the copies you make or
+ distribute. However, you may accept compensation in exchange for
+ copies. If you distribute a large enough number of copies you
+ must also follow the conditions in <a class="link" href="#fdl-section3"
title="3. COPYING IN QUANTITY">section 3</a>.
+ </p><p>
+ You may also lend copies, under the same conditions stated
+ above, and you may publicly display copies.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section3"></a>3. COPYING IN QUANTITY</h2></div></div></div><p>
+ If you publish printed copies of the <a class="link"
href="#fdl-document">Document</a> numbering more than 100,
+ and the Document's license notice requires <a class="link"
href="#fdl-cover-texts">Cover Texts</a>, you must enclose
+ the copies in covers that carry, clearly and legibly, all these
+ Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also
+ clearly and legibly identify you as the publisher of these
+ copies. The front cover must present the full title with all
+ words of the title equally prominent and visible. You may add
+ other material on the covers in addition. Copying with changes
+ limited to the covers, as long as they preserve the title of the
+ <a class="link" href="#fdl-document">Document</a> and satisfy these
+ conditions, can be treated as verbatim copying in other
+ respects.
+ </p><p>
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+ </p><p>
+ If you publish or distribute <a class="link"
href="#fdl-transparent">Opaque</a> copies of the <a class="link"
href="#fdl-document">Document</a> numbering more than 100,
+ you must either include a machine-readable <a class="link"
href="#fdl-transparent">Transparent</a> copy along with
+ each Opaque copy, or state in or with each Opaque copy a
+ publicly-accessible computer-network location containing a
+ complete Transparent copy of the Document, free of added
+ material, which the general network-using public has access to
+ download anonymously at no charge using public-standard network
+ protocols. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly
+ or through your agents or retailers) of that edition to the
+ public.
+ </p><p>
+ It is requested, but not required, that you contact the authors
+ of the <a class="link" href="#fdl-document">Document</a> well before
+ redistributing any large number of copies, to give them a chance
+ to provide you with an updated version of the Document.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section4"></a>4. MODIFICATIONS</h2></div></div></div><p>
+ You may copy and distribute a <a class="link"
href="#fdl-modified">Modified Version</a> of the <a class="link"
href="#fdl-document">Document</a> under the conditions of
+ sections <a class="link" href="#fdl-section2" title="2. VERBATIM
COPYING">2</a> and <a class="link" href="#fdl-section3" title="3. COPYING IN
QUANTITY">3</a> above, provided that you release
+ the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version
+ to whoever possesses a copy of it. In addition, you must do
+ these things in the Modified Version:
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type: circle"><p><b>A. </b>
+ Use in the <a class="link" href="#fdl-title-page">Title
+ Page</a> (and on the covers, if any) a title distinct
+ from that of the <a class="link" href="#fdl-document">Document</a>,
and from those of
+ previous versions (which should, if there were any, be
+ listed in the History section of the Document). You may
+ use the same title as a previous version if the original
+ publisher of that version gives permission.
+ </p></li><li style="list-style-type: circle"><p><b>B. </b>
+ List on the <a class="link" href="#fdl-title-page">Title
+ Page</a>, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the
+ <a class="link" href="#fdl-modified">Modified Version</a>,
+ together with at least five of the principal authors of
+ the <a class="link" href="#fdl-document">Document</a> (all of
+ its principal authors, if it has less than five).
+ </p></li><li style="list-style-type: circle"><p><b>C. </b>
+ State on the <a class="link" href="#fdl-title-page">Title
+ Page</a> the name of the publisher of the <a class="link"
href="#fdl-modified">Modified Version</a>, as the
+ publisher.
+ </p></li><li style="list-style-type: circle"><p><b>D. </b>
+ Preserve all the copyright notices of the <a class="link"
href="#fdl-document">Document</a>.
+ </p></li><li style="list-style-type: circle"><p><b>E. </b>
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ </p></li><li style="list-style-type: circle"><p><b>F. </b>
+ Include, immediately after the copyright notices, a
+ license notice giving the public permission to use the
+ <a class="link" href="#fdl-modified">Modified Version</a> under
+ the terms of this License, in the form shown in the
+ Addendum below.
+ </p></li><li style="list-style-type: circle"><p><b>G. </b>
+ Preserve in that license notice the full lists of <a class="link"
href="#fdl-invariant"> Invariant Sections</a> and
+ required <a class="link" href="#fdl-cover-texts">Cover
+ Texts</a> given in the <a class="link"
href="#fdl-document">Document's</a> license notice.
+ </p></li><li style="list-style-type: circle"><p><b>H. </b>
+ Include an unaltered copy of this License.
+ </p></li><li style="list-style-type: circle"><p><b>I. </b>
+ Preserve the section entitled "History", and
+ its title, and add to it an item stating at least the
+ title, year, new authors, and publisher of the <a class="link"
href="#fdl-modified">Modified Version </a>as given on
+ the <a class="link" href="#fdl-title-page">Title Page</a>. If
+ there is no section entitled "History" in the
+ <a class="link" href="#fdl-document">Document</a>, create one
+ stating the title, year, authors, and publisher of the
+ Document as given on its Title Page, then add an item
+ describing the Modified Version as stated in the previous
+ sentence.
+ </p></li><li style="list-style-type: circle"><p><b>J. </b>
+ Preserve the network location, if any, given in the <a class="link"
href="#fdl-document">Document</a> for public access
+ to a <a class="link" href="#fdl-transparent">Transparent</a>
+ copy of the Document, and likewise the network locations
+ given in the Document for previous versions it was based
+ on. These may be placed in the "History"
+ section. You may omit a network location for a work that
+ was published at least four years before the Document
+ itself, or if the original publisher of the version it
+ refers to gives permission.
+ </p></li><li style="list-style-type: circle"><p><b>K. </b>
+ In any section entitled "Acknowledgements" or
+ "Dedications", preserve the section's title,
+ and preserve in the section all the substance and tone of
+ each of the contributor acknowledgements and/or
+ dedications given therein.
+ </p></li><li style="list-style-type: circle"><p><b>L. </b>
+ Preserve all the <a class="link" href="#fdl-invariant">Invariant
+ Sections</a> of the <a class="link"
href="#fdl-document">Document</a>, unaltered in their
+ text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+ </p></li><li style="list-style-type: circle"><p><b>M. </b>
+ Delete any section entitled
+ "Endorsements". Such a section may not be
+ included in the <a class="link" href="#fdl-modified">Modified
+ Version</a>.
+ </p></li><li style="list-style-type: circle"><p><b>N. </b>
+ Do not retitle any existing section as
+ "Endorsements" or to conflict in title with
+ any <a class="link" href="#fdl-invariant">Invariant
+ Section</a>.
+ </p></li></ul></div><p>
+ If the <a class="link" href="#fdl-modified">Modified Version</a>
+ includes new front-matter sections or appendices that qualify as
+ <a class="link" href="#fdl-secondary">Secondary Sections</a> and
+ contain no material copied from the Document, you may at your
+ option designate some or all of these sections as invariant. To
+ do this, add their titles to the list of <a class="link"
href="#fdl-invariant">Invariant Sections</a> in the
+ Modified Version's license notice. These titles must be
+ distinct from any other section titles.
+ </p><p>
+ You may add a section entitled "Endorsements",
+ provided it contains nothing but endorsements of your <a class="link"
href="#fdl-modified">Modified Version</a> by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+ </p><p>
+ You may add a passage of up to five words as a <a class="link"
href="#fdl-cover-texts">Front-Cover Text</a>, and a passage
+ of up to 25 words as a <a class="link"
href="#fdl-cover-texts">Back-Cover Text</a>, to the end of
+ the list of <a class="link" href="#fdl-cover-texts">Cover Texts</a>
+ in the <a class="link" href="#fdl-modified">Modified Version</a>.
+ Only one passage of Front-Cover Text and one of Back-Cover Text
+ may be added by (or through arrangements made by) any one
+ entity. If the <a class="link" href="#fdl-document">Document</a>
+ already includes a cover text for the same cover, previously
+ added by you or by arrangement made by the same entity you are
+ acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+ </p><p>
+ The author(s) and publisher(s) of the <a class="link"
href="#fdl-document">Document</a> do not by this License
+ give permission to use their names for publicity for or to
+ assert or imply endorsement of any <a class="link"
href="#fdl-modified">Modified Version </a>.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section5"></a>5. COMBINING DOCUMENTS</h2></div></div></div><p>
+ You may combine the <a class="link" href="#fdl-document">Document</a>
+ with other documents released under this License, under the
+ terms defined in <a class="link" href="#fdl-section4" title="4.
MODIFICATIONS">section 4</a>
+ above for modified versions, provided that you include in the
+ combination all of the <a class="link" href="#fdl-invariant">Invariant
+ Sections</a> of all of the original documents, unmodified,
+ and list them all as Invariant Sections of your combined work in
+ its license notice.
+ </p><p>
+ The combined work need only contain one copy of this License,
+ and multiple identical <a class="link" href="#fdl-invariant">Invariant
+ Sections</a> may be replaced with a single copy. If there are
+ multiple Invariant Sections with the same name but different
+ contents, make the title of each such section unique by adding
+ at the end of it, in parentheses, the name of the original
+ author or publisher of that section if known, or else a unique
+ number. Make the same adjustment to the section titles in the
+ list of Invariant Sections in the license notice of the combined
+ work.
+ </p><p>
+ In the combination, you must combine any sections entitled
+ "History" in the various original documents,
+ forming one section entitled "History"; likewise
+ combine any sections entitled "Acknowledgements",
+ and any sections entitled "Dedications". You must
+ delete all sections entitled "Endorsements."
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section6"></a>6. COLLECTIONS OF DOCUMENTS</h2></div></div></div><p>
+ You may make a collection consisting of the <a class="link"
href="#fdl-document">Document</a> and other documents
+ released under this License, and replace the individual copies
+ of this License in the various documents with a single copy that
+ is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+ </p><p>
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you
+ insert a copy of this License into the extracted document, and
+ follow this License in all other respects regarding verbatim
+ copying of that document.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section7"></a>7. AGGREGATION WITH INDEPENDENT
WORKS</h2></div></div></div><p>
+ A compilation of the <a class="link" href="#fdl-document">Document</a>
or its derivatives with
+ other separate and independent documents or works, in or on a
+ volume of a storage or distribution medium, does not as a whole
+ count as a <a class="link" href="#fdl-modified">Modified Version</a>
+ of the Document, provided no compilation copyright is claimed
+ for the compilation. Such a compilation is called an
+ "aggregate", and this License does not apply to the
+ other self-contained works thus compiled with the Document , on
+ account of their being thus compiled, if they are not themselves
+ derivative works of the Document. If the <a class="link"
href="#fdl-cover-texts">Cover Text</a> requirement of <a class="link"
href="#fdl-section3" title="3. COPYING IN QUANTITY">section 3</a> is applicable
to these
+ copies of the Document, then if the Document is less than one
+ quarter of the entire aggregate, the Document's Cover Texts may
+ be placed on covers that surround only the Document within the
+ aggregate. Otherwise they must appear on covers around the whole
+ aggregate.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section8"></a>8. TRANSLATION</h2></div></div></div><p>
+ Translation is considered a kind of modification, so you may
+ distribute translations of the <a class="link"
href="#fdl-document">Document</a> under the terms of <a class="link"
href="#fdl-section4" title="4. MODIFICATIONS">section 4</a>. Replacing <a
class="link" href="#fdl-invariant"> Invariant Sections</a> with
+ translations requires special permission from their copyright
+ holders, but you may include translations of some or all
+ Invariant Sections in addition to the original versions of these
+ Invariant Sections. You may include a translation of this
+ License provided that you also include the original English
+ version of this License. In case of a disagreement between the
+ translation and the original English version of this License,
+ the original English version will prevail.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section9"></a>9. TERMINATION</h2></div></div></div><p>
+ You may not copy, modify, sublicense, or distribute the <a class="link"
href="#fdl-document">Document</a> except as expressly
+ provided for under this License. Any other attempt to copy,
+ modify, sublicense or distribute the Document is void, and will
+ automatically terminate your rights under this License. However,
+ parties who have received copies, or rights, from you under this
+ License will not have their licenses terminated so long as such
+ parties remain in full compliance.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-section10"></a>10. FUTURE REVISIONS OF THIS
LICENSE</h2></div></div></div><p>
+ The <a class="ulink" href="http://www.gnu.org/fsf/fsf.html"
target="_top">Free Software
+ Foundation</a> may publish new, revised versions of the GNU
+ Free Documentation License from time to time. Such new versions
+ will be similar in spirit to the present version, but may differ
+ in detail to address new problems or concerns. See <a class="ulink"
href="http://www.gnu.org/copyleft"
target="_top">http://www.gnu.org/copyleft/</a>.
+ </p><p>
+ Each version of the License is given a distinguishing version
+ number. If the <a class="link" href="#fdl-document">Document</a>
+ specifies that a particular numbered version of this License
+ "or any later version" applies to it, you have the
+ option of following the terms and conditions either of that
+ specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by
+ the Free Software Foundation.
+ </p></div><div class="sect1" lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
name="fdl-using"></a>Addendum</h2></div></div></div><p>
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and
+ license notices just after the title page:
+ </p><div class="blockquote"><blockquote class="blockquote"><p>
+ Copyright 2008, Free Software Foundation.
+ </p><p>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation
+ License, Version 1.1 or any later version published by the
+ Free Software Foundation; with no<a class="link"
href="#fdl-invariant">Invariant Sections</a>, with no <a class="link"
href="#fdl-cover-texts">Front-Cover Texts</a>,
+ and with no <a class="link" href="#fdl-cover-texts">Back-Cover
+ Texts</a>. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+ </p></blockquote></div><p>
+ If your document contains nontrivial examples of program code,
+ we recommend releasing these examples in parallel under your
+ choice of free software license, such as the <a class="ulink"
href="http://www.gnu.org/copyleft/gpl.html" target="_top"> GNU General Public
+ License</a>, to permit their use in free software.
+ </p></div></div></div></body></html>
Index: doc/C/preformatted/gnash_user.info.in
===================================================================
RCS file: doc/C/preformatted/gnash_user.info.in
diff -N doc/C/preformatted/gnash_user.info.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/C/preformatted/gnash_user.info.in 3 Mar 2008 23:46:44 -0000
1.2.2.2
@@ -0,0 +1,1963 @@
+START-INFO-DIR-ENTRY
+This is gnash_user.info, produced by makeinfo version 4.11 from
gnash_user.texi.
+
+* Gnash User Manual: (gnash_user). Gnash
+END-INFO-DIR-ENTRY
+
+
+File: gnash_user.info, Node: Top, Next: Introduction, Up: (dir)
+
+Gnash User Manual
+*****************
+
+* Menu:
+
+* Introduction::
+* Using Gnash::
+* Installing and Configuring Gnash::
+* Reporting Bugs::
+* Glossary::
+* Authors::
+* GNU Free Documentation License::
+
+--- The Detailed Node Listing ---
+
+Introduction
+
+* Audience::
+* What Is Supported?::
+
+Using Gnash
+
+* Gnash Command Line Options::
+* Gnash Interactive Control Keys::
+* User Configuration File::
+
+Installing and Configuring Gnash
+
+* Requirements::
+* Downloading Gnash::
+
+Reporting Bugs
+
+* Get a Fresh Binary Package::
+* Determine if the bug was previously reported::
+* Review the bug writing guidelines::
+* Filing a bug report::
+
+GNU Free Documentation License
+
+* 0. PREAMBLE: 0_ PREAMBLE.
+* 1. APPLICABILITY AND DEFINITIONS: 1_ APPLICABILITY AND DEFINITIONS.
+* 2. VERBATIM COPYING: 2_ VERBATIM COPYING.
+* 3. COPYING IN QUANTITY: 3_ COPYING IN QUANTITY.
+* 4. MODIFICATIONS: 4_ MODIFICATIONS.
+* 5. COMBINING DOCUMENTS: 5_ COMBINING DOCUMENTS.
+* 6. COLLECTIONS OF DOCUMENTS: 6_ COLLECTIONS OF DOCUMENTS.
+* 7. AGGREGATION WITH INDEPENDENT WORKS: 7_ AGGREGATION WITH INDEPENDENT WORKS.
+* 8. TRANSLATION: 8_ TRANSLATION.
+* 9. TERMINATION: 9_ TERMINATION.
+* 10. FUTURE REVISIONS OF THIS LICENSE: 10_ FUTURE REVISIONS OF THIS LICENSE.
+* Addendum::
+
+
+File: gnash_user.info, Node: Introduction, Next: Using Gnash, Prev: Top,
Up: Top
+
+1 Introduction
+**************
+
+Gnash is a free SWF movie player. It is available as a stand-alone
+application or as a plugin for several popular web browsers. It
+supports playing media from a disk or streaming over a network
+connection. Some popular video sharing sites like YouTube are supported
+on a wide variety of devices from embedded ones to modern desktops.
+
+ Gnash has a better focus on security, allowing the user tight
+control of all network or disk based I/O. Gnash also supports extending
+ActionScript by creating your own classes. You can write wrappers for
+any development library, and import them into the player much like Perl
+or Python does.
+
+* Menu:
+
+* Audience::
+* What Is Supported?::
+
+
+File: gnash_user.info, Node: Audience, Next: What Is Supported?, Up:
Introduction
+
+1.1 Audience
+============
+
+This manual is primarily focused on users interested in how to get
+Gnash installed from a package, and basic usage as a web browser
+plugin. For more technical details, please refer to the Gnash Reference
+manual.
+
+
+File: gnash_user.info, Node: What Is Supported?, Prev: Audience, Up:
Introduction
+
+1.2 What Is Supported?
+======================
+
+Gnash is known to compile for most any POSIX and ANSI C++ conforming
+system if you have all the dependent libraries installed. Systems we
+test on, and which Gnash is known to run on are Ubuntu, Fedora, Debian,
+Mandriva, OpenBSD, NetBSD, FreeBSD, Win32, and Darwin (OSX) primarily.
+Occasionally other platforms are built, primarily by those distribution
+maintainers. This includes BeOS, Haiku, Syllable, OS/2, Solaris,
+Slackware, and Gentoo.
+
+ Gnash is capable of reading up to SWF v9 files and opcodes, but
+primarily supports SWF v7, with better SWF v8 and v9 support under
+heavy development. With the 0.8.2 release, Gnash includes initial
+parser support for SWF v8 and v9. Not all ActionScript 2 classes are
+implemented yet, but all of the most heavily used ones are. Many
+ActionScript 2 classes are partially implemented; there is support for
+all of the commonly used methods of each class.
+
+ Gnash has implemented about 80% of ActionScript v2.0, and has begun
+implementing ActionScript v3.0. Gnash supports the majority of Flash
+opcodes up to SWF v9, and a wide sampling of ActionScript classes for
+SWF v8.
+
+ As ActionScript 3 is a more developed version of ActionScript 2,
+many of the same classes work for both. Support has been added to
+Gnash's ActionScript library to support the new ActionScript 3 filters,
+which get applied to every class. Implementing ActionScript clases is
+often the easiest way for new Gnash developers to make a contribution
+without a deep internal knpowledge of Gnash.
+
+ Gnash has included video support since early 2007, but this is an
+ever changing field of reverse engineering. Many of the popular video
+sharing sites use SWF v8 or v9, which Gnash still has imperfect support
+for. This is improving all the time, so often builds from a development
+snapshot will work when using the older release packaged in your
+distribution doesn't. You can find daily snapshots of the latest CVS
+tree at: http://www.gnashdev.org/dev_snapshots
+(http://www.gnashdev.org/dev_snapshots/).
+
+ Gnash uses ffmpeg for codecs, so any file supported by Mplayer
+should work with Gnash. Gnash supports the loading of patent free
+codecs like Ogg Vorbis or Theora from disk based files, while work is
+being done to support these codecs when embedded in a SWF file. Ffmpeg
+contains the codecs used by the current SWF defintion, FLV, VP6 (ON2),
+H.263, H.264, and MP3.
+
+
+File: gnash_user.info, Node: Using Gnash, Next: Installing and Configuring
Gnash, Prev: Introduction, Up: Top
+
+2 Using Gnash
+*************
+
+When used as a standalone player, you can play any Flash file from the
+command line by entering a command of the format:
+
+
+ gnash <option> <flashfile.swf>
+
+The only required argument is the name (and location)of the file to be
+played.
+
+ The available options are listed in the following section, or you
+may view them in the terminal window by executing the following at the
+command line:
+
+
+ gnash --help | less
+
+ The source code download of Gnash includes several example .SWF
+files. They are located in the `testsuite/samples/' directory of the
+Gnash source directory. If you have installed Gnash correctly, issuing
+the a command similar to the following plays a short animation of a car
+swerving and crashing:
+
+
+ gnash
+ /home/<username>/gnash/testsuite/car_smash.swf
+
+PNG
+
+
IHDR 6 ÀSh pHYs : Êduh tIMEÕ EöH
IDATxÚì}ydU}ïï,w¿µvWwÏ*
à ì*EÑã.F1Ä$ïÅ|address@hidden>ý©S·îrÎ=ç{¾¿åü ñYÏ;ÿíÇà yð=6mA Ðü?¹äK.CEÖ öìÙ}ü¶Í«»ÎÃ=pç7+¥Æø}øè9ç½hzú C©É
øìnáÆF¥±ãÓ$ñIC±¶íUã(ô=+XóÀ°Kq^Ê dÍbµË¥R)¬" ~µ+j
+¢c
½,iËÕ8a1vüb%I2HÈ×/%Ij+*Yd¹Å4Ir
ÛÏÒص-& 1¼,<address@hidden:,<ßg\!jì°4,)2
lÎ"×-0&
+LÁcÛñV)Ór9ãER%Rj:3Ó Ra-3B-ÎiR(%8³,SH
6ÏlÛR!-42¤È,ËæBaèiZBJ´¢$£%
$`-9¡¦¤4ÖcbH))ÁJ#ÆT*A
Q¨Rª4Rª%!D+
a$&D)Ý´Va¥Âz¾ZBZk47Ui 4ÿï¾zèÇóçv»îÜõAkèw»ù¢Âé
¢Rw-Tg¡vRPÚSwÉ©aJ©R Ý¢!¥ojN
C
+5×Ôb)kj!(%J#&¦àÜ4
©æÞ¬äe[Bj¤¹F¦à©m»\HEIT`HZ¶Ã¸ X+ R¤¦åpÆ¥&J$é2Y&
+kÃeYbÛÝnì²,ò\ T
+Äaiäû
K¬S
B1ͦͳÐóiÆ
,%s(Í,
+B
¶[Lı
DñÈ´I{®ÅÒ"¢f!IÂïeL0õ¸ÓÂDEøIܪVÇ¢DP$ò³¸Y®Ö¢851ತU,EQbQɵÅÓãã$5ÊÂ=o}Í`f¶Î[Ô]&jãa Àþ¥ºÒ
·Ýò¾ÿ·Ðóιàò±8
+Î:ã$4Oº½4K³[¿ßDöÏ×ßÂ,î|/0Çâötu|¢ÙN}+¤t¦ËcSÍVXrU¦,Ú_ªlh¶ÚåIËãýÅʦf«9V²ÌRÉ~¿²¹Õ¬ÝNJ«ÛÅ
A{¶Rò; Ù1ÝZÔË¥b'Äت$a£T*u"nLÓR×ÅJe!$òYÒðÕ0J<rDÚpca\JS¦M§0
AÁ3nhÖ´½ñ(êø0D`8å4<ÏI2À:&V1×sLQ!ê±4t7ɤAÆÈBÛñÒT+°mÇO3f
´!ydÙ~f¶E¸$ZDUȲԶ(address@hidden)2Ã0¹P+address@hidden
+!AJ2B-)%Xj¬#ÔB»Ð±!¥$w7ÂT)I0V BD+0Öº5´BÍÍõC+=wÐóX¥»Ð3ÁnqávswÇK¥1Ò]$"Ì(Å
5¤Òd¡v 9Ww[fR"ŵ8ç¦AÐSKpfÀÀ55WKÀ¦`©iYKB¦äe9ã&Õ
ÉcËò2Y*v!MÇ¢L-BÓ.¦Iì:fÊR1µ
+Y¹rÀ:%¥ëºI&
Äú,鸤Ü$Bc¥×+ÄIfJ"W¤-Ç+GqâÙ)[¦
§0
a·«¬ájaÐ.ì(#7-¿RÁ
SUÛpÆã°Y*úA¬]
AQNÂÙR©Ú
Sײh¦Xªµ¨àèLû<:P¬LµÚ²Obáîn6ÆËv'3U²ß¯li5fjU¿cÄgâævóÀxµÔ4MÓßÐi«VÚ¤b³$£]¿öº:ö)'n÷<·jÀmwÞkÛ^Ggzi~ëæ;ÇÇkïÿ¿N.xÑKN:å
Ç&_ɸT
+KAixr÷^ÏóôÀ®N¤ÇiÌãrÐ.Ç6"×ÈR]Zû
+åÙgËûI0í'gê¢;©
ûâÔìl½\0!âýVaC}v¦\rê!Ré,u'RÁ«ñ6²ÆÚÍBÁ¯w8Ñ¡¢å
=ëùÅz;3PÊ ³WntðTºiT·Ýr³Ù¸ÅuÓ©4Ûkã ¥,iP§Ún·]v"±«íNËuÌNkQ
+íXHi)âGaDzìN,Jr(0,'8δÅ5 Ω4²4 F)Á:å¥!6¼0J
bx"address@hidden f&Ð$Zq¡h%Ó$Z®ËÀFq
ÌX
address@hidden
+YÆ ÀyªfÓ Lh!Ô$c\0®àRcƹÖÝ¢1.¤F+!¥
+¸PB*!µè~/r¡ÔBj!UÏR)
TBRHÅ¥B
+ ©º'Î5â¼{1Î¥FJI.cL>Tä1®µf-Ô æën¦iJî6Ef£i)3
F¦$SZ2Æ¡¦Ö\(¥1&FrÐ)ÊÒQ+J2T&K#L(I F Ç,ë¾èØ4H!ÈðÃ(2
¦ZñP/
+CÓ4ÃDi+ìFÑB¿Êr¨mZn'Êp¦$n¶ßRÈTØiÔ4íb;,"n²¸a8åV;pmÒIHSmµZ¾gµ"¤²&¶ÇÚ¦ïÙÍPhQ
ÚuÏsÀ*P¤´ë_¨·3%£ÎçëØ¢,U^Ì8~µÞ\K
ÜÍÂN¡6Ûh]ÜN-îw
+fêõJÁªGTÄÓvqóÌÌÁjÙé Íf
oC}v¥\iK,ÈjÖ§Ëåòl[QJÀÐÑé'=3K[·d¬Ûs@(-¥Vfëu)address@hidden iÄÁR]ÛÓ
òÄL=(Ø*â^ì÷³õVÉÅíÔæѧ85;Û(ÌFDU|Àò7Ôë³; Èf©;ÑlÌ^=PX´5ÖiÍ
FGPIRÛ³¾_l´3g
+IXw½R³[D¤ÒÍ¢åíÈ1uÄ-4L§Üê´iØN»ã9´`5SítÚcubмR´ÇìD
+d¤Û²X`Jä¤QÇ´ì0b8?V"I§a(Ñ)'<áFQbR0$X©G±Iqâ7c$SZ¤YiSBLiÉYb$© -2X"b$ B¥iÆ4ó.Zq
$x¦e¼Vgq Ä8Φq
À¹RH
ù<ZI)¥B\s©RRJ%¥BJ¥
ÐBuÁKJµªæqM*!ô¡S¤BIBH¥K-e÷ús·RJÕ-¢îÝ
Ds
s¡çLÉ ¹ Á3 ±¹ÊÎ×=Ãe¤È42³4#§Lk)0³4#¤Ljɤ6²4Å&©oê3NÉáY©$
ÂYÜE+!å¸ûf£(6)2,D
eÐ(address@hidden
+-Ë 2ÑØ£À:¼_YD gÚNã¶ey 1Ì%-Ó.vØ6
æOSnwææ`6©]m·ÛÏlEH³&±«V£àÙÍP#Ñ£´¾ï5Iu¤h9ìÔ}¿Ðh3§âάëĦ<U~̺~¥Ñ
=KGÜaáAǯÕí¢KÚ©)¢vaª^¯W
+f=¢*9`ùfgÝ6 ¡îÆìj¥8ÓT6=ÙjLW+åÙ3!P´mÛq%6
º{¸:z½uý×nþôg¯ÿþ]?VJõ
¥>ôçúo_üf¥\ܲibÓÆ×$µÆa,LÌ8xi0S*UÖã%ªÂý¥Jíàl§ìéû29P(OÎÖ[Õi'Îx¥©úl}¬d7BùA»8U©U½ÙP9Kü©Vcv¬â϶¥
°kæL¹\¬·¹Mb+i{¶T*5Úc0¦<õåF;ö,JO¦u·PiµÂ"f)Öp¼J»<¤xÓò*v§è#Ñ4ݱN«U*ØíH]vÁs:¡¢(QF1
Úçv"nb&'¢ãxAÈ-*rdÚ±/2ËЩ0-Ë¢Ä6QÊ©¡1W$q #jyQ;¶eUD
address@hidden,address@hidden SBÍ,åBÆ ¨S3K¡q abÊQ3®æ11ãi0QJ`
ThΪÕ-J4gfc¥Õ\¤A£®Mj¾ØW º&°EWÐ
+c$¤D °Öc,D×¢µæÁF fSÁÁÀ8Í0¡YÆ)A£neÓ43(I bb±45)M2
kbÉ$5L¤
!±%ÓÄ0Í$t¾©MÃLNbÂP"6,;NI!TØ°8N-%
¨åÆQlÛ4Î ÉX~®c":Õ¦GëXa,)dúiÔq'¸¹
®:ëuÂÌ¢+G¤mÇõ;aj*¶bmÛ-vȳQÄLÍ[[î´ß¥ABhXnµÝjv3DD5±3Öi5KE§hmWv³TòaáXârÚ®KÅF;shÆuuê
R¹Ñ}K¦Òçɬ_¬4aÑ
¹*ñJµz£U)Ðvb qõz}¼ÜÂâÆúìÁ1ÿ`L5CýÍÙµ±âÁ°Q[;address@hidden>I¨ÞhÝsïOºHtÎÙ'~/`ÕÆË[7M>úøî^üJ
îéa¸÷Ó¶£¶\yŶl¸üÒópìi--*z2ëT*v]®HE$«cí
®4d³åêd§Ó/D:Ï*SN«V±CnP9ë7íæä¸×I°©Nq*îÔkc~'¦WË¢ÆXµ&Ò¥1±ª<iV*å0æ¾É-ª¬Y*W¢8+ÚJaO³V¡Tã¤äam¿PMâ¸ì&M"Ûn¡Æa¥`¦RÕqü±4îTKv°
¡åUxNÊÁ" µ27eÊ¡¾âï{®):
"Ïó箥[HÅ®ëqÎ<+0°Jl×<ó"H-Ç<ó]C(L!5m_ÔsL¡¹aºJd®cJ©M,iÊÇJYTj"address@hidden
L±f¦e)--"qÃ4µ¦ ¸aZËÄEa¢HRJ(bbMÁh¡`õ\ !cM Ƹ{a
address@hidden&c¬ç¾ÄzþúhþvceP6àîýEIîÂ#ahi0ÆóµM¢QÄÓÒ;U
Ì©aiÅlÛP" address@hidden&¨ÛÔ¶)´uf;Â1Å:µGæÚX%:±WòÌs
©Ñ©éø%Ïä(5l_²Ø÷l&ÀÄZ¾äQÁw2¡lʱáén¿bÂ5%¢¡ï²yÖȺ~1MÓ¶°
\¿%QɧLTµ,IÂjÉ6¡m{ãiÜ®Ý8C·ÊâVµìGrHL2OZr1
g2dDÚ*WÊa©¯²F©\¢¤ìñF±R`¬HaÑ('Nk¢bYwoÛõ©ß±
u»¸1ìÌLÕH»¤møSIpp¢Vm²`Ä®±h¶\*Å©°(7sjDQôã<ü£ûþñO îòbt°P³Ù¦\ýúËw>ú¤V
+õP,ô¦·¼ëõo~ÅbÛÑÛº<m¤!)åÍ·Ý511ùÏ×ßê)®ëvÂÔ5À¥,)UÆZ¤`Ë
+"®JãNXòP"ÕÝbÓîFÄ,`u»8Ñi·ªE§,?v×êuÆã°Q*úX(Æf%
b1¸M"·üB1cJ<¶]¿F©gÓ¶Ê:¶W¢ØwH*MÍ;[£ØwiÂi׬ġïZ1CX
½P¢lX¹®Óµ²õx9dÒÄBa[²Ø²
(±i¹YÆ»Vv-bÃr³Y&æL©é2Ù&aϳ̶h6gew8Ë,²9Ó¯-xfúÝ4¹i¨¬ke'address@hidden<gt_deD´Rc5ç¬ìÝ"address@hidden<
5`zÎ_ jávî®Â4`Ða¢Â´Æ »îQI0R½u§HªnÑSJ¬"¦Ì
KÀÐ[ì6µ!ë65EJ!CÌ0-Æ
A´CÔ0mƸIÐÝ7ë0Æ,ðCo6ul#åë
ËÇ6S2D]Åm¥LSĺ"ìù~¥±#Xd;n2j,É"Ûñ$³MàÚÒ<°b$®M2AASãÐwÍ$Ã-'aPôí0CD
Ô.'Q§XpD#«EíBÁbiLÓÛ
B!c
+|6=¿D©g)®]5]¿Ú £¢aiÖtýñNÐ)ûfÈ(â
Ûì´ce§"êVaªÓªWüf¦nSw"lÏV+ÅV(m"k,ër9
EP_EOþÚë.è´Ï=ëT)address@hidden
óV«®·þøjããùÂ-®Ø¤Ì"Ba/
R¥$¥òXÒ,« ò)G¦M¯0Ö
¢GajÖtüZ´K¾1xÛòÇÃN«\t
+
§bÁE!!f)Û
&ÂD
,i{^!JM¥Ä®H;®WÔ1¥X`»Å(N\3ej Zn1cϦ
ZF¦]LâÈsÍcaÒ8ô\+auBÌK#DZS¦pLÅí¤LR, ÛÇådL¤ë9J-ËÎ0(HMµH
Ëɳ(hRc¡O#P6ce\R¶`Ì4)s#Jf
+#ØÔRa¤ J2B
)ÆZéúà¥#X+A!¤8î@%!X*z® V
+!h×
§4 wðÒ`.v#¤æâ
Ûuô¡" 4 ÑáøÕu("@zñ)z"æ!5WÄZ˹èîѹg/%ÆDI
1RR
+J°Téù"ÅR"¤9"¦Ü DH@ 6¤à¥Bj$`C F©Á¥"address@hidden WTF
±Ì6)©.cmk¤1\%mf\à:"KlÛîíW¶å¤D+dI
Y¶¦eÔ¦äåøi:fÊÐ<4bÄm¤L»ÄïÙqDÅÔ.&qPð(ÓT§Ø,dIÇ÷¼(ÊágIà{^p
+
=v\¿Ec*ÈÚ®W£Øs0b-ǯaXtiÂ
Í[? tZ墦åOF¹ä1Ý1ñ0hTJ
v$Ma«õR¹Ü¸E8¢>gN÷¿íõ/ît:µ²iâ:}bo¡X£pã1BÈaGütçµüä_¡_ûõß¹æí¿¥µÞ7½ÑäH¬À§þùdod\QÄõXÒö
(fÚ(dQÓ/¢Ù¦ÈcqÓ+£(qm$´ÍÓëWÂ(*84S¦H?
AÑ·Nk[n5o'
!N9ϵÓy4IÀs»Q¥ãzi&"address@hidden'SHÔ¶
Tñ°ëvmI¬ElX~&¶m2JçûÅÆ!êXŸÂH"l
+Ÿ¤XkdH¦Í¹0(( =E¤4"5LsfX*¢eF[pfD*¤#t¾(ÀØR#P©ÚããçR©y¿
Êy2¢À.EÅyn¥0FZ£CÌ!
æCP÷hUuÁfQj-±h-¥»ÁX ÁüÝ Ò ÝH1¬ ®UKIL°RzPe
¡óáèð"ÌÑL)!JA·©¥ä´^ݦ],S¨ÌcµZ#*EF
KpA)hM¥è¾h>÷f»1z,3M*ÒrË,ò9,sK-Ëàz¾_$Ø<mÛÎ4ÒÈâ,²m7eÜ¢
Á,²l/Ímb¡¨ä¡å¤ÛâéÓ8v]ñ®&QÏ ò³$t]'address@hidden,±0]
SdCØL8UYËöÇ¢
],ºqìN%ÛÅ¥èÅ,,Ûî4|÷Õ/ÙcÙâ8¬A) ì?0#¥Xttã)ÐßýÍGél£ýà#»qÚFY°´»{
address@hidden)rÁ\rÉe¬û¨]y±|×åÜűM;ïtñ'¦r뺲K³6=bcñü36nüþíôë+
ÀyÈ%\Ö&·ÿÍêÎÿëÁ9ï½÷¶"ÎÛ0\ryºHX¹äKX¹äK.9`åK.9`åK.¹äK.¹äV.¹äV.¹äKX¹äK.9`åK.9`åK.¹äK.¹äV.¹äV.¹äKX¹äK.9`åK.9`åK.¹äK.¹ä2м
FøÜ^CÙ@(¡ÃÁÄP2 ¨Ú+Ø+\rÀúE¥¡×¾if ÔÜ! Ì$p ¡ÊL
address@hidden@iD0R¦Â ³)<ÖDH¡©
;îOÀp<BHÐé Åsw
b9V¡¤¥´Åhm9MlZ®§{åI¥ë)h2Î
+¶Q¶Àæ!æcé¨ÈÔ¬b
¡æªAP4¡fEò×KX?Orx"Zpÿ,úò
åPdxEÛ¶)¥éÁ$bÓ°s0©¹ª´¥µ'% B)¥ À Â5M«Þ ]BlÎßÜ*Óp4BÈÖz!e»_ö
address@hidden<¯[´gf'address@hidden:H»fs®p ÀRíW¢CÙ¦Ï_GJ hi)ÕÞùHøø
dl*ùH«(¡ @êìÛ¾(Qª¸0 B.1G
address@hidden,0,%J&L:P2¡fCÁÌR.9`YbÓ142x°:address@hidden)¢Á
nc!Dñêí~Ç÷Úö
¯z&>ü5 Ùý¿öÐNMH/}ÍaD
u È4hгÏ9=:b+ ( ¡µPªÙjeiÚh4 h·Z õ®ÝÆ Pz !àDíÕRmRóÏÄÛ
ÂðÍÇèc6T-¨ÙPÌá,°zeo?EÖäS0Ká) S®h
cÝÝöqè|Ùå8J ðÓ@;²êýÞ d
p». 0õÃ{á÷.w{HSç6zás+ÖOêIP(Üõ}ÉvM)ÕF*$J Ũvm³f«s'D mrÁ
le+¹üBÖ!|áIszê쪷á)ë
Ss:°2u«Wúú7ùË^Á >ZP}Quþãñâ>%1&´Ô
nÄÐÖj÷âq-ïCJ-A& gÚ)RÐ6GýÊ&½¹¤Um% ¹+;§;`íáÏîEb¿wéy]ø®wáñq à=?H{>ϼåM
õZnWúÖƾéCãPÈf«ÇQÐ ×õ}oçÎGâ8"=¼Ì²R±4¬£Þ1 IDAT7È VR9>|§Ô²¨
,@E{¡Psþ3гjÎð^ÃØ4·ã»©¨DãdZÿT
+ `"GÔ06
+ÐÏØ[H BVÑ! ݯq«µÔÀößPÊ`êQ²OÉûÜäz¡Hkâè~öÛùÍëi%4áïvw?ÂG{§
bÜú=ù?2ª×Tª®Õí
ZK ¥5 D'¿ïVK Bf³I)å·Ûmq8;3Mc|è˨¥(471¥
Ck! BZk<1_JiÁ2º#¼ .@) ¸ûQH¹P;-A(address@hiddenzB*¢¡¢´uÅ×UÐ6º
+â8Æ&