API for Perl Modules for new infra
==================================

NOTE: THE DEFINITIVE DOCUMENTATION IS IN THE PM FILES AS POD DOCUMENTATION!!

Module TeXLive::TLPSRC
----------------------

PLEASE SEE THE MANPAGE OF TeXLive::TLPSRC which is MORE UP 2 DATE!!!!

Constructor:
	TeXLive::TLPSRC->new;
	TeXLive::TLPSRC->new( name => "foobar", shortdesc => "The foobar package", ...);

Input/Output
	$tlsrc->from_file("package.tlsrc");
	$tlsrc->writeout
		without arg to stdout
		with arg to filehandle

Read/Write functions (with argument set, without arg read)

	$tlsrc->name
	$tlsrc->category
	$tlsrc->shortdesc
	$tlsrc->longdesc
	$tlsrc->catalogue
	$tlsrc->srcpatterns
	$tlsrc->docpatterns
	$tlsrc->runpatterns
	$tlsrc->binpatterns
	$tlsrc->depends
	$tlsrc->executes

Generation function
	$tlp = $tlsrc->make_tlpobj($tltree);
		generates a TeXLive::TLPOBJ object from itself and
		a TeXLive::TLTREE object (see below)


Module TeXLive::TLPOBJ
----------------------

PLEASE SEE THE MANPAGE OF TeXLive::TLPOBJ which is MORE UP 2 DATE!!!!

Package variables:
	&TeXLive::TLPOBJ->zipdir
		set/returns the default location for created zip files

Constructur:
	TeXLive::TLPOBJ->new;
	TeXLive::TLPOBJ->new( name => "foobar", ...);

Input/Output
	$tlp->from_file("package.tlp");
		reads from file, only one tlp allowed in file
	$tlp->from_fh($filehandle [, $multi] );
		reads from $filehandle
		if $multi is undefined (ie not given) then multiple tlp
		in the same file are treated as errors 
		if $multi is defined then returns after reading one
		tlp
		returns 1 if it found a tlp, otherwise 0
	$tlp->writeout
		without arg to stdout
		with arg to filehandle
	$tlp->writeout_simple
		for comparison with tpm/tlps, will go away

	$tlp->make_zip($tltree[,$destdir[,$zipname]]);
		creates a zip file of the arch INDEPENDENT files in tlp 
		in $destdir (if not defined then TLP->zipdir is used).
		The file name of the created zipfile is $zipname (if not
		present $tlp->name.zip)

		If the package contains "binfiles"; then zip files for 
		all archs containing ONLY the binfiles are created, and 
		the zipfile name is
			$zipname.$arch.zip

		All the arch independent zip files ALSO contain the 
		respective TLPOBJ file in 
			.tlpobj/$name.tlpobj
		SO $zipname.zip does contain this tlpobj file, while
		$zipname.$arch.zip does NOT.

		(Compatibility with the scheme used before)
	
	$tlp->update_from_catalogue($texcatalogue);
		merges some information from the TeX Catalogue into 
		the TLPOBJ

Utilities:
	$tlp->recompute_sizes($tltree)
		recomputes all the *size fields, see below
	$tlp->recompute_revision($tltree)
		recomputes the revision of the package
	$tlp->is_arch_dependent
		true if it contains bin files, otherwise false
	$tlp->total_size
		if no arguments given this is 
			srcsize + docsize + runsize
		if args are given then this is
			srcsize + docsize + runsize +
				+ sum_{i in args} binsize{$i}

Read/Write functions (with argument set, without arg read)

	$tlp->name
	$tlp->category
	$tlp->revision
	$tlp->shortdesc
	$tlp->longdesc
	$tlp->catalogue
		reads/returns scalar
	$tlp->srcfiles
	$tlp->srcsize
	$tlp->docfiles
	$tlp->docsize
	$tlp->runfiles
	$tlp->runsize
		*files reads/returns array of files
		*size reads/returns scalar
	$tlp->binfiles
	$tlp->binsize
		note that this gives/returns a HASH of architectures!!
	$tlp->depends
	$tlp->executes
		reads/returns array

	$tlp->add_srcfiles(@files)
	$tlp->remove_srcfiles(@files)
		adds @files to the list of srcfiles
	$tlp->add_docfiles(@files)
	$tlp->remove_docfiles(@files)
		adds @files to the list of docfiles
	$tlp->add_runfiles(@files)
	$tlp->remove_runfiles(@files)
		adds/removes @files to the list of runfiles

	$tlp->add_binfiles($arch,@files)
	$tlp->remove_binfiles($arch,@files)
		adds/removes @files to the list of binfiles for arch=$arch
	
	$tlp->add_files($type,@files)
	$tlp->remove_files($type,@files)
		adds/removes @files to the list of $type = (run|doc|src)files
		NOT FOR binfiles!


Module TeXLive::TLTREE
----------------------
(this one is still quite hacky)

Constructor

	TeXLive::TLTREE->new;
	TeXLive::TLTREE->new( svnroot => "path/to/svn/managed/dir" );

Init functions

	$tltree->init_from_svn
		changes to svnroot, calls svn status -v and builds
		up all the necessary information
	$tltree->init_from_statusfile($file)
		does the same as init_from_svn, but from a pre-made
		output of svn status -v
	$tltree->init_from_files
		inits from a find $svnroot command, all the revisions
		are set to 1

Input/Ouput

	$tltree->print
		to stdout, more or less for hacking only not usefull

Pattern matching functions
	
	$ref = $tltree->get_matching_files($type,$pattern)
		for $type = bin
			returns a ref to a hash of keys = architectures
		otherwise
			returns a ref to an array
		(see specification)

		Note that a pattern of the form
			bin/${ARCH}/foobar
		also matches for arch=win32 
			bin/${ARCH}/foobar.{exe,bat}


Other functions

	$tltree->file_svn_lastrevision($file)
		returns the revision of the last change of file
		as given by svn status -v
		undef if file is not contained in $tltree

	$tltree->size_of($file)
		returns the size of $file, or undef if not in tree

	&$tlsrc->architectures
		sets/reads the list of architectures,
		predefined to ....


Module TeXLive::TLPDB
------------------------
Package variables:
	&TeXLive::TLPDB->listdir
		sets/returns the default location for created list files

Constructor

	TeXLive::TLPDB->new;
	TeXLive::TLPDB->new ( location => "path/to/tldb/file" );
	TeXLive::TLPDB->new ( location => "http://path/to/tldb/file" );
	TeXLive::TLPDB->new ( location => "ftp://path/to/tldb/file" );

Read/Write functions (with argument set, without arg read)

	$tldb->location

Input/Output

	$tldb->from_file("path/to/tldb/file");
	$tldb->from_file("http://path/to/tldb/file");
	$tldb->from_file("ftp://path/to/tldb/file");
		reads a tldb file (tlp descriptions separated by newlines)
	
	$tldb->writeout
		without arg to stdout 
		with arg to filehandle

	$tldb->save
		saves to $self->location;

	$tldb->generate_packagelist
		outputs list of "package revision" for web delivery
		without arg to stdout
		with arg to filehandle

	$tldb->generate_listfiles([$destdir])
		create list file(s) in $destdir (if not given then it defaults
		to TLDB->listdir) (could be more than one for
		packages with binary files)
	
	$tldb->list_packages
		returns all packages installed

TLP interface

	$tldb->add_tlpobj($tlp)
		adds a TeXLive::TLPOBJ to the db (or replaces an already present)

	$tlp = $tldb->get_package("packagename");
		returns undef if not installed
	
	$rev = $tldb->package_revision("packagename");
		returns undef if not installed, otherwise the
		revision of "packagename"
	

Package TeXLive::TLUtils
------------------------

exported functions:
	 platform;
	 platform_desc($platform);
	 win32;
	 unix;
	 getenv($string);
	 which($string);
	 program_exists($program);
	 get_system_tmpdir;
	 dirname($path);
	 basename($path);
	 dirname_and_basename($path);
	 mkdirhier($path);
	 copy($file, $target_dir);
	 media;
	 initialze_installer;
	 binaries_available_from_disk;
	 binaries_available_from_net;
	 make_var_skeleton($path);
	 make_local_skeleton($path);
	 sort_uniq(@list);
	 push_uniq(\@list, @items);
	 member($item, @list);
	 debug($string);
