summaryrefslogtreecommitdiff
path: root/Build/source/mswin32/newbuild.pl
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-16 00:05:12 +0000
committerKarl Berry <karl@freefriends.org>2006-01-16 00:05:12 +0000
commit70f7efeb5c9965a63a4143ad1c1f473585dc364c (patch)
treebf734c5c492ca5491ffaeb2192cdb9b32f42f726 /Build/source/mswin32/newbuild.pl
parentf896f9e413c0dc0d4178846634963c84505e5029 (diff)
mswin32/
git-svn-id: svn://tug.org/texlive/trunk@1482 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/mswin32/newbuild.pl')
-rw-r--r--Build/source/mswin32/newbuild.pl386
1 files changed, 386 insertions, 0 deletions
diff --git a/Build/source/mswin32/newbuild.pl b/Build/source/mswin32/newbuild.pl
new file mode 100644
index 00000000000..8b8549f3afa
--- /dev/null
+++ b/Build/source/mswin32/newbuild.pl
@@ -0,0 +1,386 @@
+## newbuild.pl: prepare a TeXLive build -*- Perl -*-
+##
+## Copyright (C) 2002 Fabrice Popineau <Fabrice.Popineau@supelec.fr>
+## derived from the MiKTeX newbuild.pl perl script
+##
+## This file 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 2, or (at your
+## option) any later version.
+##
+## This file is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this file; if not, write to the Free Software
+## Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+## USA.
+
+use strict;
+use Cwd;
+use File::Path;
+use File::Basename;
+use Getopt::Long;
+use File::DosGlob 'glob';
+
+my $texlivesrcdir;
+my $major_version_number;
+my $minor_version_number;
+my $version_string;
+my $patch_number_str;
+my $mscver;
+my $opt_prefix;
+my $opt_help;
+my $opt_alpha;
+my $opt_beta;
+my $opt_offical;
+my $opt_debug;
+my $opt_tmdir;
+my $opt_snapshot;
+my $opt_official;
+my $release_motto;
+my $build_label;
+my $build_special_str;
+my $build_number;
+my $state;
+my $beta_number;
+my $alpha_number;
+my $build_date_str;
+my $builder_name_str;
+my $computer_name_str;
+my $build_date;
+my $patch_number;
+
+&main;
+exit (0);
+
+###############################################################################
+## help
+###############################################################################
+
+sub help
+{
+ print <<EOF;
+Usage: newbuild [OPTIONS]
+ --alpha initialize an alpha build
+ --beta initialize a beta build
+ --debug initialize a debug build
+ --help display this help text and exit
+ --official initialize an official build
+ --prefix=DIR install all files in DIR
+ --tmdir=DIR where Total Texlive is installed
+ --snapshot initialize a snapshot build
+EOF
+}
+
+###############################################################################
+## make_version_h
+###############################################################################
+
+sub make_version_h
+{
+ $version_string = $major_version_number;
+
+ if ($minor_version_number > 0)
+ {
+ $version_string .= ".$minor_version_number";
+ }
+
+ $version_string .= $patch_number_str;
+
+ if ($build_special_str)
+ {
+ $version_string .= " $build_special_str";
+ }
+
+ if ($state == 1)
+ {
+ $version_string .= " (snapshot build $build_number)";
+ }
+ elsif ($state == 2)
+ {
+ $version_string .= " beta $beta_number";
+ }
+ elsif ($state == 3)
+ {
+ $version_string .= " alpha $alpha_number";
+ }
+ elsif ($state == 4)
+ {
+ $version_string .= " (debug build $build_number)";
+ }
+
+ my $version_h_filename = $texlivesrcdir . "./texlive-version.h";
+
+ open (VERSION_H, ">$version_h_filename");
+
+ print VERSION_H <<EOF;
+/* Made by newbuild.pl; DO NOT EDIT !!! -*- C -*- */
+#ifndef VERSION__9C077E32_49F9_4a99_9A1F_3E4C4DB17C7D__INCLUDED_H_
+#define VERSION__9C077E32_49F9_4a99_9A1F_3E4C4DB17C7D__INCLUDED_H_
+#define TEXLIVE_PRODUCTNAME_STR "TeXLive"
+#define TEXLIVE_COMPANYNAME_STR "TeX Users Group"
+#define TEXLIVE_BUILD_COMMENT_STR "Build $build_number ($build_label); build date: $build_date_str; machine: $computer_name_str"
+#define TEXLIVE_BUILD_DATE $build_date
+#define TEXLIVE_BUILDERNAME_STR "$builder_name_str"
+#define TEXLIVE_PRIVATEBUILD_STR "Built by $builder_name_str"
+#define TEXLIVE_MAJOR_VERSION $major_version_number
+#define TEXLIVE_MINOR_VERSION $minor_version_number
+#define TEXLIVE_BETA_NUMBER $beta_number
+#define TEXLIVE_BETA_NUMBER_STR "$beta_number"
+#define TEXLIVE_ALPHA_NUMBER $alpha_number
+#define TEXLIVE_ALPHA_NUMBER_STR "$alpha_number"
+#define TEXLIVE_PATCH_NUMBER $patch_number
+#define TEXLIVE_PATCH_NUMBER_STR "$patch_number_str"
+#define TEXLIVE_BUILD_LABEL "$build_label"
+#define TEXLIVE_BUILD_NUMBER $build_number
+#define TEXLIVE_BUILD_SPECIAL_STR "$build_special_str"
+#define TEXLIVE_MAJOR_VERSION_STR "$major_version_number"
+#define TEXLIVE_MINOR_VERSION_STR "$minor_version_number"
+#define TEXLIVE_BETA_VERSION_STR "$beta_number"
+#define TEXLIVE_ALPHA_VERSION_STR "$alpha_number"
+#define TEXLIVE_BUILD_NUMBER_STR "$build_number"
+#define TEXLIVE_RELEASE_STATE $state
+#define TEXLIVE_RELEASE_MOTTO_STR "$release_motto"
+#define TEXLIVE_PRODUCTVERSION_STR "$version_string"
+#define TEXLIVE_LIBRARYPREFIX_STR "tl$major_version_number$minor_version_number"
+#ifndef TEXLIVE_LEGALCOPYRIGHT_STR
+#define TEXLIVE_LEGALCOPYRIGHT_STR "Copyright (C) 1996-2003 Fabrice Popineau and the TeX Users Group"
+#endif
+#ifndef TEXLIVE_LEGALTRADEMARKS_STR
+#define TEXLIVE_LEGALTRADEMARKS_STR ""
+#endif
+#endif
+EOF
+
+ close (VERSION_H);
+}
+
+###############################################################################
+## update_tpm_files
+###############################################################################
+
+sub update_tpm_files
+{
+# my $x;
+# foreach $x (glob "tpm\\*.tpm")
+# {
+# open TPM, $x;
+# open TPM_NEW, ">$x.new";
+# while (<TPM>)
+# {
+# s-<TPM:Version>.*</TPM:Version>-<TPM:Version>$version_string</TPM:Version>-;
+# s-<TPM:Date>.*</TPM:Date>-<TPM:Date>$build_date_str</TPM:Date>-;
+# print TPM_NEW $_;
+# }
+# close TPM_NEW;
+# close TPM;
+# unlink $x;
+# rename "$x.new", $x;
+# }
+}
+
+###############################################################################
+## mscver
+###############################################################################
+
+sub mscver
+{
+ open MSCVER, ">mscver.c";
+ print MSCVER <<EOF;
+#include <stdio.h>
+void main (void) { printf ("%d", _MSC_VER); }
+EOF
+ close MSCVER;
+ system "cl /nologo mscver.c";
+ $mscver = `mscver`;
+ unlink ("mscver.c");
+ unlink ("mscver.obj");
+ unlink ("mscver.exe");
+}
+
+###############################################################################
+## write_paths_ini
+###############################################################################
+
+# sub write_paths_ini
+# {
+# system "nmake -f texlive.mak configure"
+# }
+
+###############################################################################
+## main
+###############################################################################
+
+sub main
+{
+ unless (GetOptions("alpha" => \$opt_alpha,
+ "beta" => \$opt_beta,
+ "help" => \$opt_help,
+ "official" => \$opt_official,
+ "prefix=s" => \$opt_prefix,
+ "tmdir=s" => \$opt_tmdir,
+ "debug" => \$opt_debug,
+ "snapshot" => \$opt_snapshot))
+ {
+ print STDERR "Try `newbuild --help'";
+ exit (1);
+ }
+
+ if ($opt_help)
+ {
+ help ();
+ exit (0);
+ }
+
+ my($ss,$mm,$hh,$mday,$mon,$year) = localtime();
+
+ $builder_name_str = $ENV{"USERNAME"};
+ $computer_name_str = $ENV{"COMPUTERNAME"};
+
+ my $new_state = -1;
+ $new_state = 4 if ($opt_debug);
+ $new_state = 3 if ($opt_alpha);
+ $new_state = 2 if ($opt_beta);
+ $new_state = 1 if ($opt_snapshot);
+ $new_state = 0 if ($opt_official);
+
+ $texlivesrcdir = &dirname(cwd()) . "/texk/msvc";
+
+ $texlivesrcdir =~ s:/:\\:g;
+
+ my $texlive_inc_filename = $texlivesrcdir . "/texlive.inc";
+
+ die "$texlive_inc_filename does not exist" unless (-e $texlive_inc_filename);
+ open (TEXLIVE_INC, $texlive_inc_filename);
+
+ open (TMPFILE, ">xxx");
+ $state = -1;
+ my $last_state = -1;
+
+ mscver ();
+
+ my $timestamp = sprintf("%02d/%02d/%02d %02d:%02d:%02d %s",
+ $year, $mon+1, $mday, $hh, $mm, $ss,
+ $ENV{"USERNAME"});
+
+ while (<TEXLIVE_INC>)
+ {
+ if (/^state = ([01234])/)
+ {
+ $state = $1;
+ $state = $new_state if ($new_state >= 0);
+ print TMPFILE "state = $state\n";
+ }
+ elsif (/^alpha_number = ([0-9]+)/)
+ {
+ $alpha_number = $1;
+ print TMPFILE "alpha_number = $alpha_number\n";
+ }
+ elsif (/^beta_number = ([0-9]+)/)
+ {
+ $beta_number = $1;
+ print TMPFILE "beta_number = $beta_number\n";
+ }
+ elsif (/^release_motto = (.*)/)
+ {
+ $release_motto = $1;
+ print TMPFILE $_;
+ }
+ elsif (/^build_label = ([A-Za-z0-9_-]+)/)
+ {
+ $build_label = $1;
+ print TMPFILE $_;
+ }
+ elsif (/^build_special_str = ([A-Za-z0-9 ]+)/)
+ {
+ $build_special_str = $1;
+ print TMPFILE $_;
+ }
+ elsif (/^(build_number = )([0-9]+)/)
+ {
+ $build_number = $2 + 1;
+ print TMPFILE $1, $build_number, "\n";
+ }
+ elsif (/^build_date = /)
+ {
+ $build_date = time ();
+ print TMPFILE $&, $build_date, "\n";
+ }
+ elsif (/^build_date_str = /)
+ {
+ $build_date_str = localtime ();
+ print TMPFILE $&, $build_date_str . "\n";
+ }
+ elsif (/^texlivesrcdir = /)
+ {
+ print TMPFILE $&, $texlivesrcdir . "\n";
+ }
+ elsif (/^prefix = /)
+ {
+ if (length($opt_prefix) > 0)
+ {
+ print TMPFILE $&, $opt_prefix . "\n";
+ }
+ else
+ {
+ print TMPFILE $&, $ENV{"HOMEDRIVE"} . "\\texmf\n";
+ }
+ }
+ elsif (/^tmdir = /)
+ {
+ if (length($opt_tmdir) > 0)
+ {
+ print TMPFILE $&, "$opt_tmdir\n";
+ }
+ else
+ {
+ print TMPFILE $&, "\$(prefix)\n";
+ }
+ }
+ elsif (/^mscver = /)
+ {
+ print TMPFILE $&, $mscver . "\n";
+ }
+ else
+ {
+ if (/^major_version_number = ([0-9]+)/)
+ {
+ $major_version_number = $1;
+ }
+ elsif (/^minor_version_number = ([0-9]+)/)
+ {
+ $minor_version_number = $1;
+ }
+ elsif (/^patch_number = ([0-9]+)/)
+ {
+ $patch_number = $1;
+ }
+ elsif (/^patch_number_str = ([a-z])/)
+ {
+ $patch_number_str = $1
+ }
+ else
+ {
+ s/Time-stamp:[ \t]+\"(.+)\"/Time-stamp: \"$timestamp\"/;
+ }
+ print TMPFILE;
+ }
+ }
+
+ close (TEXLIVE_INC);
+ close (TMPFILE);
+ unlink ($texlive_inc_filename);
+ rename ("xxx", $texlive_inc_filename);
+
+ make_version_h ();
+
+ update_tpm_files ();
+
+# if ($opt_tmdir && $opt_prefix)
+# {
+# write_paths_ini ();
+# }
+}