summaryrefslogtreecommitdiff
path: root/Build/cdbuild
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2007-06-20 09:24:45 +0000
committerNorbert Preining <preining@logic.at>2007-06-20 09:24:45 +0000
commitfbb4d165a9dc6b9e04270e21b4a1bc471922c2a5 (patch)
tree869fa42fa59ea9b86152a68f2b6f113edd263078 /Build/cdbuild
parente22089caa059b3e137088854a4e4068aa81f7972 (diff)
add first versions of ctan2tl and place for new infrastructure
delete strnage ctan2tl.new which I once adapted git-svn-id: svn://tug.org/texlive/trunk@4481 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/cdbuild')
-rwxr-xr-xBuild/cdbuild/place.newinfra262
1 files changed, 262 insertions, 0 deletions
diff --git a/Build/cdbuild/place.newinfra b/Build/cdbuild/place.newinfra
new file mode 100755
index 00000000000..35820be9c12
--- /dev/null
+++ b/Build/cdbuild/place.newinfra
@@ -0,0 +1,262 @@
+#!/usr/bin/env perl
+# $Id: place 2045 2006-08-27 18:21:49Z karl $
+# License: public domain. Originally written by Sebastian Rahtz.
+#
+# Process a tree in the Build/cdbuild/cooked directory (probably created
+# by ctan2tds.pl) and integrate into the main texmf trees.
+#
+# Basic usage: place PKG
+# to process Build/cdbuild/cooked/PKG.
+
+BEGIN {
+ chomp ($mydir = `dirname $0`);
+ unshift (@INC, "$mydir/../../Master/tlpkg");
+}
+
+use File::Basename;
+use File::Find;
+use Cwd;
+use TeXLive::TLPSRC;
+use TeXLive::TLPOBJ;
+use TeXLive::TLPDB;
+use TeXLive::TLTREE;
+
+$newpackage = 0;
+%dirs = (); # dirs we make changes in
+
+if ($ARGV[0] eq "-n") {
+ $chicken = 1;
+ shift;
+} else {
+ $chicken = 0;
+}
+print "place: chicken mode = $chicken\n";
+
+die "usage: $0 PKGNAME\n" unless @ARGV == 1;
+$package = $ARGV[0];
+
+xchdir (dirname($0) . "/cooked");
+$mydir = getcwd();
+-d "$mydir/$package" || die "$0: No such package in $mydir: $package\n";
+
+xchdir ("../../../Master");
+$M = getcwd();
+
+xchdir ("$mydir/$package");
+if (-d "texmf-dist") {$Root="texmf-dist"; }
+elsif (-d "texmf-doc") {$Root="texmf-doc"; }
+elsif (-d "texmf") {$Root="texmf"; }
+
+
+# initialize TLPDB
+my $tlpdb = new TeXLive::TLPDB ( location => "$M/texlive.tlpdb" );
+
+# get package from TLPDB;
+my $tlp = $tlpdb->get_package("$package");
+if (defined($tlp)) {
+ # what to do with binfiles, but they are not place-ed!!!
+ foreach ($tlp->srcfiles, $tlp->runfiles, $tlp->docfiles) {
+ $Old{$_} = 1;
+ }
+} else {
+ $newpackage = 1;
+}
+# TLP REPLACES:
+# get list of existing files
+#my $listsfile = "$M/texmf/lists/$package";
+#if (-f $listsfile) {
+# open (LIST, $listsfile) || die "open($listsfile) failed: $!";
+# while (<LIST>) {
+# chomp;
+# s/\r$//;
+# $Old{$_} = 1 if /^[A-z]/;
+# }
+# close (LIST);
+#}
+#else {
+# $newpackage=1;
+#}
+
+&xchdir ("$mydir/$package");
+find (\&files,".");
+foreach $file (sort keys %Old) {
+ print "* $file: [retained=$New{$file}]\n";
+
+ # and if the file does not exist, don't try to remove it -- we
+ # probably did so by hand and didn't bother to update the tpm.
+ next unless -f "$M/$file";
+
+ # don't remove tpm or lists file, they won't be in the new package.
+ if (! $New{$file} && $file !~ /\.tpm$/ && $file !~ m,/lists/[^/]+$,) {
+ &my_system ("svn remove $M/$file");
+ }
+ $dirs{dirname ("$M/$file")}++;
+}
+
+# copy files
+my $Job = "tar cf - . | (cd $M && tar xf - )";
+&my_system ($Job);
+
+# sort so dirs will be added before subdirs.
+foreach $file (sort keys %New) {
+ if (! $Old{$file}) {
+ &add_file ("$M/$file");
+ }
+}
+
+my $tpmdir = "$M/$Root/tpm";
+
+xchdir ($mydir);
+&my_system ("mv $package $package.done");
+
+if ($Root eq 'texmf-doc') {
+ $Type = 'Documentation';
+} elsif ($Root eq 'texmf-dist') {
+ $Type = 'Package';
+} else {
+ die "cannot handle Root=$Root";
+}
+
+chomp (my $tools = `cd $mydir/../../tools && pwd`);
+
+# TLP removed
+#$SETUP = "$tools/tpm-factory.pl --master=$M --tpm_dir=$tpmdir"
+# . " --ftp_dir=/var/tmp --arch=all --patterns=auto"
+# . " --name=$Type/$package";
+
+# TLP changed:
+my $tlpsrc = TeXLive::TLPSRC;
+if (! -r "$M/tlpkg/tlpsrc/$package.tlpsrc") {
+ $tlpsrc->name("$package");
+ $tlpsrc->category($Type);
+ if (!$chicken) {
+ open TMP, ">$M/tlpkg/tlpsrc/$package.tlpsrc" or die "Cannot open tlpsrc file!";
+ $tlpsrc->writeout(\*TMP);
+ close TMP
+ }
+}
+
+# TLP replaces
+# create tpm if needed
+#&my_system ("perl $SETUP --new") unless -f "$tpmdir/$package.tpm";
+
+# update tpm
+#&my_system ("perl $SETUP --clean");
+
+# create/update lists file
+#&my_system ("xsltproc --stringparam ROOT $M"
+# . " $tools/tpm2list.xsl $M/$Root/tpm/$package.tpm");
+
+
+# add tpm and lists files after they are created.
+if ($newpackage) {
+ # TLP MISSING, do we generate the list file?
+ #&add_file ($listsfile);
+ # TLP changed
+ &add_file ("$M/tlpkg/tlpsrc/$package.tlpsrc");
+ #&add_file ("$tpmdir/$package.tpm");
+}
+
+# these two dirs will essentially always change, so just list them.
+$dirs{"$M/tlpkg/tlpsrc/$package.tlpsrc"}++;
+#$dirs{$tpmdir}++;
+#$dirs{"$M/texmf/lists"}++;
+
+# print dirs with changed files, for svn commit purposes.
+# if other files have been modified in those same dirs, though, this
+# won't detect it. It would be better to list exactly the *files* which
+# should be committed, but ... lazy.
+#
+# also write dir list to a separate file, for easy passing to a commit.
+#
+$DIRLIST = ">" . ($ENV{"TMPDIR"} || "/tmp") . "/tlplace.dirs";
+open (DIRLIST) || die "open($DIRLIST) failed: $!";
+#
+for my $dir (sort keys %dirs) {
+ print "$dir\n";
+ print DIRLIST "$dir\n";
+}
+#
+close (DIRLIST) || warn "close($DIRLIST) failed: $!";
+
+exit (0);
+
+
+
+#--------------------------------------
+sub dirs
+{
+ local @filenames;
+ if (-d) {
+ @filenames=&buildfilelist($File::Find::name);
+ if (!@filenames) { rmdir $File::Find::name;}
+ }}
+
+sub buildfilelist
+{
+ my($me) = @_;
+ my @files;
+ opendir(DIR,$me) || cleanup ("cannot open directory $me");
+ @files =grep(!/^\.\.?/,readdir(DIR));
+ closedir(DIR);
+ return @files;
+}
+
+
+sub files
+{
+ if (-f) {
+ $This=$File::Find::name;
+ $This =~ s/^\.\///;
+ $New{$This}=1;
+ }
+}
+
+
+# add a file to the repository. for svn, we also have to add the
+# containing dir, and the parent of that dir, if they are new.
+# (Should really just traverse )
+#
+sub add_file
+{
+ my ($newfile) = @_;
+
+ my $newdir = dirname ($newfile);
+
+ # when it's needed, parent must come first, else have svn "not working copy".
+ my $parentdir = dirname ($newdir);
+ unless (-d "$parentdir/.svn") {
+ &my_system ("svn add -N $parentdir");
+ $dirs{$parentdir}++;
+ }
+
+ unless (-d "$newdir/.svn") {
+ &my_system ("svn add -N $newdir");
+ }
+
+ &my_system ("svn add $newfile");
+
+ # remember that we changed this directory.
+ $dirs{$newdir}++;
+}
+
+
+sub xchdir
+{
+ my ($dir) = @_;
+ chdir ($dir) || die "chdir($dir) failed: $!";
+ print "place: chdir($dir)\n";
+}
+
+
+sub my_system
+{
+ my ($cmd) = @_;
+
+ print "place: SYSTEM $cmd\n";
+
+ unless ($chicken) {
+ my $ret = system ($cmd);
+ die "`$cmd' failed, status=$ret, goodbye\n" if $ret != 0;
+ }
+}