#!/usr/local/bin/perl
############################################################################
#cr                                                                       
#cr            (C) Copyright 1995 The Board of Trustees of the            
#cr                        University of Illinois                         
#cr                         All Rights Reserved                           
#cr                                                                       
############################################################################
# DESCRIPTION:
#
# Our internal directories are kept in library.local which has everything
# in it.  From it we build the appropriate directories for compiling,
# for source code distribution, and for binary distribution.
#
# Usage: use local
#  This makes a symbolic link and is used for local compiles


# The source distribution includes no libraries but does have the
# correct underlying structure and the source code.
# Usage: use source

# The distribution for a given architecture has the correct structure
# and the binaries for the given architecture
# Usage: use IRIX5
# Usage: use HPUX9
# Usage: use LINUX
# Usage: use AIX3
#  ...

############################################################################

# Paranoia check
if (! -d "LASSP.local") {
    die "I don't think you know how to use this script\n";
    # But then that's because it is somewhat poorly defined
    # Hopefully the final 1.2 version will describe this better
}


#######################  LASSP  #####################

sub LASSP_clear {
    `rm -fr LASSP`;
};

sub LASSP_link {
    `ln -s LASSP.local LASSP`;
};

sub LASSP_structure {
    `mkdir LASSP`;
    `cp LASSP.local/README LASSP`;
};

sub LASSP_source {
    # don't do anything (there is no source available)
};

sub LASSP_binary {
    `cp LASSP.local/*_$ARCH LASSP`;
};


#######################  Mesa  #####################

sub Mesa_clear {
    `rm -fr Mesa`;
};

sub Mesa_link {
    `ln -s Mesa.local Mesa`;
};

sub Mesa_structure {
    `mkdir Mesa`;
    `cp Mesa.local/README Mesa`;
    `
cd Mesa ;
ln -s Mesa-2.2 Mesa ;
ln -s Mesa/include include ;
ln -s Mesa/lib lib_AIX3 ;
ln -s Mesa/lib lib_LINUX ;
ln -s Mesa/lib lib_HPUX9 ;
ln -s Mesa/lib lib_IRIX5 ;
`
};

sub Mesa_source {
    # don't do anything (there is no source available)
};

sub Mesa_binary {
    # don't do anything (we don't distribute binaries)
};

#######################  Alpha  #####################

sub alpha_clear {
    `rm -fr alpha`;
};

sub alpha_link {
    `ln -s alpha.local alpha`;
};

sub alpha_structure {
    `mkdir alpha`;
    `cp alpha.local/README alpha`;
};

sub alpha_source {
    # don't do anything (there is no source available)
};

sub alpha_binary {
    # don't do anything (we don't distribute binaries)
};

#######################  CAVE  #####################

sub cave_clear {
    `rm -fr cave`;
};

sub cave_link {
    `ln -s cave.local cave`;
};

sub cave_structure {
    `mkdir cave`;
    `cp cave.local/README cave`;
};

sub cave_source {
    # don't do anything (there is no source available)
};

sub cave_binary {
    # don't do anything (there are no binaries)
};

#######################  libg++  #####################

sub libg_clear {
    `rm -fr libg++`;
};

sub libg_link {
    `ln -s libg++.local libg++`;
};

sub libg_structure {
    `mkdir libg++`;
    `cp libg++.local/README libg++`;
};

sub libg_source {
    `cp -r libg++.local/* libg++`;
    `cd libg++; make clean; rm -r lib_*/*`;
};

sub libg_binary {
    # don't do anything (there are no binaries)
};

#######################  MDComm  #####################

sub mdcomm_clear {
    `rm -fr mdcomm`;
};

sub mdcomm_link {
    `ln -s mdcomm.local mdcomm`;
};

sub mdcomm_structure {
    `mkdir mdcomm`;
    `cp mdcomm.local/README mdcomm.local/setup_rapp mdcomm`;
};

sub mdcomm_source {
    # the source is included in the MDComm distribution
};

sub mdcomm_binary {
    # just need the namd_consumer
    `mkdir mdcomm/bin_$ARCH`;
    `cp ./mdcomm.local/bin_$ARCH/namd_consumer ./mdcomm/bin_$ARCH/`;
};

#######################  points  #####################

sub points_clear {
    `rm -fr points`;
};

sub points_link {
    `ln -s points.local points`;
};

sub points_structure {
    `mkdir points`;
    `cp points.local/README points`;
};

sub points_source {
    `cp points.local/* points/`;
};

sub points_binary {
    # don't do anything (there are no binaries)
};

#######################  scripts  #####################

sub scripts_clear {
    `rm -fr scripts`;
};

sub scripts_link {
    `ln -s scripts.local scripts`;
};

sub scripts_structure {
    `mkdir scripts`;
    `cp scripts.local/README scripts`;
};

sub scripts_source {
# I temp. unlink the RCS for vmd scripts
    `
cp -r scripts.local/tcl7.6 scripts ;
cp -r scripts.local/tclX7.6.0 scripts ;
mkdir scripts/vmd ;
rm scripts.local/vmd/RCS ;
cp -r scripts.local/vmd scripts ;
ln -s ../../../RCS scripts.local/vmd
cd scripts ;
ln -s tcl7.6 tcl ;
ln -s tclX7.6.0 tclX ;`;
};

sub scripts_binary {
    # in this case the source is the binaries
    &scripts_source;
};
#######################  STRIDE  #####################

sub stride_clear {
    `rm -fr stride`;
};

sub stride_link {
    `ln -s stride.local stride`;
};

sub stride_structure {
    `mkdir stride`;
    `cp stride.local/README stride/`;
};

sub stride_source {
    # we do not distribute the source
};

sub stride_binary {
    `cp stride.local/stride_$ARCH stride/`;
};

#######################  SURF  #####################

sub surf_clear {
    `rm -fr surf`;
};

sub surf_link {
    `ln -s surf.local surf`;
};

sub surf_structure {
    `mkdir surf`;
    `cp surf.local/README.VMD surf.local/README.VMD surf/`;
};

sub surf_source {
    `cp surf.local/surf.tar.Z surf/`;
};

sub surf_binary {
    `cp surf.local/surf_$ARCH surf/`;
};
###################  UNC Tracker Library  #################

sub unc_clear {
    `rm -fr unc`;
};

sub unc_link {
    `ln -s unc.local unc`;
};

sub unc_structure {
    `mkdir unc`;
    `cp unc.local/README unc/`;
};

sub unc_source {
    # no source is available
};

sub unc_binary {
    # no binaries are available
};

#####################  XForms GUI  #################

sub xforms_clear {
    `rm -fr xforms`;
};

sub xforms_link {
    `ln -s xforms.local xforms`;
};

sub xforms_structure {
    `
mkdir xforms ;
cp xforms.local/README xforms/ ;
cd xforms ;
mkdir include ;
mkdir AIX3  ; cd AIX3 ; ln -s xforms/FORMS/libforms.a . ; cd .. ;
mkdir LINUX ; cd LINUX; ln -s xforms/FORMS/libforms.a . ; cd .. ;
mkdir IRIX5 ; cd IRIX5; ln -s xforms/FORMS/libforms.a . ; cd .. ;
mkdir HPUX9 ; cd HPUX9; ln -s xforms/FORMS/libforms.a . ; cd .. ;
     `;
};

sub xforms_source {
    # no source is available
};

sub xforms_binary {
    # no binaries are available
};

####################################################

##
##  The main driver -- 

if ($#ARGV != 0) {
    print STDERR "Usage:\n";
    print STDERR "  use local   -- links to .local files\n";
    print STDERR "  use source  -- sets up the source distribution\n";
    print STDERR "  use IRIX5   -- sets up for different architectures\n";
    print STDERR "  use LINUX\n";
    exit;
}

$ARCH = '';
if ($ARGV[0] eq 'local') {
    &LASSP_clear;
    &LASSP_link;

    &Mesa_clear;
    &Mesa_link;

    &alpha_clear;
    &alpha_link;

    &cave_clear;
    &cave_link;

    &libg_clear;
    &libg_link;

    &mdcomm_clear;
    &mdcomm_link;

    &points_clear;
    &points_link;

    &scripts_clear;
    &scripts_link;

    &stride_clear;
    &stride_link;

    &surf_clear;
    &surf_link;

    &unc_clear;
    &unc_link;

    &xforms_clear;
    &xforms_link;

    exit(0);
}

if ($ARGV[0] eq 'source') {
    &LASSP_clear;
    &LASSP_structure;
    &LASSP_source;

    &Mesa_clear;
    &Mesa_structure;
    &Mesa_source;

    &alpha_clear;
    &alpha_structure;
    &alpha_source;

    &cave_clear;
    &cave_structure;
    &cave_source;

    &libg_clear;
    &libg_structure;
    &libg_source;

    &mdcomm_clear;
    &mdcomm_structure;
    &mdcomm_source;

    &points_clear;
    &points_structure;
    &points_source;

    &scripts_clear;
    &scripts_structure;
    &scripts_source;

    &stride_clear;
    &stride_structure;
    &stride_source;

    &surf_clear;
    &surf_structure;
    &surf_source;

    &unc_clear;
    &unc_structure;
    &unc_source;

    &xforms_clear;
    &xforms_structure;
    &xforms_source;

    exit(0);
}

$ARCH = $ARGV[0];
if ($ARCH =~ /[a-z]/ ) {
    die "$ARCH doesn't look like an architecture name\n";
}

##########################

&LASSP_clear;
&LASSP_structure;
&LASSP_binary;

&Mesa_clear;
&Mesa_structure;
&Mesa_binary;

&alpha_clear;
&alpha_structure;
&alpha_binary;

&cave_clear;
&cave_structure;
&cave_binary;

&libg_clear;
&libg_structure;
&libg_binary;

&mdcomm_clear;
&mdcomm_structure;
&mdcomm_binary;

&points_clear;
&points_structure;
&points_binary;

&scripts_clear;
&scripts_structure;
&scripts_binary;

&stride_clear;
&stride_structure;
&stride_binary;

&surf_clear;
&surf_structure;
&surf_binary;

&unc_clear;
&unc_structure;
&unc_binary;

&xforms_clear;
&xforms_structure;
&xforms_binary;
