1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

Initial import of the CDE 2.1.30 sources from the Open Group.

This commit is contained in:
Peter Howkins 2012-03-10 18:21:40 +00:00
commit 83b6996daa
18978 changed files with 3945623 additions and 0 deletions

74
cde/BUGREPORT Normal file
View file

@ -0,0 +1,74 @@
** Mail this report to: motif-defect@osf.org for Motif Release defects
cde-defect@osf.org for CDE Release defects
Please be aware that this file will be parsed by machine. Do not change the
field names. Include all the Submitter Information lines and as much of the
other sections as you can. Remove the brackets <> around any field that you
fill in. Thank you!
------------------------------- CUT HERE --------------------------------------
The Open Group Problem Report
=================================
Submitter Information (Include Email address at miminum)
---------------------
Submitter Name: <your name - Required>
Organization: <your company or institute - Required>
Email Address: <your electronic mail address -- Required>
Phone: <your phone number with extension - Required>
OSF License Number: <license number (for release versions only)>
Licensee's Defect Number: <your internal reference number>
Hardware/Software Configuration
-------------------------------
Offering and Version: <examples: Motif 2.1.10, or CDE 2.1.10>
Component (Module): <examples: src/usr/bin/mesg.c, or lib/Xm/FileSB.c>
Client Hardware: <client machine type, memory, etc.>
Client Software: <client OS and X windows version, if relevant>
Server Hardware: <server machine type, memory, etc.> or SAME
Server Software: <server OS and X version, if relevant> or SAME
Compiler: <name of compiler and version>
Problem Description
-------------------
Severity Level: <example: Incompatibility>
<One of the severity level as described below -- delete before sending
Incompatibility -- represents a problem which resulted from inability
to install the software on the machine.
Fatal -- represents a problem which resulted in a software crash or
required reboot of the software.
Critical -- represents a problem which resulted in software malfunction
or a feature failure and has no work-around.
Severe -- represents a problem which resulted in software functionality
limitation but had alternative work-around.
Minor -- represents a cosmetic type problem.
Enhancement -- represents a request for enhancement of the software.>
Date of First Occurrence: <Date problem was first noticed (optional)>
One Line Description:
<A one line description of the specifying the problem>
Full Description:
<A full description of the problem>
Repeat By:
<A description of how to reproduce the problem (optional)>
Proposed Solution:
<A short description of how to fix the problem/bug (optional)>

1043
cde/CLOSEDBUGS Normal file

File diff suppressed because it is too large Load diff

148
cde/Imakefile Normal file
View file

@ -0,0 +1,148 @@
XCOMM $TOG: Imakefile /main/22 1999/01/18 10:38:29 samborn $
#define IHaveSubdirs
#define PassCDebugFlags CDEBUGFLAGS="$(CDEBUGFLAGS)"
CDE_RELEASE = 2.1.20
SUBDIRS = config util logs include lib programs databases admin
DOCSUBDIRS = config doc
MakeSubdirs($(SUBDIRS))
DependSubdirs($(SUBDIRS))
#define IHaveSpecialMakefileTarget
Makefile:: xmakefile
ImakeDependency(xmakefile)
xmakefile:: Imakefile
RMoveToBakFile(xmakefile)
$(IMAKE_CMD) -s xmakefile -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
VerifyOS::
@echo ""
@echo Building on OSName.
@echo ""
includes::
MakeDir($(BUILDINCDIR))
XCOMM
XCOMM Watch out!!! Make sure you do make includes after removing X11....
XCOMM
clean::
$(RM) -r $(BUILDINCDIR)
$(RM) -r $(BUILDLIBDIR)
WORLDOPTS = -k
MAKE_OPTS = -f xmakefile
XCOMM
XCOMM install; create the directories that we're going to need
XCOMM
DIRS_TO_CREATE = $(USRLIBDIR) $(BINDIR) $(INCDIR) $(USRINCDIR) $(LIBDIR) $(XAPPLOADDIR)
MakeDirectories(install, $(DIRS_TO_CREATE))
XCOMM
XCOMM Everything builds everything in the SUBDIRS directories
XCOMM
Everything::
@echo ""
@echo "Rebuilding Release $(CDE_RELEASE) of CDE"
@echo ""
@date
@echo ""
cd $(IMAKESRC) && if [ -f Makefile ]; then \
$(MAKE) $(MFLAGS) BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; \
else \
$(MAKE) $(MFLAGS) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; \
fi
-$(RM) xmakefile.bak; $(MV) xmakefile xmakefile.bak
$(MAKE) $(MFLAGS) -f xmakefile.bak xmakefile
$(MAKE) $(MFLAGS) $(MAKE_OPTS) Makefiles
$(MAKE) $(MFLAGS) $(MAKE_OPTS) Makefiles.doc
$(MAKE) $(MFLAGS) $(MAKE_OPTS) includes
$(MAKE) $(MFLAGS) $(MAKE_OPTS) includes.doc
$(MAKE) $(MFLAGS) $(MAKE_OPTS) depend
$(MAKE) $(MFLAGS) $(MAKE_OPTS) depend.doc
$(MAKE) $(MFLAGS) $(MAKE_OPTS) $(WORLDOPTS)
$(MAKE) $(MFLAGS) $(MAKE_OPTS) $(WORLDOPTS) all.doc
@echo ""
@date
@echo ""
@echo "Rebuild of Release $(CDE_RELEASE) of CDE complete."
@echo ""
Everything.dev::
@echo ""
@echo "Rebuilding Release $(CDE_RELEASE) of CDE excluding DOC"
@echo ""
@date
@echo ""
cd $(IMAKESRC) && if [ -f Makefile ]; then \
$(MAKE) $(MFLAGS) BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; \
else \
$(MAKE) $(MFLAGS) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; \
fi
-$(RM) xmakefile.bak; $(MV) xmakefile xmakefile.bak
$(MAKE) $(MFLAGS) -f xmakefile.bak xmakefile
$(MAKE) $(MFLAGS) $(MAKE_OPTS) Makefiles
$(MAKE) $(MFLAGS) $(MAKE_OPTS) includes
$(MAKE) $(MFLAGS) $(MAKE_OPTS) depend
$(MAKE) $(MFLAGS) $(MAKE_OPTS) $(WORLDOPTS)
@echo ""
@date
@echo ""
@echo "Rebuild of Release $(CDE_RELEASE) of CDE excluding DOC complete."
@echo ""
XCOMM clean out link tree looking for stuff that should get checked in
dangerous_strip_clean::
make -k clean clean.doc
find . -type l -exec rm {} \;
find . \( \! \( -type d -o -name Makefile \) \) -print
XCOMM special target to determine if the xmakefile exists.
XCOMM Works on both Unix and NMAKE.EXE
xmakefile-exists::
XCOMM
XCOMM Everything.doc builds everything in the DOCSUBDIRS directories
XCOMM
Everything.doc::
@echo ""
@echo "Rebuilding Release $(CDE_RELEASE) of DOC"
@echo ""
@date
@echo ""
cd $(IMAKESRC) && if [ -f Makefile ]; then \
$(MAKE) $(MFLAGS) BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; \
else \
$(MAKE) $(MFLAGS) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; \
fi
-$(RM) xmakefile.bak; $(MV) xmakefile xmakefile.bak
$(MAKE) $(MFLAGS) -f xmakefile.bak xmakefile
$(MAKE) $(MFLAGS) $(MAKE_OPTS) Makefiles.doc
$(MAKE) $(MFLAGS) $(MAKE_OPTS) includes.doc
$(MAKE) $(MFLAGS) $(MAKE_OPTS) depend.doc
$(MAKE) $(MFLAGS) $(MAKE_OPTS) $(WORLDOPTS) all.doc
@echo ""
@date
@echo ""
@echo "Rebuild of Release $(CDE_RELEASE) of DOC complete."
@echo ""
NamedTargetSubdirs(install.doc,$(DOCSUBDIRS),"installing",DESTDIR=$(DESTDIR),install)
NamedTargetSubdirs(install.man.doc,$(DOCSUBDIRS),"installing man pages",DESTDIR=$(DESTDIR),install.man)
InstallLinkKitSubdirs($(DOCSUBDIRS))
NamedCleanSubdirs(clean.doc,$(DOCSUBDIRS))
NamedTagSubdirs(tags.doc,$(DOCSUBDIRS))
MakeMakeSubdirs($(DOCSUBDIRS),Makefiles.doc)
NamedTargetSubdirs(includes.doc,$(DOCSUBDIRS),including,NullParameter,includes)
NamedTargetSubdirs(depend.doc,$(DOCSUBDIRS),depending,NullParameter,depend)
NamedMakeSubdirs(all.doc, $(DOCSUBDIRS))

239
cde/Makefile Normal file
View file

@ -0,0 +1,239 @@
# $TOG: Makefile /main/15 1999/10/12 09:33:30 mgreess $
RELEASE = Release 2.1.30
PRODUCT = CDE
SHELL = /bin/sh
RM = rm -f
MV = mv
MAKE = make
NMAKE = nmake
WORLDOPTS = -k
WIN32WORLDOPTS = -i
TOP = .
CURRENT_DIR = .
CONFIGSRC = $(TOP)/config
IMAKESRC = $(CONFIGSRC)/imake
DEPENDSRC = $(CONFIGSRC)/makedepend
DEPENDTOP = ../..
IMAKETOP = ../..
IRULESRC = $(CONFIGSRC)/cf
IMAKE = $(IMAKESRC)/imake
IMAKE_CMD = $(IMAKE) -I$(IRULESRC) $(IMAKE_DEFINES)
MAKE_OPTS = -f xmakefile
MAKE_CMD = $(MAKE) $(MAKE_OPTS)
NMAKE_CMD = $(NMAKE) $(MAKE_OPTS)
FLAGS = $(MFLAGS) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"
all:
@$(MAKE_CMD) xmakefile-exists || $(MAKE) all-initial
@$(MAKE_CMD) $@
all-initial:
@echo "Please begin by using make World or make Makefile. You may"
@echo "find it necessary to set the make variable BOOTSTRAPCFLAGS in"
@echo "order to compile imake. One common example is"
@echo "\"BOOTSTRAPCFLAGS=-I<dir>\", where <dir> is the top of your"
@echo "X11R6 source tree. Remember to check the configuration"
@echo "parameters in the config directory."
@echo
@echo "We recommend that you read the release notes carefully before"
@echo "proceeding; they can be found under the doc directory. If"
@echo "the top-level Makefile gets corrupted, copy Makefile.ini to"
@echo "Makefile and try again. Do not name your log file make.log or"
@echo "it will be deleted."
World:
@echo ""
@echo "Building $(RELEASE) of $(PRODUCT)"
@echo ""
@case "x$(BOOTSTRAPCFLAGS)" in x) \
echo I hope you checked the configuration parameters in $(IRULESRC) ; \
echo to see if you need to pass BOOTSTRAPCFLAGS. ; \
echo "" ; \
;; esac;
@date
@echo ""
cd $(IMAKESRC) && $(MAKE) $(FLAGS) clean
$(MAKE) $(MFLAGS) Makefile.boot
$(MAKE_CMD) $(MFLAGS) VerifyOS
$(MAKE_CMD) $(MFLAGS) Makefiles
$(MAKE_CMD) $(MFLAGS) Makefiles.doc
$(MAKE_CMD) $(MFLAGS) clean
$(MAKE_CMD) $(MFLAGS) clean.doc
$(MAKE_CMD) $(MFLAGS) includes
$(MAKE_CMD) $(MFLAGS) includes.doc
$(MAKE_CMD) $(MFLAGS) depend
$(MAKE_CMD) $(MFLAGS) depend.doc
$(MAKE_CMD) $(MFLAGS) $(WORLDOPTS)
$(MAKE_CMD) $(MFLAGS) $(WORLDOPTS) all.doc
@echo ""
@date
@echo ""
@echo "Full build of $(RELEASE) of $(PRODUCT) complete."
@echo ""
World.dev:
@echo ""
@echo "Building $(RELEASE) of $(PRODUCT) excluding DOC"
@echo ""
@case "x$(BOOTSTRAPCFLAGS)" in x) \
echo I hope you checked the configuration parameters in $(IRULESRC) ; \
echo to see if you need to pass BOOTSTRAPCFLAGS. ; \
echo "" ; \
;; esac;
@date
@echo ""
cd $(IMAKESRC) && $(MAKE) $(FLAGS) clean
$(MAKE) $(MFLAGS) Makefile.boot
$(MAKE_CMD) $(MFLAGS) VerifyOS
$(MAKE_CMD) $(MFLAGS) Makefiles
$(MAKE_CMD) $(MFLAGS) clean
$(MAKE_CMD) $(MFLAGS) includes
$(MAKE_CMD) $(MFLAGS) depend
$(MAKE_CMD) $(MFLAGS) $(WORLDOPTS)
@echo ""
@date
@echo ""
@echo "Full build of $(RELEASE) of $(PRODUCT) excluding DOC complete."
@echo ""
World.doc:
@echo ""
@echo "Building $(RELEASE) of $(PRODUCT) DOC"
@echo ""
@case "x$(BOOTSTRAPCFLAGS)" in x) \
echo I hope you checked the configuration parameters in $(IRULESRC) ; \
echo to see if you need to pass BOOTSTRAPCFLAGS. ; \
echo "" ; \
;; esac;
@date
@echo ""
cd $(IMAKESRC) && $(MAKE) $(FLAGS) clean
$(MAKE) $(MFLAGS) Makefile.boot
$(MAKE_CMD) $(MFLAGS) VerifyOS
$(MAKE_CMD) $(MFLAGS) Makefiles.doc
$(MAKE_CMD) $(MFLAGS) clean.doc
$(MAKE_CMD) $(MFLAGS) includes.doc
$(MAKE_CMD) $(MFLAGS) depend.doc
$(MAKE_CMD) $(MFLAGS) $(WORLDOPTS) all.doc
@echo ""
@date
@echo ""
@echo "Full build of $(RELEASE) of $(PRODUCT) DOC complete."
@echo ""
.PRECIOUS: Makefile
# This is just a sequence of bootstrapping steps we have to do.
# The steps are listed as separate targets so clearmake can wink in
# the Makefile.proto files.
Makefile.boot: imake.proto $(DEPENDSRC)/Makefile.proto depend.bootstrap $(IMAKESRC)/Makefile.proto imake.bootstrap
imake.proto:
cd $(IMAKESRC) && $(MAKE) $(FLAGS)
$(RM) $(DEPENDSRC)/Makefile.proto
$(DEPENDSRC)/Makefile.proto:
$(IMAKE_CMD) -s $(DEPENDSRC)/Makefile.proto -f $(DEPENDSRC)/Imakefile -DTOPDIR=$(DEPENDTOP) -DCURDIR=$(DEPENDSRC)
depend.bootstrap:
cd $(DEPENDSRC) && $(RM) -r Makefile Makefile.dep makedepend *.o bootstrap
cd $(DEPENDSRC) && $(MAKE) -f Makefile.proto bootstrap
$(IMAKESRC)/Makefile.proto:
$(IMAKE_CMD) -s $(IMAKESRC)/Makefile.proto -f $(IMAKESRC)/Imakefile -DTOPDIR=$(IMAKETOP) -DCURDIR=$(IMAKESRC)
imake.bootstrap:
cd $(IMAKESRC) && $(MAKE) -f Makefile.proto bootstrapdepend
cd $(IMAKESRC) && $(MAKE) $(FLAGS) bootstrap
cd $(IMAKESRC) && $(MAKE) -f Makefile.proto all
-@if [ -f xmakefile ]; then set -x; \
$(RM) xmakefile.bak; $(MV) xmakefile xmakefile.bak; \
else exit 0; fi
$(MAKE) $(MFLAGS) xmakefile
Makefile::
$(MAKE) $(MFLAGS) xmakefile
xmakefile: Imakefile
$(IMAKE_CMD) -s xmakefile -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
World.Win32:
@echo :
@echo Building $(RELEASE) of $(PRODUCT).
@echo :
@echo :
cd $(IMAKESRC)
$(NMAKE) -f Makefile.ini clean.Win32
$(NMAKE) -f Makefile.ini imake.exe
cd ..\..
-if exist xmakefile.bak del xmakefile.bak
-if exist xmakefile ren xmakefile xmakefile.bak
$(IMAKE:/=\) -s xmakefile -I$(IRULESRC) $(IMAKE_DEFINES) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
$(NMAKE_CMD) $(MFLAGS) VerifyOS
$(NMAKE_CMD) $(MFLAGS) Makefiles
$(NMAKE_CMD) $(MFLAGS) clean
$(NMAKE_CMD) $(MFLAGS) includes
$(NMAKE_CMD) $(MFLAGS) depend
$(NMAKE_CMD) $(MFLAGS) $(WIN32WORLDOPTS)
@echo :
@echo :
@echo Full build of $(RELEASE) of $(PRODUCT) complete.
@echo :
# don't allow any default rules in this Makefile
.SUFFIXES:
# a copy of every rule that might be invoked at top level
clean:
$(MAKE_CMD) $@
dangerous_strip_clean:
$(MAKE_CMD) $@
depend:
$(MAKE_CMD) $@
Everything:
$(MAKE_CMD) $@
external.ln:
$(MAKE_CMD) $@
includes:
$(MAKE_CMD) $@
install.ln:
$(MAKE_CMD) $@
install.man:
$(MAKE_CMD) $@
install:
$(MAKE_CMD) $@
Makefiles:
$(MAKE_CMD) $@
man_keywords:
$(MAKE_CMD) $@
tags:
$(MAKE_CMD) $@
VerifyOS:
$(MAKE_CMD) $@
# dev versions
Everything.dev:
$(MAKE_CMD) $@
# doc versions
clean.doc:
$(MAKE_CMD) $@
depend.doc:
$(MAKE_CMD) $@
Everything.doc:
$(MAKE_CMD) $@
includes.doc:
$(MAKE_CMD) $@
install.man.doc:
$(MAKE_CMD) $@
install.doc:
$(MAKE_CMD) $@
Makefiles.doc:
$(MAKE_CMD) $@
tags.doc:
$(MAKE_CMD) $@

3557
cde/OPENBUGS Normal file

File diff suppressed because it is too large Load diff

318
cde/README-2.1.10 Normal file
View file

@ -0,0 +1,318 @@
**********************************************************************
NOTE: CDE/MOTIF IS LICENSED SOFTWARE. SOURCE AND OBJECT CODE IS NOT
TO BE DISTRIBUTED TO THIRD PARTIES EXCEPT AS PROVIDED BY THE TERMS OF
YOUR LICENSE AGREEMENT. PASSIVE DISTRIBUTION TO UNIDENTIFIED PARTIES,
SUCH AS MAKING FILES AVAILABLE FOR UNRESTRICTED ELECTRONIC FILE
TRANSFER, IS STRICTLY PROHIBITED BY THE LICENSE.
THESE RESTRICTIONS APPLY TO ANY PARTY TO WHOM THE SOFTWARE HAS BEEN
DISTRIBUTED.
**********************************************************************
THE PURPOSE OF THIS RELEASE
This is the first maintenance release for CDE and Motif 2.1.
It was designed to resolve as many defects as possible from the
project's defect database, with a concentration for CDE on dtmail
problems. This maintenance release resolves 523 problem reports
against CDE and Motif 2.1.
The Open Group encourages the reporting of all bugs found in CDE
and Motif regardless of the platform or hardware configuration in
which the bug is found. However, The Open Group will commit to
accept (and repair according to priority) only those bugs that can
be replicated on the current reference configurations.
DOWNLOAD INSTRUCTIIONS
This section describes how to unload the release archives
available at this ftp site, including information about how much
disk space is required.
The CDE/Motif 2.1.10 release is provided as compressed tar archives.
README-2.1.10 - this file
cde.tar.Z - a compressed tar file of the
CDE 2.1.10 source code
cde-test.tar.Z - a compressed tar file of the
CDE 2.1.10 tests
cde-test-misc.tar.Z - a compressed tar file of
test results for CDE/Motif 2.1.10
motif.tar.Z - a compressed tar file of the
MOTIF 2.1.10 source code
motif-test-misc.tar.Z - a compressed tar file of
test results for Motif 2.1.10
27 Mb motif-test-misc
The CDE/Motif 2.1.10 release is in the form of a sparse tree; that
is, it contains only files that have been modified in either CDE or
Motif since the 2.1 release. If you are a CDE licensee you will
receive files for both CDE and Motif. If you are a Motif-only
licensee you will receive files just for Motif.
To download the archives from the ftp site you will need approximately
18.5 megabytes (for CDE licensees) or 9.3 megabytes (for Motif-only
licensees) of disk space to hold just the compressed archives. Once the
archives have been downloaded they should be first uncompressed and then
untarred (see instructions below). The uncompressed archives require
approximately 91 (CDE) or 37 (Motif-only) megabytes. After untarring
the archives, you will need an additional 96 (CDE) or 52 (Motif-only)
megabytes of space to hold the unloaded directories. Once the tar
operation has completed you may wish to remove the tar archive files
(*tar).
MOTIF-only CDE/Motif
Mb Mb Files
-- -- -----
(9.3 18.5 compressed archives )
37 91 archives after uncompress
52 96 untarred archives
89 187 Total
After ftp-ing the files to your machine, you should first uncompress
the compressed (*.Z) files with the command:
uncompress <filename>.Z
Once the tar archives have been uncompressed, you can untar each
with the command:
tar xvf <filename>.tar
This command will preserve the .tar file while unloading its contents
into your current working directory. If you wish to list a table of
contents of the tar file before actually unloading it you can do so
with the command:
tar tvf <filename>.tar
INSTALLING THIS RELEASE
This release is made up of a "sparse tree" of files that have changed
since release 2.1. The new versions of the files should replace the
corresponding CDE or Motif 2.1 versions of the files in your source
tree.
After the release is unloaded, you can use, for example, cp -R command
to copy the sources from the current directory into your source tree.
This release creates several new files. If you are using a symbolic
link tree, you will need to create new links for them.
Please see the Release Notes from 2.1 for instructions on building
a full release tree.
IMPORTANT CHANGES IN THIS RELEASE
The majority of changes in this release are for general defect
repair in the code and tests. Additionally, some focused work
was performed in the following areas described below:
X11R6.4 and XtMalloc
Dtmail maintenance
Japanese Translations
Defect Repair
This patch release resolves 523 problem reports against CDE and
Motif 2.1. Each of these defects were resolved in one of three
ways: fixed (problem was recreated and repaired), duplicate
(problem was already reported and recorded in defect database),
or cancelled (problem could not be recreated in current code
base). The breakdown by component and resolution type is:
FIXED: Total 326
CDE Code: 160 Motif Code: 91
Doc: 2 Test: 18
Test: 55
------------- --------------
Total: 217 Total: 109
DUPLICATE: Total 51
CDE Code: 30 Motif Code: 10
Doc: 4 Test: 1
Test: 6
------------- --------------
Total: 40 Total: 11
CANCEL: Total 146
CDE Code: 45 Motif Code: 49
Test: 36 Test: 14
Doc: 2
------------- --------------
Total: 81 Total: 65
For more information on the bugs resolved, see the file
CLOSEDBUGS in this release.
X11R6.4 and XtMalloc
The Open Group is comitted to a unified desktop technology
(X, Motif and CDE). Therefore we built and tested CDE and
Motif 2.1.10 against a pre-release version of X11R6.4. Once
the final release of X11R6.4 is ready we will build and test
with it. We do not expect to find any problems running with
the production version but will provide any fixes if
necessary.
One important change that went into the X11R6.4 release was
to fix the behavior of XtMalloc. The specification clearly
state that XtMalloc should behave like the underlying malloc
when passed a size of 0 (zero). The old XtMalloc would
allocate space, even if it was passed a size of 0. In X11R6.4
XtMalloc no longer has this behavior. On some platforms this
can cause failures with faulty code that depends on that
behavior.
We have found such calls in both the CDE and Motif code through
our test cycle and by visual inspection and have repaired them
along the way. There is the potential for additional problems
of this form - developers should be alert to this possibility.
If developers want the old behavior of XtMalloc then they should
define both MALLOC_0_RETURNS_NULL and XTMALLOC_BC in their
site.def file.
Dtmail maintenance
In addition to intensive efforts to fix outstanding defects
throughout CDE and Motif, we paid special attention to problems
in the CDE 2.1.10 Mailer. These problems include the following:
- Support for X11R6 Session Management Protocol
- Unified mailbox menus
- Support for mail aliases
- Support for mail retrieval from standard mail servers
Support for X11R6 Session Management Protocol
The CDE 2.1.10 Mailer now supports the basic elements of the
X11R6 Session Management Protocol including responding to
interactive and non-interactive SaveYourself requests as well
as Die requests. For non-interactive SaveYourself requests,
the Mailer simply saves the size and location of all the
mailbox and compose windows. Deleted messages in mailboxes are
retained. For interactive SaveYourself requests, the Mailer may
display dialogs asking the user to verify that deleted messages
should be expunged or that the contents of compose windows
should be deleted.
Unified file selection menus
The CDE 2.1.10 Mailer now provides a consistent set of menus
and file selection boxes for all operations involving mailboxes.
These operations include Mailbox->Open, Message->CopyTo, and Move.
Previously, each of these commands had its own file selection box.
Changes made in one FSB were not reflected in any of the others.
In addition, the Mailbox->Open command did not provide users with
the menu of predefined mailboxes as in the Message->CopyTo, and
Move commands. In the CDE 2.1.10 Mailer the operation of all
three commands has been made completely consistent from the user's
perspective.
Similar fixes were made for all operations involving files
including Message->SaveAsText and Attachments->SaveAs.
Support for mail aliases
Popup menus containing the user's predefined aliases were added to
the address fields (To:, Cc:, and Bcc:) in the message composer
dialogs. The user can now add an addressee to one of these fields
simply by selecting from the menu of aliases.
Support for mail retrieval from standard mail servers
The CDE 2.1.10 Mailer has been fixed to support retrieving mail
from standard mail servers. Supported Mail Server protocols
include POP2, POP3, APOP, and IMAP. However, to date, only the
POP3 has been well tested at The Open Group.
Japanese Translations
Deliverables of the CDE 2.1 project included translations of
all documentation. The Japanese translations were not received
in time for the 2.1 release but were delivered at the beginning
of this year. They were made available electronically at that
time to licensees and have also been included in this 2.1.10
release. This includes Japanese manual pages and books.
BUG LISTS
In the release archive there are two files, OPENBUGS and
CLOSEDBUGS, which contain, respectively, the list of all bugs
from any version of CDE or Motif not yet closed, and all bugs
from CDE or Motif fixed in this patch release.
BUILDING MOTIF FOR YOUR SYSTEM
This release requires no changes in the build process. Please
refer to the Release Notes for more information.
REFERENCE PLATFORMS
The Open Group has used a number of platforms during the
development of the 2.1.10 release. However, the following
reference platforms are the only ones where the complete
test cycle was run. Test results appear below.
CDE and Motif:
HP9000/7xx running HP-UX 10.20
Digital Alpha 3000 running Digital Unix 4.0
Motif-only:
Sun SPARCstation running Solaris 2.4
using the SC 4.0 C compiler and SC 4.1 C++ compilers
TEST RESULTS SUMMARY
Since this is a general availability release, it has undergone
the full quality assurance cycle at The Open Group. The test
cycle includes running the following test suites:
MVS - Motif Validation Suite
QATS - Motif Quality Assurance Test Suite
CDE Regression Tests
CDE Performance Tests
Memory Tests
The results of these test runs can be found in the release
archive under cde-test-misc/reports/cde2.1.10.

282
cde/README-2.1.20 Normal file
View file

@ -0,0 +1,282 @@
**********************************************************************
NOTE: CDE/MOTIF IS LICENSED SOFTWARE. SOURCE AND OBJECT CODE IS NOT
TO BE DISTRIBUTED TO THIRD PARTIES EXCEPT AS PROVIDED BY THE TERMS OF
YOUR LICENSE AGREEMENT. PASSIVE DISTRIBUTION TO UNIDENTIFIED PARTIES,
SUCH AS MAKING FILES AVAILABLE FOR UNRESTRICTED ELECTRONIC FILE
TRANSFER, IS STRICTLY PROHIBITED BY THE LICENSE.
THESE RESTRICTIONS APPLY TO ANY PARTY TO WHOM THE SOFTWARE HAS BEEN
DISTRIBUTED.
**********************************************************************
THE PURPOSE OF THIS RELEASE
This is the second maintenance release for CDE and Motif 2.1.
It was designed to resolve as many defects as possible from the
project's defect database. This maintenance release resolves 423
problem reports against CDE and Motif 2.1.10.
The Open Group encourages the reporting of all bugs found in CDE
and Motif regardless of the platform or hardware configuration in
which the bug is found. However, The Open Group will commit to
accept (and repair according to priority) only those bugs that can
be replicated on the current reference configurations.
DOWNLOAD INSTRUCTIIONS
This section describes how to unload the release archives
available at this ftp site, including information about how much
disk space is required.
The CDE/Motif 2.1.20 release is provided as compressed tar archives.
README-2.1.20 - this file
cde.tar.Z - a compressed tar file of the
CDE 2.1.20 source code
cde-test.tar.Z - a compressed tar file of the
CDE 2.1.20 tests
cde-test-misc.tar.Z - a compressed tar file of
test results for CDE/Motif 2.1.20
motif.tar.Z - a compressed tar file of the
MOTIF 2.1.20 source code
motif-test-misc.tar.Z - a compressed tar file of
test results for Motif 2.1.20
The CDE/Motif 2.1.20 release is in the form of a sparse tree; that
is, it contains only files that have been modified in either CDE or
Motif since the 2.1.10 release. If you are a CDE licensee you will
receive files for both CDE and Motif. If you are a Motif-only
licensee you will receive files just for Motif.
After ftp-ing the files to your machine, you should first uncompress
the compressed (*.Z) files with the command:
uncompress <filename>.Z
Once the tar archives have been uncompressed, you can untar each
with the command:
tar xvf <filename>.tar
This command will preserve the .tar file while unloading its contents
into your current working directory. If you wish to list a table of
contents of the tar file before actually unloading it you can do so
with the command:
tar tvf <filename>.tar
INSTALLING THIS RELEASE
This release is made up of a "sparse tree" of files that have changed
since release 2.1.10. The new versions of the files should replace the
corresponding CDE or Motif 2.1.10 versions of the files in your source
tree.
After the release is unloaded, you can use, for example, cp -R command
to copy the sources from the current directory into your source tree.
This release creates several new files. If you are using a symbolic
link tree, you will need to create new links for them.
Please see the Release Notes from 2.1 for instructions on building
a full release tree.
IMPORTANT CHANGES IN THIS RELEASE
Defect Repair
This patch release resolves 423 problem reports against CDE and
Motif 2.1.10. Each of these defects were resolved in one of three
ways: fixed (problem was recreated and repaired), duplicate
(problem was already reported and recorded in defect database),
or cancelled (problem could not be recreated in current code
base). The breakdown by component and resolution type is:
FIXED: Total 298
CDE Code: 193 Motif Code: 68
CDE Doc: 1 Motif Doc: 0
CDE Test: 32 Motif Test: 4
-------------- ---------------
Total: 226 Total: 72
DUPLICATE: Total 42
CDE Code: 19 Motif Code: 11
CDE Doc: 0 Motif Doc: 0
CDE Test: 11 Motif Test: 1
-------------- ---------------
Total: 30 Total: 12
CANCEL: Total 83
CDE Code: 35 Motif Code: 22
CDE Doc: 0 Motif Doc: 1
CDE Test: 20 Motif Test: 5
-------------- ---------------
Total: 55 Total: 28
For more information on the bugs resolved, see the file
CLOSEDBUGS in this release.
Test Improvements
Several changes were made for CDE 2.1.20 to streamline the
automated testing process. Included are necessary fixes in
order to significantly improve test performance times, as well
as to eliminate test hangs.
Specific fixes include
CDExc23856 deiconify tests have logic backwards
This was a legacy bug in QATS that caused many tests to hang when
doing an iconify/deiconify combination in order to force expose
events
CDExc23824 DtAction tests take extremely long to complete
Since X events were being processed once every thirty seconds, test
performance has been improved from overnight to twenty minutes
CDExc23843 dtpad tests need speeding up on the printing delays
When outputting characters to the screen dtpad was incorrectly
sleeping for one half second between each one. The performance
of this suite has improved from twelve hours to five hours.
BUG LISTS
In the release archive there are two files, OPENBUGS and
CLOSEDBUGS, which contain, respectively, the list of all bugs
from any version of CDE or Motif not yet closed, and all bugs
from CDE or Motif fixed in this patch release.
BUILDING MOTIF FOR YOUR SYSTEM
Since X11 is NOT being delivered as part of this release, there
are some minor changes in the build process for Motif with respect
to the build process described in the 2.1 Release Notes.
Replace step 2 under the Building Motif subsection of Section 3:
2. If you are building with imports (the default setup in site.def),
construct the necessary links as follows:
% cd $CDEBUILDDIR/motif
% mkdir -p imports/x11
% cd imports/x11
% ln -s <X11_bin_directory> bin
% ln -s <X11_includes_directory> includes
% ln -s <X11_libs_directory> libs
REFERENCE PLATFORMS
The Open Group has used a number of platforms during the
development of the 2.1.20 release. However, the following
reference platforms are the only ones where the complete
test cycle was run. Test results appear below.
CDE and Motif:
HP9000/7xx running HP-UX 10.20
Sun SPARCstation running Solaris 2.4
using the SC 4.0 C compiler and SC 4.1 C++ compilers
Changes to X11R6.4:
CDE and Motif 2.1.20 have been built and tested upon a base of
X11R6.4 patchlevel 3. During the development of 2.1.20, a
significant defect in the I18N code of X was discovered. The
symptom is that when XMODIFIERS is not set, there is a possibility
of memory corruption. It is recommended that the following patch
be applied:
*** imInt.c@@/main/5 Sat May 30 21:04:36 1998
--- xc/lib/X11/imInt.c Mon Aug 24 16:17:25 1998
***************
*** 1,4 ****
! /* $TOG: imInt.c /main/5 1998/05/30 21:11:16 kaleb $ */
/******************************************************************
Copyright 1992, 1993, 1994 by FUJITSU LIMITED
--- 1,4 ----
! /* $TOG: imInt.c /main/6 1998/08/24 16:22:12 mgreess $ */
/******************************************************************
Copyright 1992, 1993, 1994 by FUJITSU LIMITED
***************
*** 166,174 ****
_XimMakeImName(lcd)
XLCd lcd;
{
! char* begin;
! char* end;
! char* ret;
int i = 0;
char* ximmodifier = XIMMODIFIER;
--- 166,174 ----
_XimMakeImName(lcd)
XLCd lcd;
{
! char* begin = NULL;
! char* end = NULL;
! char* ret = NULL;
int i = 0;
char* ximmodifier = XIMMODIFIER;
***************
*** 182,189 ****
}
ret = Xmalloc(end - begin + 2);
if (ret != NULL) {
! (void)strncpy(ret, begin, end - begin + 1);
! ret[end - begin + 1] = '\0';
}
return ret;
}
--- 182,192 ----
}
ret = Xmalloc(end - begin + 2);
if (ret != NULL) {
! if (begin != NULL && end != NULL) {
! (void)strncpy(ret, begin, end - begin + 1);
! ret[end - begin + 1] = '\0';
! }
! else *ret = '\0';
}
return ret;
}
TEST RESULTS SUMMARY
Since this is a general availability release, it has undergone
the full quality assurance cycle. The cycle includes running the
following test suites:
QATS - Motif Quality Assurance Test Suite
VSM 4.1 - Motif Validation Suite
CDE Regression Tests
The results of these test runs can be found in the release
archive under cde-test-misc/reports/cde-2.1.20. Note that the
the journal files (.prt) and other output results generated by
QATS have been included for the first time.

280
cde/README-2.1.30 Normal file
View file

@ -0,0 +1,280 @@
**********************************************************************
NOTE: CDE/MOTIF IS LICENSED SOFTWARE. SOURCE AND OBJECT CODE IS NOT
TO BE DISTRIBUTED TO THIRD PARTIES EXCEPT AS PROVIDED BY THE TERMS OF
YOUR LICENSE AGREEMENT. PASSIVE DISTRIBUTION TO UNIDENTIFIED PARTIES,
SUCH AS MAKING FILES AVAILABLE FOR UNRESTRICTED ELECTRONIC FILE
TRANSFER, IS STRICTLY PROHIBITED BY THE LICENSE.
THESE RESTRICTIONS APPLY TO ANY PARTY TO WHOM THE SOFTWARE HAS BEEN
DISTRIBUTED.
**********************************************************************
THE PURPOSE OF THIS RELEASE
This is the third maintenance release for CDE and Motif 2.1.
It was designed to resolve as many defects as possible from the
project's defect database. This maintenance release resolves 515
problem reports against CDE and Motif 2.1.20.
The Open Group encourages the reporting of all bugs found in CDE
and Motif regardless of the platform or hardware configuration in
which the bug is found. However, The Open Group will commit to
accept (and repair according to priority) only those bugs that can
be replicated on the current reference configurations.
DOWNLOAD INSTRUCTIONS
This section describes how to unload the release archives
available at this ftp site.
The CDE/Motif 2.1.30 release is provided as compressed tar archives.
README-2.1.30 - this file
cde.tar.Z - a compressed tar file of the
CDE 2.1.30 source code
cde-test.tar.Z - a compressed tar file of the
CDE 2.1.30 tests
cde-test-misc.tar.Z - a compressed tar file of
test results for CDE/Motif 2.1.30
motif.tar.Z - a compressed tar file of the
MOTIF 2.1.30 source code
motif-test-misc.tar.Z - a compressed tar file of
test results for Motif 2.1.30
The CDE/Motif 2.1.30 release is in the form of a sparse tree; that
is, it contains only files that have been modified in either CDE or
Motif since the 2.1.20 release. If you are a CDE licensee you will
receive files for both CDE and Motif. If you are a Motif-only
licensee you will receive files just for Motif.
After ftp-ing the files to your machine, you should first uncompress
the compressed (*.Z) files with the command:
uncompress <filename>.Z
Once the tar archives have been uncompressed, you can untar each
with the command:
tar xvf <filename>.tar
This command will preserve the .tar file while unloading its contents
into your current working directory. If you wish to list a table of
contents of the tar file before actually unloading it you can do so
with the command:
tar tvf <filename>.tar
INSTALLING THIS RELEASE
This release is made up of a "sparse tree" of files that have changed
since release 2.1.20. The new versions of the files should replace the
corresponding CDE or Motif 2.1.20 versions of the files in your source
tree.
After the release is unloaded, you can use, for example, cp -R command
to copy the sources from the current directory into your source tree.
This release creates several new files. If you are using a symbolic
link tree, you will need to create new links for them.
Please see the Release Notes from 2.1 for instructions on building
a full release tree.
IMPORTANT CHANGES IN THIS RELEASE
Defect Repair
This patch release resolves 515 problem reports against CDE and
Motif 2.1.20. Each of these defects were resolved in one of three
ways: fixed (problem was recreated and repaired), duplicate
(problem was already reported and recorded in defect database),
or canceled (problem could not be recreated in current code
base). The breakdown by component and resolution type is:
FIXED: Total 370
CDE Code: 95 Motif Code: 91
CDE Doc: 1 Motif Doc: 0
CDE Test: 110 Motif Test: 73
-------------- ---------------
Total: 206 Total: 164
DUPLICATE: Total 62
CDE Code: 4 Motif Code: 10
CDE Doc: 0 Motif Doc: 0
CDE Test: 19 Motif Test: 29
-------------- ---------------
Total: 23 Total: 39
CANCEL: Total 83
CDE Code: 18 Motif Code: 30
CDE Doc: 0 Motif Doc: 0
CDE Test: 13 Motif Test: 22
-------------- ---------------
Total: 31 Total: 52
For more information on the bugs resolved, see the file
CLOSEDBUGS in this release.
As of the completion of this maintenance release there are no
open defects against the CDE and Motif code and tests that have a
priority of 1 or a severity of 1.
Security
This release contains changes to address a number of security
vulnerabilities in CDE that were reported to CERT during 1999.
Those vulnerabilities are described in the CERT Advisory CA-99-11,
Four Vulnerabilities in the Common Desktop Environment. A full
description can be found on the CERT Web site at
http://www.cert.org/advisories/CA-99-11-CDE.html.
A subset of those changes were released to the affected vendors
via the CERT working group formed to address the reported problems.
This release also includes additional changes to various CDE
desktop facilities to sense access violations and report them
to the user.
BUG LISTS
In the release archive there are two files, OPENBUGS and
CLOSEDBUGS, which contain, respectively, the list of all bugs
from any version of CDE or Motif not yet closed, and all bugs
from CDE or Motif fixed in this patch release.
BUILDING MOTIF FOR YOUR SYSTEM
Since X11 is NOT being delivered as part of this release, there
are some minor changes in the build process for Motif with respect
to the build process described in the 2.1 Release Notes.
Replace step 2 under the Building Motif subsection of Section 3:
2. If you are building with imports (the default setup in site.def),
construct the necessary links as follows:
% cd $CDEBUILDDIR/motif
% mkdir -p imports/x11
% cd imports/x11
% ln -s <X11_bin_directory> bin
% ln -s <X11_includes_directory> includes
% ln -s <X11_libs_directory> libs
REFERENCE PLATFORMS
The Open Group has used a number of platforms during the
development of the 2.1.30 release. However, the following
reference platforms are the only ones where the complete
test cycle was run. Test results appear below.
CDE and Motif:
HP9000/7xx running HP-UX 10.20
Sun SPARCstation running Solaris 2.4
using the SC 4.0 C compiler and SC 4.1 C++ compilers
Note that the Validation Suite for Motif (VSM) was also run on a
Digital AlphaStation 200 running Digital UNIX 4.0D. Results were
consistent with those on the reference platforms and are included
in the test results archives.
Changes to X11R6.4:
CDE and Motif 2.1.30 have been built and tested upon a base of
X11R6.4 patchlevel 3. During the development of 2.1.20, a
significant defect in the I18N code of X was discovered; if you have
not yet corrected this problem, you are advised to do so prior
to making use of 2.1.30.
The symptom is that when XMODIFIERS is not set, there is a possibility
of memory corruption. It is recommended that the following patch
be applied:
*** imInt.c@@/main/5 Sat May 30 21:04:36 1998
--- xc/lib/X11/imInt.c Mon Aug 24 16:17:25 1998
***************
*** 1,4 ****
! /* $TOG: README-2.1.30 /main/1 1999/12/14 14:52:14 devobj $ */
/******************************************************************
Copyright 1992, 1993, 1994 by FUJITSU LIMITED
--- 1,4 ----
! /* $TOG: README-2.1.30 /main/1 1999/12/14 14:52:14 devobj $ */
/******************************************************************
Copyright 1992, 1993, 1994 by FUJITSU LIMITED
***************
*** 166,174 ****
_XimMakeImName(lcd)
XLCd lcd;
{
! char* begin;
! char* end;
! char* ret;
int i = 0;
char* ximmodifier = XIMMODIFIER;
--- 166,174 ----
_XimMakeImName(lcd)
XLCd lcd;
{
! char* begin = NULL;
! char* end = NULL;
! char* ret = NULL;
int i = 0;
char* ximmodifier = XIMMODIFIER;
***************
*** 182,189 ****
}
ret = Xmalloc(end - begin + 2);
if (ret != NULL) {
! (void)strncpy(ret, begin, end - begin + 1);
! ret[end - begin + 1] = '\0';
}
return ret;
}
--- 182,192 ----
}
ret = Xmalloc(end - begin + 2);
if (ret != NULL) {
! if (begin != NULL && end != NULL) {
! (void)strncpy(ret, begin, end - begin + 1);
! ret[end - begin + 1] = '\0';
! }
! else *ret = '\0';
}
return ret;
}
TEST RESULTS SUMMARY
Since this is a general availability release, it has undergone
the full quality assurance cycle. The cycle includes running the
following test suites:
QATS - Motif Quality Assurance Test Suite
VSM 4.1 - Motif Validation Suite
CDE Regression Tests
The results of these test runs can be found in the release
archive under cde-test-misc/reports/cde-2.1.30 and
motif-test-misc/reports/cde-2.1.30.

326
cde/README-2.1.30.snapshot Normal file
View file

@ -0,0 +1,326 @@
**********************************************************************
NOTE: CDE/MOTIF IS LICENSED SOFTWARE. SOURCE AND OBJECT CODE IS NOT
TO BE DISTRIBUTED TO THIRD PARTIES EXCEPT AS PROVIDED BY THE TERMS OF
YOUR LICENSE AGREEMENT. PASSIVE DISTRIBUTION TO UNIDENTIFIED PARTIES,
SUCH AS MAKING FILES AVAILABLE FOR UNRESTRICTED ELECTRONIC FILE
TRANSFER, IS STRICTLY PROHIBITED BY THE LICENSE.
THESE RESTRICTIONS APPLY TO ANY PARTY TO WHOM THE SOFTWARE HAS BEEN
DISTRIBUTED.
**********************************************************************
THE PURPOSE OF THIS RELEASE
This is the snapshot release prior to the third and final
maintenance release for CDE and Motif 2.1. It was designed to
resolve as many defects as possible from the project's defect
database. This maintenance release resolves 243 problem reports
against CDE and Motif 2.1.20.
The Open Group encourages the reporting of all bugs found in CDE
and Motif regardless of the platform or hardware configuration in
which the bug is found. However, The Open Group will commit to
accept (and repair according to priority) only those bugs that can
be replicated on the current reference configurations.
DOWNLOAD INSTRUCTIIONS
This section describes how to unload the release archives
available at this ftp site, including information about how much
disk space is required.
The CDE/Motif 2.1.30 snapshot release is provided as a compressed
tar archives consisting of a sparce tree (i.e. only those files
which have been added or which have been modified since 2.1.20).
README-2.1.30.snapshot - this file
cde.tar.Z - a compressed tar file of the
CDE 2.1.30 snapshot source code
cde-test.tar.Z - a compressed tar file of the
CDE 2.1.30 snapshot tests
cde-test-misc.tar.Z - a compressed tar file of
test results for CDE/Motif
2.1.30 snapshot
motif.tar.Z - a compressed tar file of the
MOTIF 2.1.30 snapshot source code
motif-test-misc.tar.Z - a compressed tar file of
test results for Motif 2.1.30
snapshot
The CDE/Motif 2.1.30 snapshot release is in the form of a sparse tree;
that is, it contains only files that have been added or modified in
either CDE or Motif since the 2.1.20 release. If you are a CDE
licensee you will receive files for both CDE and Motif. If you are
a Motif-only licensee you will receive files just for Motif.
After ftp-ing the files to your machine, you should first uncompress
the compressed (*.Z) files with the command:
uncompress <filename>.Z
Once the tar archives have been uncompressed, you can untar each
with the command:
tar xvf <filename>.tar
This command will preserve the .tar file while unloading its contents
into your current working directory. If you wish to list a table of
contents of the tar file before actually unloading it you can do so
with the command:
tar tvf <filename>.tar
INSTALLING THIS RELEASE
This release is made up of a "sparse tree" of files that have been
added or changed since release 2.1.20. The new versions of the files
should replace the corresponding CDE or Motif 2.1.20 versions of the
files in your source tree.
After the release is unloaded, you can use, for example, cp -R command
to copy the sources from the current directory into your source tree.
This release creates several new files. If you are using a symbolic
link tree, you will need to create new links for them.
Please see the Release Notes from 2.1 for instructions on building
a full release tree.
IMPORTANT CHANGES IN THIS RELEASE
Defect Repair
This patch release resolves 243 problem reports against CDE and
Motif 2.1.20. Each of these defects were resolved in one of three
ways: fixed (problem was recreated and repaired), duplicate
(problem was already reported and recorded in defect database),
or cancelled (problem could not be recreated in current code
base). The breakdown by component and resolution type is:
FIXED: Total 174
CDE Code: 40 Motif Code: 51
CDE Doc: 1 Motif Doc: 0
CDE Test: 43 Motif Test: 39
-------------- ---------------
Total: 84 Total: 90
DUPLICATE: Total 25
CDE Code: 2 Motif Code: 4
CDE Doc: 0 Motif Doc: 0
CDE Test: 0 Motif Test: 19
-------------- ---------------
Total: 2 Total: 23
CANCEL: Total 44
CDE Code: 13 Motif Code: 19
CDE Doc: 0 Motif Doc: 0
CDE Test: 2 Motif Test: 10
-------------- ---------------
Total: 15 Total: 29
TOTAL: Total 243
CDE Code: 55 Motif Code: 74
CDE Doc: 1 Motif Doc: 0
CDE Test: 45 Motif Test: 68
-------------- ---------------
Total: 101 Total: 142
For more information on the bugs resolved, see the file
CLOSEDBUGS in this release.
Test Improvements
A significant number of CDE and Motif test defects were resolved
for the CDE/Motif 2.1.30 snapshot release. For the most part, these
represent an ongoing effort to establish a clean baseline in
Motif and reduce the overhead of false negatives in CDE.
BUG LISTS
In the release archive there are two files, OPENBUGS and
CLOSEDBUGS, which contain, respectively, the list of all bugs
from any version of CDE or Motif not yet closed, and all bugs
from CDE or Motif fixed in this patch release.
BUILDING MOTIF FOR YOUR SYSTEM
Since X11 is NOT being delivered as part of this release, there
are some minor changes in the build process for Motif with respect
to the build process described in the 2.1 Release Notes.
Replace step 2 under the Building Motif subsection of Section 3:
2. If you are building with imports (the default setup in site.def),
construct the necessary links as follows:
% cd $CDEBUILDDIR/motif
% mkdir -p imports/x11
% cd imports/x11
% ln -s <X11_bin_directory> bin
% ln -s <X11_includes_directory> includes
% ln -s <X11_libs_directory> libs
REFERENCE PLATFORMS
The Open Group has used a number of platforms during the
development of the CDE/Motif 2.1.30 snapshot release. However,
the following reference platforms are the only ones where the
snapshot test cycle was run. Test results appear below.
CDE and Motif:
HP9000/7xx running HP-UX 10.20
Sun SPARCstation running Solaris 2.4
using the SC 4.0 C compiler and SC 4.1 C++ compilers
Changes to X11R6.4:
Both the 2.1.20 and the 2.1.30 snapshot releases of CDE and Motif
have been built and tested upon a base of X11R6.4 patchlevel 3.
During the development of 2.1.20, a significant defect in the I18N
code of X was discovered. The symptom is that when XMODIFIERS is
not set, there is a possibility of memory corruption. It is
recommended that the following patch be applied if it has not
already been done:
*** imInt.c@@/main/5 Sat May 30 21:04:36 1998
--- xc/lib/X11/imInt.c Mon Aug 24 16:17:25 1998
***************
*** 1,4 ****
! /* $TOG: README-2.1.30.snapshot /main/1 1999/06/29 12:30:31 devobj $ */
/******************************************************************
Copyright 1992, 1993, 1994 by FUJITSU LIMITED
--- 1,4 ----
! /* $TOG: README-2.1.30.snapshot /main/1 1999/06/29 12:30:31 devobj $ */
/******************************************************************
Copyright 1992, 1993, 1994 by FUJITSU LIMITED
***************
*** 166,174 ****
_XimMakeImName(lcd)
XLCd lcd;
{
! char* begin;
! char* end;
! char* ret;
int i = 0;
char* ximmodifier = XIMMODIFIER;
--- 166,174 ----
_XimMakeImName(lcd)
XLCd lcd;
{
! char* begin = NULL;
! char* end = NULL;
! char* ret = NULL;
int i = 0;
char* ximmodifier = XIMMODIFIER;
***************
*** 182,189 ****
}
ret = Xmalloc(end - begin + 2);
if (ret != NULL) {
! (void)strncpy(ret, begin, end - begin + 1);
! ret[end - begin + 1] = '\0';
}
return ret;
}
--- 182,192 ----
}
ret = Xmalloc(end - begin + 2);
if (ret != NULL) {
! if (begin != NULL && end != NULL) {
! (void)strncpy(ret, begin, end - begin + 1);
! ret[end - begin + 1] = '\0';
! }
! else *ret = '\0';
}
return ret;
}
TEST RESULTS SUMMARY
Since this is a snapshot release, only those components which were
modified have undergone quality assurance testing. The cycle for
the 2.1.30 snapshot includes running the following test suites:
QATS - Motif Quality Assurance Test Suite
Automated regressions tests in the following directories:
Toolkit/Buttons
Toolkit/ComboBox
Toolkit/Container
Toolkit/Converters
Toolkit/Form
Toolkit/IconVC
Toolkit/List
Toolkit/Manager
Toolkit/Menus
Toolkit/Message
Toolkit/Notebook
Toolkit/PanedWin
Toolkit/Primitive
Toolkit/ResInd
Toolkit/Scrollbar
Toolkit/Select
Toolkit/Shells
Toolkit/SpinBox
Toolkit/Text
Toolkit/Traversal
Toolkit/Windows
XmString
uil/EnumVal
uil/ForRef
uil/ResInd
uil/Syntax
uil/widgets
Manual regression tests in the following directories:
Toolkit/Manual
uil/Manual/callUil
uil/Manual/dataStructs
uil/Manual/validator
uil/Manual/Callback
uil/Manual/NL
CDE Regression Tests for the following components:
DefConfig
DevEnv
DtHelp
DtSvc
dragdrop
dtcm
dthelp
dtlogin
dtmail
dtsession
dtwm
The results of these test runs can be found in the release
archive under cde-test-misc/reports/cde-2.1.30/.../2.1.30C2.

5595
cde/ReleaseNotes.ps Normal file

File diff suppressed because it is too large Load diff

1601
cde/ReleaseNotes.sgm Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,95 @@
# $XConsortium: Makefile /main/3 1996/05/13 11:41:59 drk $
# use the load* target to force building
all::
findnewrcs.700.90:findnewrcs.c
rm -f $@
cc +DA1.0 +O1 -o $@ findnewrcs.c
loadfindnewrcs.700.90:
rm -f findnewrcs.700.90
cc +DA1.0 +O1 -o findnewrcs.700.90 findnewrcs.c
findnewrcs.700.807:findnewrcs.c
rm -f $@
cc +O1 -o $@ findnewrcs.c
loadfindnewrcs.700.807:
rm -f findnewrcs.700.807
cc +O1 -o findnewrcs.700.807 findnewrcs.c
findnewrcs.800.90:findnewrcs.c
rm -f $@
cc +DA1.0 +O1 -o $@ findnewrcs.c
loadfindnewrcs.800.90:
rm -f findnewrcs.800.90
cc +DA1.0 +O1 -o findnewrcs.800.90 findnewrcs.c
findnewrcs.800.80:findnewrcs.c
rm -f $@
cc +O1 -o $@ findnewrcs.c
loadfindnewrcs.800.80:
rm -f findnewrcs.800.80
cc +O1 -o findnewrcs.800.80 findnewrcs.c
findnewrcs.800.70:findnewrcs.c
rm -f $@
cc +O1 -o $@ findnewrcs.c
loadfindnewrcs.800.70:
rm -f findnewrcs.800.70
cc +O1 -o findnewrcs.800.70 findnewrcs.c
findnewrcs.300.90:findnewrcs.c
rm -f $@
cc +O1 -o $@ findnewrcs.c
loadfindnewrcs.300.90:
rm -f findnewrcs.300.90
cc +O1 -o findnewrcs.300.90 findnewrcs.c
findnewrcs.300.80:findnewrcs.c
rm -f $@
cc +O1 -o $@ findnewrcs.c
loadfindnewrcs.300.80:
rm -f findnewrcs.300.80
cc +O1 -o findnewrcs.300.80 findnewrcs.c
findnewrcs.SunOS:findnewrcs.c
rm -f $@
cc -o $@ findnewrcs.c
loadfindnewrcs.SunOS:
rm -f findnewrcs.SunOS
cc -o findnewrcs.SunOS findnewrcs.c
findnewrcs.SunOS_PPC:findnewrcs.c
rm -f $@
cc -o $@ findnewrcs.c
loadfindnewrcs.SunOS_PPC:
rm -f findnewrcs.SunOS_PPC
cc -o findnewrcs.SunOS_PPC findnewrcs.c
findnewrcs.AIX:findnewrcs.c
rm -f $@
cc -o $@ findnewrcs.c
loadfindnewrcs.AIX:
rm -f findnewrcs.AIX
cc -o findnewrcs.AIX findnewrcs.c
findnewrcs.UNIX_SV:findnewrcs.c
rm -f $@
cc -DUSL -o $@ findnewrcs.c
loadfindnewrcs.UNIX_SV:
rm -f findnewrcs.UNIX_SV
cc -o findnewrcs.UNIX_SV findnewrcs.c
findnewrcs.UNIX_System_V:findnewrcs.c
rm -f $@
cc -DUSL -o $@ findnewrcs.c
loadfindnewrcs.UNIX_System_V:
rm -f findnewrcs.UNIX_System_V
cc -o findnewrcs.UNIX_System_V findnewrcs.c
findnewrcs.HP-UX:findnewrcs.c
rm -f $@
cc +O1 -o $@ findnewrcs.c
loadfindnewrcs.HP-UX:
rm -f findnewrcs.HP-UX
cc +O1 -o findnewrcs.HP-UX findnewrcs.c

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,179 @@
ELF 4q4 (44  Ô\ÿ\ÿ]]ð X````<60>/usr/lib/ld.so.1C_7EWT5Z1%[K\N;]LJ S6?Q:X3D2^IA4M8)/HUPCO#V+"&$,*90'->!BF<G=(@YR.Ôèx h ˜ Ô  
 ] _t `\``@^à8" ]Ø@^8" #Ø
T(b02_(H"7]œ`>@!CfXÿñHèODd˜[_d8"a^ÔD"f xmb4v^¼8"|˜@]„\"‰T<12>^ø˜"•^t"<22>]ü\¢^\°©\ÿÿñ°]0<>·^È8"¿^Px"Å^D"Êb4!ÒÿñÙ]l8"à]Hæ^°8"ì_8"ò^˜8"øb8]< ,+8^,|_4H"p%]ÌD"+b<2b@8^ì˜"?]´@F
S^8HY]Täa]<5D>ðh_T"mbDt_,"{fD`\ÿñ˜_Xx"¡fH®_L8"´^¤8"»]¨|Ã]`0Ë^€ "Ô^DÌÛôâ``ÿñë_@8"ñ^ ¬ù]x<"fL ^hä"__iobopenstrrchrreadlink_finimainSourceLenreadmalloc_iob_endstrcatResolveLinkchownfork_start_environcreatUsagegetcwdfflushdup2readdirfreeperror_etextatexitsymlinkchdirstatenviron_edatamktemp_exitutimeclosermdirWorkingDirCmpexitGetNewfopenwritestrcmplstatoptinderrnofilenostrcpy_lib_versionfgetsfprintfstrlenwaitBufferexeclpoptarg_GLOBAL_OFFSET_TABLE_getgrnamSourceDirCmpmkdirunlinksprintfsetvbufclosedirfcloseprintf_DYNAMICchmodstrncmpgetoptWorkingLen_initopendirlibc.so.1/usr/ucblibb4& fDMb<Bb@C]00]<<]H7]TH]`T]l6]x[]„)]<5D>I]¨S]´E]À!]ÌA]ä@]ðW]ü-^3^^ Z^,>^8G^DV^P2^\.^h^^t,^€U^Œ*^˜:^¤R^°8^¼'^È1^Ô$^ìD^ø+_L_J_9_(_4?_@Y_LQ_XO_d#<15>ã¿ <C2BF>Çà<08>è¼ à  D¥, ¤ ¤@'˜ä$â4œ# <><04>@S¸S<>"°@S´ÿÿë<01>@@S­@S®?ÿÿc <63>ã€ð' D˜<>!ScÀÔ D@S¦<01> @S<><01>Çà<08>è?ÿÿc<E2809A>ã€ð' Dò' HÀ'¿üÀ'¿øÀ'¿ô˜<>! @$@S•—Ð#Ø@S”—Ð"cØÐ  H˜” @S<>º€¢?ÿ€ã€É™Ô¢DÔ'¿ü€Ú™ÖâDÖ'¿ø€Õ™ø"DÚO€<4F> €P€=—Þã°žà!—Þ$#°#—âc´¢`%—â$£´'—æ㼦à)—æ%#¼+—êc¸ª`-—ê%£¸€5/—îã°®à1—î&#°€.3—òc´²`5—ò&£´€'7—öã¼¶à—ö"#¼—Òc¸`—Ò"£¸Ö Àÿÿ‰<01> @S/ÐO€¢ A¿ÿÀ¢ a¿ÿ×€¢ m¿ÿꀢ o¿ÿÚ€¢ x¿ÿß¿ÿë¸ ¿ÿ°€—Úc¤š`—Ú#㤀x!—à#   #—à$c €q%—䣨¤ '—ä$㨀j¨ +—è%cÈ€e¬ /—ì%ãЀ`° 3—ð&cÄ€[5—ô£¬´ 7—ô&㬀T—Ð#˜<> —Ð"c˜€M—Ô£<> —Ô"ã<>€F—Ø#”˜ —Ø#c”€?—Þ㜞à!—Þ$#œ€8#™âbD%—â$£Ô€2'™æâD)—æ%#Ø€,+—À%cÌ€(-—죌¬ /—ì%㌀!ð ÿÿ<01> @Rµ<01><1D>" C€¢ ;¿ÿôS”¢À“2 ²@ ²@ ³.`@
`™*`Ö
€¢À¿ÿç˜
Ð <04>¿ÿØ¿ü€<C3BC>  Ú¿üÞK@€<>à¿üâL€¤`/€A˜<>"D$@Rš¸€¢ ä U`ˆ˜<>!@R<01> @Ryæ¿ü€<C3BC>è¿üêM€<4D>пü@R<08>@R~<01><1B> @R}Ð'¿hпhU`´”Ö¿ü@Rxì¿hì'¿ü<01>@Rk<01> @RkÐ'¿üпü’@Rlî¿ø€<C3B8>ð¿øòN€<4E>€@пü@RW<01> @RWÐ'¿øÐ¿øÒ¿ü@RXпøU`¼@RV¿lпø@RU<>ô¿€7<<3C>(€¢ пø’ @ íÐ'¿øÐ¿ø’ /@RE¸ÔO€<4F>
 <01>U`Ä@R><>À/˜<>!U`ÌÔ¿ø@R€0Ö¿øØJÀ€£ /€+˜<>"D$@R¸€¢ Ú @U˜<>!@Q÷<01> @Qîпø@R<08>@Qü<01><1B> @QûÐ'¿hпhUaÖ¿ø@QöÞ¿hÞ'¿øÐ¿øÒ¿ü@Qÿ<>à¿ô  à'¿ôпü@Qá<01> @Qá#˜Ð$b8˜Ð"8Ò¿ü@Qà˜Ð"8Ua@QÝпø@QÎ<01> @QÎ%™Ð$¢H™Ð"HÒ¿ø@QÍ™Ð"HUa @QʘÐ"8@Qº'™Ð$âL™Ð"H@Q´)˜Ð%"0+—êcÄ€<C384>-—죜€<C593>
—Ð#Ø@ ÿ—Ð#Ø@ b€%U<>!$@Q²U<>!0@Q®U<>!`Ò¿ü@Q©U<>!|Ò¿ø@Q¤/—î㜀<C593>
U<>!˜—Ò—Ô£Ø@Q—U<>!°@Q“1˜ð"<ò D€¦€R5˜ô¢<ö D€¦€€J˜Ð"<“* Ô € @Qhпø@Qd<01><1B> @QcÐ'¿h˜Öâ<™*àÚ @ Ua´Ð¿hÔ¿ø@QZ˜Þâ<¡+àâ @@QMпü@QI<01><1B> @QHÐ'¿d%˜ä¢<§, è Ua¼Ð¿dÔ¿ü@Q?пdÒ¿hÔ¿ô@пd@QLпh@QI+˜êb<ª`-˜ê%¢<¿ÿ´Ð¿üÒ¿øÔ¿ô@<01> @Q<01>Çà<08>è?ÿþ<62>ã€ð' Dò' Hô' LÀ'»@À'»<À'»8—Ð#”€<E2809D>˜<>!UaÄÔ H@P÷—ÒcŒ€¢`
˜<>!UaàÔ  H@PêU<>!ø@PõºÐ D@Pñ<01><1D> @PðÐ'¿ðпðU D@Pì—Ô£Œ€<C592>
˜<>!UbÔ¿ð@PË¿Pпð@Pô<>€¦»Dпð”$@Pï<>€žU<>"@PǺРH@PÃ<01><1D> @PÂÐ'¿HпHUb Ô H@P¾U<>"(@P´ºÐ H@P°<01><1D> @P¯Ð'¿DпDUb0Ô H@P«Ð¿H @
VÐ'¿H—Ö㌀<C592> ˜<>!Ub8Ô¿H@P…¿PпH@P®<>
»DпD”$@P©<>€S—Ø#¤€<C2A4> €N—Úc<><EFBFBD>  Ô¿ð™ÞâL”UbL˜<>!@Pb!—à#Ä€<C384> пð@ ¸Ð¿HÒ¿ð@ =€1Ò¿ð#™âbL@U<>"d@PsпHÒ H˜Ô¢0@Py<>ä¿H'˜æâ0èL€€¥ /Ô¿ð+™êbL”Ò¿HU<>"t@PZÒ¿H-˜ì¢0@Ô¿ð/™îâL”U<>"ˆ@PLпð@PLð¿Hð'¿ð²
ò'¿Lô¿L€<4C>€`¿Pпð@P4<>€Rö¿d9<ºÀ(€§@пð’ @ ÌÐ'¿ð€BÒ¿d<
@
 €¢À €9пðUb @P/Ð'¿ü€<C3BC>€.˜<>"D¿ü@P(˜<>"D@Oú˜šbCÀ* пð@P˜<>"D@Oð<01> @OðÐ'¿ðпð˜bD@Oð—Þ㌀<C592>˜<>!Ub¤Ô¿ð@OÌпü@P à¿L $ à'¿L¿ÿ â¿L€<4C>%—ä£<><EFBFBD>˜<>!UbÀÔ¿ð@O¬À'»8пð@Oç<> '˜æâ@€¤àпð@O߀¬U<>"Ø@OÜÐ'¿Ü€<C39C>€¤Ð¿Ü@OØÐ'¿Ø€<C398>€šÐ¿Ø<C2BF>
@O—€¢ ¿ÿòпØ<C2BF>
@OŽè¿Ø<C2BF><08> UbÜ@Oœ<>¿ÿâ˜<>"DÒ¿ð@O†˜<>"DUbà@OƒÒ¿Ø’`
˜<>"D@O}пØ<C2BF>
¿P@OŠ<>˜<>"D@O˜¿ÿÃê»8€<38> <01>!,@O_ì»,Ð%¡(î»,ðá(ð'»,<01>!,@OUÐ'»8ò»8ò'»,ô»,À&¡(ö»,À&à ˜<>"D@OG<01> @OGø»,Ð'ú»,Ð@˜bD@OEпØ<C2BF>
@O8Ò¿Ø”`
À*ÿþпØ<C2BF>
@O0<01> @O0Ø»,Ð# Ú»,Ð`Ò¿Ø’`
@O.пØ<C2BF>
@O!Þ»,Ð#àà»,¢ ¤¿Pè „è$`„è €è$`€¬ €¬% èè$@¬% èè$@¬% èè$@¬¥ è¿ÿõè$@î»,° ð%à˜ò»,À&a$¿ÿcпÜ@O<À'»@РD@O,<> 5˜ô¢@€¦ Ð D@O$€ÍU<>"ä@O!Ð'¿Ü€<C39C>€ÅпÜ@OÐ'¿Ø€<C398>€»ö¿ØøNà
€§ . пØ<C2BF>
Ubè@Nê<>¿ÿë˜<>"DÒ D@NÔ˜<>"DUbì@NÑÒ¿Ø’`
˜<>"D@NËпØ<C2BF>
¿P@NØ<>Ò¿Ø’`
U<>"ð@NÆ<>˜<>"D@NÝ¿ÿÃú»@€<> <01>!,@N¤Ò»4Ð"a(Ô»4Ö¡(Ö'»4<01>!,@NšÐ'»@Ø»@Ø'»4Ú»4À#a(Þ»4À#à ˜<>"D@NŒ<01> @NŒà»4Ð$â»4Ð@˜bD@NŠÐ¿Ø<C2BF>
@N}<01> @N}ä»4Ð$ æ»4ÐàÒ¿Ø’`
@N{пØ<C2BF>
@Nnè»4Ð% ê»4¬`®¿Pðà„ð% „ðà€ð% €´ €´& ðÀð%€´& ðÀð%€´& ðÀð%€´¦ ðÀ¿ÿõð%€ö»4¸ ø&à˜ú¿d<@€¢@
€$пØ<C2BF>
¿P@NW<>Ö»4˜àœš¿Pà`„à# „à`€à# €¤ €¤$ à@à#¤$ à@à#¤$ à@à#¤¤ à@¿ÿõà#æ»4¨ è$á$ê»4À%a$¿ÿBпÜ@N`À'»<ì L€<4C>€ÍРH@NL<> /˜îâ@€¥àРH@ND€½U<>"ô@NAÐ'¿Ü€<C39C>€µÐ¿Ü@N=Ð'¿Ø€<C398>€«ð¿ØòN
€¦`. пØ<C2BF>
Ubø@N
<>¿ÿë˜<>"DÒ H@Mô˜<>"DUbü@MñÒ¿Ø’`
˜<>"D@MëпØ<C2BF>
¿P@Mé<>˜<>"D@N¿ÿÌô»<€<> <01>!,@MÍö»0Ð&á(ø»0ú!(ú'»0<01>!,@MÃÐ'»<л<Ð'»0Ò»0À"a(Ô»0À"  ˜<>"D@Mµ<01> @MµÖ»0Ð"ÀØ»0ИbD@M³Ð¿Ø<C2BF>
@M¦<01> @M¦Ú»0Ð#`Þ»0ÐàÒ¿Ø’`
@M¤Ð¿Ø<C2BF>
@M—à»0Ð$ â»0¤`œ¦¿Pèà„è$ „èà€è$ €¬ €¬% èÀè$€¬% èÀè$€¬% èÀè$€¬¥ èÀ¿ÿõè$€î»0° ð%á$ò¿d5<¶@9(€¦ÀпØ<C2BF>
¿P@M<>ú»0<C2BB>`¿PÔ`„Ô" „Ô`€Ô" €˜ €˜# Ô@ Ô" ˜# Ô@ Ô" ˜# Ô@ Ô" ˜£ Ô@ ¿ÿõÔ" Ú»0ž Þ#`˜¿ÿRпÜ@M<>!—à#Œ€<C592>˜<>!U D@M9â»@â'»4ä»4€<34>ó'—æ㌀¤à è»4Ô ê»4Ö@Uc(˜<>!@M$À'»(ì»4î ð»4ò ´@¶& ö'¿Hø»4ú €§`€<пHUcL@M6<>л(<28> Ð'»(—Òc´<C2B4> —Ô£Œ€¢ ˜<>!UcP@LüµÐ¿HUcd@M<>Ö»(àÖ'»(—Ø#°€<C2B0> —ÚcŒ€£`˜<>!Uch@Lߘ—Ð#Ü@LèÞ»4Ðà—ÒcÜ@M<>à»(  à'»(#—âc¸<C2B8>%—䣌€¤ ˜<>!Uc|@L¼uæ»4ÐàUc˜@LØ<>)—è#Œ€¥ ˜<>!Ucœ@L¦_+—êcЀ<C390>ì»4РUc´@L½<>/—î㌀¥à˜<>!Uc¼@LD1—ð#¼€<C2BC>€"ò»4ô`˜<CB9C>ö»4øà$;<<3C> €¢ Ô»4Ö $˜
àI€£ I—ÚcŒ€£`˜<>!UcÔ@LfÞ»<Þ'»0à»0€<30>â»0ä`æ»4èà€¥ê»4Ð`ì»0Ò @Lu<>î»0ðà ° ð%à ò»0ôa(ô'»0¿ÿã7—ö㌀¦àø»0€<30>ú»0Ô`л0ÖU˜<>!@L0˜<>!V`@L(Ò»4Ô`˜<CB9C>
€8Ö»4Øà$ !€£À€0#—âcÈ€<C388>ä»4æ¡$€<>
è»4ê °-<® @1(€¥À3—òcŒ€¦`˜<>!V`,@Kþô»4Ѐһ0€<30> ö»0ÒÀø»4ÒÔ Lÿúå¨ú»8ú'»,л,€<>Ò»,Ô`Ö»4Øà€£
Ú»4Ð`Þ»,Òà@Kþ<>à»,â ¢`â$ ä»,æ¡(æ'»,¿ÿã)—è#Œ€¥ ê»,€<>ì»,Ô î»,ÖÀV`<˜<>!@K¹˜<>!V`d@K±ð»,€<>€/ò»0€<30>€+ô»4ö €¦àø»4ú л4Ð <04><1D>" V`t@K¾<>Ò»(`Ò'»(—Ô£”€<E2809D>
Ö»(€<> Ø»4Ô™ÚbL”V`|˜<>!@K€Þ»,€<>à»,â ˜<CB9C>ä»0€<30>æ»,èàPê»0ì`P€¥€ /—îã <C2A0>Qð»0€<30>M3—òcŒ€¦`˜<>!V`˜@KXô»0€<30>1ö»0øàPú»4Ð`P€¢*—ÒcŒ€¢`˜<>!V`´@KBÔ»4Ö $€Šà’—Ø#<23><EFBFBD> Ú»4Ô@™ÞâL”V˜<>!@K-æ!—à#<23><EFBFBD>â»4Ô@%™ä¢L”V˜<>!@K'—æãÌ€<C38C>è»0ê!$€<>ì»0î °1<² À5(€¦@ ö»0ÐÀ’ @ÈÐ'¿ì¸ ø'¿äú»0Ð@Ð'¿ìÒ»0Ô@Ô'¿ì—Ö㜀<C593> €>—Ø#Ä€<C384> Ú»4Ô@—Ò<63> Ö¿ì—Ø#Ø@Û€-пì™ÒbH˜Ô¢0@K <>Þ»4ÔÀ!™à"L”—ÒV<>!Ö¿ì—Ø#Ø@Jðâ»4Ô@%™ä¢L”Ö¿ì'˜æâ0ÀV<>! —Ò—Ø#Ø@JÝ)—è#Ä€<C384>ê»4Ð@@ -—죬€<C2AC>î»4ÒÀпì@Šð»4Òпì@€Mпì™ÒbH˜Ô¢0@JÆ<>€"ò»4Ò@5™ô¢L@V<>!@@J®ö»4ÖÀ9™ø"LÀ—Òc¬€<C2AC> ˜` ˜`(V<>!PÔ¿ì@J™€#ú»4Ò@™Ð"L@V<>!`@JŽÔ¿ì˜Òb0”€ Ö»4ÖÀ™Ø"LÀ —Òc¬€<C2AC> ˜`,˜`4V<>!p@Jv—Úc¬€<C2AC> —ÞãÄ€<C384> à»0Ò $
oma$â»4Ð@@ä»0Ò $
oma$æ»4ÔÀ)™è"L”V<>!ˆ@JUê¿ä€<C3A4>пì@JQ-—죌€¥ ˜<>!Va @J€Ó/—î㌀¥à˜<>!VaÀ@J ð»,€<>€¹ò»,ô`Pö»4øàP€§€²;—úcŒ€§`˜<>!VaÜ@I÷л4Ò $€Š`—Ô£<><EFBFBD>
Ö»4ÔÀ™Ø"L” V˜<>!@I‛—Úc<><EFBFBD> Þ»4ÔÀ!™à"L”Vb˜<>!@IÐ#—âcÄ€<C384>ä»,Ô æ»4ÖÀпð—Ò—Ø#Ø@¸)—è#¨€<C2A8>ê»4Ò¿ð@œ€bпðÒ H˜Ô¢0@Iá<>ì¿ð/˜îâ0ðM€€¦ /€(3—òcœ€<C593>ô»,Ö ö»4ØÀ9™ø"L˜Ò¿ð—Ô£ÔV<>"0—ÚcØ@I¶;—úc¨€<C2A8> л4Ô™ÒbL”€ Ò¿ðV<>"X@I§€,—Ô£œ€<C593>
Ö»,ÖàÒ¿ð˜Ø"0@ Ú»4Ø@™ÞâL˜—Ô£ÔV<>"t—ÚcØ@I<>!—à#¨€<C2A8>Ò¿ð#˜âb0@ä»4Ô€'™æâL”V<>" @I{)—è#Œ€¥ ˜<>!VbÀ@IGê»4ìa(ì'»4¿ü /—î㌀<C592>˜<>!VbàÔ H@I6ð»<ð'»0ò»0€<30>"ô»0ö  <>ø»0Ð Vc@IG<> ;—úcЀ<C390>л0Ð Vc@I7<>—ÒcŒ€¢`˜<>!Vc@IðÔ»8Ô'»,Ö»,€<> Ø»,Ú Þ»0àà€¤ â»0Ð`ä»,Ò @I<>æ»,èá(è'»,¿ÿçê»,€<>-—죠<C2A0> î»,ðàPò»0ô`P€¦€Áö»,øà ¸ ø&à ú»0Ð`Ò»0Ô`˜Ø'¿HÚ»0Þ`€£à€&пHVc(@Hã<> à»(  à'»(#—âc´<C2B4>ŸÐ¿HVc,@HÑ<> ä»(¤ ä'»('—æã°€<C2B0><01>)—è#¸<C2B8>—Ð#Ü@H¦ê»0Ð`—ÒcÜ@HÃ<>xРD@H—ì»0î <08><17> @H”Ð'¿èпèÒ D@H•пèVc0@H“ð»0Ò Ð¿è@HŽò»0ô`$7<¸;€§€®Ð L€<4C>€¨—Òc˜<CB9C> €”—Ô£<><EFBFBD>
 Ô¿è™ÖâL” Vc4˜<>!@HS—Ø#È€<C388> €OÚ»0Þa$€<>€Jà»0â °%<¦ @)(€¤À€B+—êcÌ€<C38C>
ì»0Ѐ’ @ûÐ'¿ìî»0ðÀð'¿ì3—òcÄ€<C384>пìÒ¿è@€"пìÒ H˜Ô¢0@HS<>Ô¿è5™ô¢L”Ò¿ìV<>#L@H;Ò¿ì7˜öâ0@Ô¿è9™ø"L”V<>#`@H-пì@H-€1;—úcÄ€<C384>пè@cпè@пè’!í@ÇÒ¿è™Ð"L@V<>#x@HÒ¿è™Ô¢L@
V<>#ˆ@HÒ¿è™ÖâL@ V<>#˜@GÿØ»0ÒпèÔ LÿöÈ—Úc<><EFBFBD>  Ô¿è™ÞâL”V˜<>!@GÁ€©!—à#Ì€<C38C>â»0äa$€<>æ»0èà°+<¬ /(€¥€ ð»0Ð @lÐ'¿ì² ò'¿äô»0ö€ö'¿ìÀ'¿äø»0úú'¿ìÀ'¿ä—Ð#<23><EFBFBD> Ô¿è™ÒbL”V˜<>!@GŠ—Ô£Ä€<C384>
—Ö㬀<C2AC> пìÒ¿è@cпìÒ¿è@ë€8пìÒ H˜Ô¢0@G¡<>Ö¿è™Ø"LÀ —Òc¬€<C2AC> ˜`8˜`@V<>#ØÔ¿ì@G~Ô¿ì˜Úb0”€ Ö¿è™ÞâLÀ—Òc¬€<C2AC> ˜`D˜`LV<>#è@Ge!—à#¬€<C2AC>#—âcÄ€<C384> ä»0Ò $
oma$пè@æ»0Òà$
oma$Ô¿è)™è"L”V<>#ü@GFê¿ä€<C3A4>пì@GBпè@G?ì»0î¡(î'»0¿ýÞ1—ð#Œ€<C592>˜<>!W`Ô¿ð@Gò»8ò'»,ô»,€<>€yö»,øà <>€mРD@Gú»,Ò`<08> <09> @GÐ'¿èпèÒ D@GпèW`0@FÿÔ»,Ҡпè@Fú—Öã<><EFBFBD>  Ô¿è™Ø"L” W`4˜<>!@FЗÚcÄ€<C384> —Þ㨀<C2A8>пðÒ¿è@¨€3пðÒ H˜Ô¢0@Fí<>à¿ð#˜âb0äL€¤ /'—æ㨀<C2A8> Ô¿è)™è"L”Ò¿ðW<> H@FÉ+—êc¨€<C2A8>Ò¿ð-˜ì¢0@Ô¿è/™îâL”W<> `@F¶Ð¿è@F¶ð»,ò!(ò'»,¿ÿ‡ô»@€<>ö»@ö'»4ø»4ú!(ú'»@л4Ð@F¤Ò»4Ð`@F Ð»4@F<>¿ÿìÔ»<€<>
Ö»<Ö'»0Ø»0Ú!(Ú'»<Þ»0ÐÀ@FŽà»0Ð @FŠÐ»0@F‡¿ÿìâ»8€<38>ä»8ä'»,æ»,èá(è'»8ê»,Ð@@Fxì»,Р@Ftл,@Fq¿ÿìпð@Fl<01>Çà<08>è?ÿÿc<E2809A><63>ã€ð' Dò'  DÐ'¿ð—ÒcŒ€<C592> ˜<>!W`xÔ¿ð@F+˜<>!@FuÀ'¿øÔ¿ø€¢ 
€eпð˜bD”$@FLÐ'¿ü€<C3BC>€YÖ¿ü˜˜"DÀ*À ˜ÚKbD€£`/€2пð’ /@F*Ð'¿ô€<C3B4>Þ¿ôÀ+À˜<>"D@FºÐ¿ð@F
<01><1D> @F Ð'¿ôпôW`ŒÔ¿ð˜âD@F˜<>"D@E÷<01> @E÷Ð'¿ôпô˜bD@E÷˜<>"D@Eè<01> @EèÐ'¿ôпô˜bD@Eèà H  à' H¢$ <>пð@Eðä¿ôä'¿ðæ¿ø¦àæ'¿ø¿ÿ›è H€<48>пð@EÇ<01> @EÇÐ'¿ôпôÒ¿ð@EÈê¿ôê'¿ð-—죌€<C592>˜<>!W`”Ô¿ð@E¢˜<>!@Eìпð°<08>Çà<08>è?ÿÿc<08>ã€ð' D¿tРD@E®€¢?ÿ€\пˆ<”
€¢€ €RРD@EÈÐ'¿pØ¿p€<70> €Hпp@EÃÐ'¿l€<6C>€;пl<C2BF>
W`˜@E•<>€0пl<C2BF>
W`œ@EŒ<>€'пl<C2BF>
@EpºÐ D@El<01><1D> @EkÐ'¿üÚ¿ü€<C3BC> пüÒ D@EhпüW` @EfÒ¿l`
пü@Eaпüÿÿ­Ð¿ü@Ej¿ÿÂпp@E†Ð D@E‰Ð D@E‡<01>Çà<08>è?ÿÿc <63>ã€ð'  D @E€€¢?ÿ ˜Ð"@€¢ РD!ÿ@Ew<01>Çà<08>è?ÿÿc <63>ã€ð' Dò'   H@Eo€¢?ÿРH@EN<01>Çà<08>è?ÿÿc<E2809A><63>ã€ð' Dò' Hô' Lö' Pø' T@E`Ð'¿üпü€¢?ÿW<> ¤@E9€QÒ¿ü€<C3BC> €?Ô D€<44>
РD@E)€¢?ÿW<> ´@E%€,РT! ”!ÿ@E?Ð'¿ôÖ¿ô€¢ÿÿРT@E<01> @D˘<>!@E3пô@E2˜<>!@E+пô@E*Р   P˜ @E&РH@Dù<01> @D®<01> @E Ð'¿øØ¿ü€¢ Ú¿ø€£ÿ¿ÿô<01>Çà<08>è?ÿÿc<18>ã€ð' D¿xРD@Dº€¢?ÿ пŒ<”
€¢€ РD@Dã<01>Çà<08>è?ÿþc<E2809A><63>ã€ð' Dò'  D @DçÐ'¿ôпô€¢?ÿРD@D¾€MРH!!ÿ@DØÐ'¿ðÒ¿ð€¢ÿ
РH@D¯Ð¿ô@DÜ€;»ðпô”$@DØÐ'¿ü€<C3BC>»ðпðÔ¿ü@DÒÐ'¿ø€<C3B8> Ô¿øÖ¿ü–"À
Ö'¿ü€<C3BC> ¿ÿðØ¿ø€£?ÿ¿ÿßÚ¿ü€£ÿРD@D€Þ¿ø€£ÿÿРH@Dwпô@D¤Ð¿ð@D¡<01>Çà<08>è?ÿÿc <63>ã€ð' Dò'   H@DŸ€¢?ÿРD@D`<01>Çà<08>è?ÿÿc˜<63>ã€ð' Dò' H@DuÐ'¿üпü€¢?ÿW<> ¼@DN€1Ò¿ü€<C3BC> РD@DB€¢?ÿW<> Ì@D>˜<> P˜`T˜”  H˜ @D\W<> Ô@D.<01> @Cã<01> @DUÐ'¿øÔ¿ü€¢
Ö¿ø€¢ÿÿ¿ÿô<01>Çà<08>è?ÿÿc <63>ã€ð'  D!ÿ@DO€¢?ÿРD@D <01>Çà<08>è?ÿÿc˜<63>ã€ð' Dò'  H@DBÐ'¿üпü€<C3BC> ˜<>!W`ìÔ H@CµÒ¿üÔ`?ÿРD@D1<01>Çà<08>è<EFBFBD>ã¿ <C2BF>Çà<08>èD)l*ˆÿÿÿÿT,ÿÿÿÿT.¤ÿÿÿÿT0( øÿÿÿÿT3À ÿÿÿÿTÿÿÿÿTÜpÿÿÿÿTÿÿÿÿT;8\XÿÿÿÿTÿÿÿÿT ø!ÜÿÿÿÿT#0ÿÿÿÿTÿÿÿÿT&„ÿÿÿÿTusage: %s [options] [-W <working dir>] [-S <RCS dir>] [subdir ...]
options:
-i[Aaoxm]
clone: A - all the following
a - "*.a" files
o - "*.o" files
x - executables ('x' mode bits set)
m - "Makefile*" files
-v verbose (the more, the verboser)
source files
-L take checked out source over RCS regardless of time
-O don't check out new files, Only create symbolic links to exiting files
(this option is for cloning build trees from controlled source trees)
-R don't create any RCS links
-l symbolicly link files instead of copying them
-m make any missing directories
-q quiet
-d diff new versions of existing files
-c<cmd> use <cmd> to do diffs (default is diffc)
-o<out> write diffs to <out> instead of /tmp/,out??????
-W<dir> use working directory <dir> (default is ".")
-S<dir> use RCS/source directory <dir>
(default is /RCS directories of working tree)
-f follow source-tree links to non-RCS dirs (old behavior)
-X execute instead of generating shell script
-C process SCCS directories if present
-s do not resolve symbolic links for files. use file name
%s: can't get current working directory
%s/%s/RCS/RCSusing sourcedir of "%s"
%s: can't get current working directory
%s/%s//#!/bin/sh
#
# the following makes things more readeable
w='%s' # Working directory
s='%s' # Source directory
rm -rf %s; touch %s
%s/%s%s/%sScanning directory "%s"
>> GetNew("%s", "%s")
/RCS%s/RCS>> RcsDir="%s"
/RCS%s/RCS/RCS%s/RCS>> RCS RcsDir="%s"
%s: creating symlink
rm -f ${w}/%s
ln -s %s ${w}/%s
ln -s ${s}/%s ${w}/%s
r>> soft link RcsDir="%s"
%s: >10 "soft" links
.,v/.../RCS.../>> Pass 1: scanning WorkingDir "%s"
>> keyname="%s", fullname="%s"
.o>> .o -- ignored
.a>> .a -- ignored
>> Makefile* -- ignored
RCS>> RCS -- ignored
SCCS>> SCCS -- ignored
>> executable -- ignored
source: keyname="%s" fullname="%s"
no source file
>> directory
rcs: keyname="%s" fullname="%s"
no rcs file
.snf%s: no source or RCS file
>> source newer than rcs
>> source newer than working
%s: writable -- not updated
%s: newer file
%s ${w}/%s %s >>%s 2>&1
%s ${w}/%s ${s}/%s >>%s 2>&1
rm -f ${w}/%s
%s %s ${w}/%s
rm -f ${w}/%s
%s ${s}/%s ${w}/%s
chmod 0%03o ${w}/%s
>> source older than working
>> rcs newer than source
>> rcs newer than working
%s: writable -- not updated
%s: newer RCS file
(cd %s; %s %s ${w}/%s >>%s 2>&1)
(cd %s; co -q ${w}/%s)
(cd ${s}/%s; %s %s ${w}/%s >>%s 2>&1)
(cd ${s}/%s; co -q ${w}/%s)
>> source older than working
>> Pass 2: scanning SourceDir "%s"
RCSSCCS>> SCCS -- ignored
.o.a/%s: building directory
ln -s %s ${w}/%s
ln -s ${s}/%s ${w}/%s
rm -rf ${w}/%s
mkdir ${w}/%s
chmod 0755 ${w}/%s
%s: missing directory
%s: new file
%s %s ${w}/%s
%s ${s}/%s ${w}/%s
chmod 0%03o ${w}/%s
>> scanning RcsDir "%s"
/%s: new RCS file
(cd %s; co -q ${w}/%s)
(cd %s; co -q ${w}/%s)
ResolveLink %s->%s/%s%s
.../fork() faileddirnamefork() faileddirnamefailed to exec co(1)%s: no such group
00¿ÿó<0¿ÿðH0¿ÿíT0¿ÿê`0¿ÿçl0¿ÿäx0¿ÿá„0¿ÿÞ<03>0¿ÿÛœ0¿ÿب0¿ÿÕ´0¿ÿÒÀ0¿ÿÏÌ0¿ÿÌØ0¿ÿÉä0¿ÿÆð0¿ÿÃü0¿ÿÀ0¿ÿ½0¿ÿº 0¿ÿ·,0¿ÿ´80¿ÿ±D0¿ÿ®P0¿ÿ«\0¿ÿ¨h0¿ÿ¥t0¿ÿ¢€0¿ÿŸŒ0¿ÿœ˜0¿ÿ™¤0¿ÿ°0¿ÿ“¼0¿ÿ<C2BF>È0¿ÿ<C2BF>Ô0¿ÿŠà0¿ÿ‡ì0¿ÿ„ø0¿ÿ<C2BF>0¿ÿ~0¿ÿ{0¿ÿx(0¿ÿu40¿ÿr@0¿ÿoL0¿ÿlX0¿ÿid0¿ÿf@(#) $Revision$_ødiff/tmp/,outXXXXXXMakefile-S:-W:i:OLRXflsCmqvd~c:o:ln -scpln -scpln -scpln -scpcoco-q``  #è hx
/ ]@ Ô ˜| ÿñÔèx h ˜ Ô  
 ] _t `\``X!ÿñ(ÿñ4ÿñA R XL¨DaœjH˜XsN8x|Mø@ Ÿ °K( À_´ Ê Ô_¸ â_<> è_” ð_t ø   _˜  $_  3 ?I4˜GJÌ\O WHðD_ g s { <01>ÿñˆ@Ž^à8"]Ø@^8"¤ ªØ
T¯b0¹_(H"¾]œ`Å@!ÊfXÿñÏèÖDd˜â_d8"è^ÔD"í xôb4ý^¼8"˜@ ]„\"T^ø˜"^t"$]ü\)^\°0\ÿÿñ7]0<>>^È8"F^Px"L^D"Qb4!Yÿñ`]l8"g]Hm^°8"s_8"y^˜8"b8<02>]<,+8^,|Ÿ_4H"¥p¬]ÌD"²b<¹b@¿^ì˜"Æ]´@Í

View file

@ -0,0 +1,179 @@
ELF4q4 (44  Ô\ó\óè T`T`Tˆ/usr/lib/ld.so.1C_7EWT5Z1%[K\N;]LJ S6?Q:X3D2^IA4M8)/HUPCO#V+"&$,*90'->!BF<G=(@YR.Ôèx h Œ È 
O´  _h `P`T@^Ô8" ]Ì@^8" #Ì
T(b 2_H"7]<5D>`>@!CfHÿñH]´èODX˜[_X8"a^ÈD"fxmb$v^°8"|Œ@]x\"‰^€T<12>^ì˜"•^h"<22>]ð\¢^P°©ÿñ°]$<24>·^¼8"¿^Dx"Å]üD"Êb$!ÒÿñÙ]`8"à]<æ^¤8"ì_8"ò^Œ8"øb(]0  +8^ |_(H"p%]ÀD"+b,2b08^à˜"?@F
S^,HY]Häa]„ðh_T"mb4t^ø,"{f4`Pÿñ˜_Lx"¡f8®_@8"´^˜8"»]œ|Ã]T0Ë^t "Ô^8ÌÛôâ`Tÿñë_48"ñ^¬ù]l<"f< ^\ä"__iobopenstrrchrreadlink_finimainSourceLenreadmalloc_iob_endstrcatResolveLinkchownfork_start_environcreatUsagegetcwdfflushdup2readdirfreeperror_etextatexitsymlinkchdirstatenviron_edatamktemp_exitutimeclosermdirWorkingDirCmpexitGetNewfopenwritestrcmplstatoptinderrnofilenostrcpy_lib_versionfgetsfprintfstrlenwaitBufferexeclpoptarg_GLOBAL_OFFSET_TABLE_getgrnamSourceDirCmpmkdirunlinksprintfsetvbufclosedirfcloseprintf_DYNAMICchmodstrncmpgetoptWorkingLen_initopendirlibc.so.1b$& f4Mb,Bb0C]$0]0<]<7]HH]TT]`6]l[]x)]„I]<5D>]œS]¨E]´!]ÀA]Ø@]äW]ð-]ü3^^Z^ >^,G^8V^D2^P.^\^^h,^tU^€*^Œ:^˜R^¤8^°'^¼1^È$^àD^ì+^øL_J_9__(?_4Y_@Q_LO_X#<15>ã¿ <C2BF>Çà<08>è¼ à  D¥, ¤ ¤@'˜ä$â$œ# <><04>@S¸S<>"¤@S´ÿÿë<01>@@S­@S®?ÿÿc <63>ã€ð' D˜<>!Sc´Ô D@S¦<01> @S<><01>Çà<08>è?ÿÿc<E2809A>ã€ð' Dò' HÀ'¿üÀ'¿øÀ'¿ô˜<> ð’ @$@S•—Ð#Ì@S”—Ð"cÌР H—”£ø@S<>º€¢?ÿ€ã€É™Ô¢4Ô'¿ü€Ú™Öâ4Ö'¿ø€Õ™ø"4ÚO€<4F> €P€=—Þ㤞à!—Þ$#¤#—âc¨¢`%—â$£¨'—æã°¦à)—æ%#°+—êc¬ª`-—ê%£¬€5/—î㤮à1—î&#¤€.3—òc¨²`5—ò&£¨€'7—öã°¶à—ö"#°—Ò`—Ò"£¬Ö Àÿÿ‰<01> @S/ÐO€¢ A¿ÿÀ¢ a¿ÿ×€¢ m¿ÿꀢ o¿ÿÚ€¢ x¿ÿß¿ÿë¸ ¿ÿ°€—Úc˜š`—Ú#㘀x!—à#”  #—à$c”€q%—䣜¤ '—ä$㜀j¨ +—è%c¼€e¬ /—ì%ãÄ€`° 3—ð&c¸€[5—ô£ ´ 7—ô&ã €T—Ð<> —Ð"cŒ€M—Ô£„” —Ô"ã„€F—Ø#ˆ˜ —Ø#cˆ€?—Þã<>žà!—Þ$#<23>€8#™âb4%—â$£È€2'™æâ4)—æ%#Ì€,+—À%cÀ€(-—죀¬ /—ì% !ð ÿÿ<01> @Rµ<01><1D>" C€¢ ;¿ÿôS”¢´“2 ²@ ²@ ³.`@
`™*`Ö
€¢À¿ÿç˜
Ð <04>¿ÿØ¿ü€<C3BC>  Ú¿üÞK@€<>à¿üâL€¤`/€A˜<>"4$@Rš¸€¢ ä U`|˜<>!@R<01> @Ryæ¿ü€<C3BC>è¿üêM€<4D>пü@R<08>@R~<01><1B> @R}Ð'¿hпhU`¨”Ö¿ü@Rxì¿hì'¿ü<01>@Rk<01> @RkÐ'¿üпü’@Rlî¿ø€<C3B8>ð¿øòN€<4E>€@пü@RW<01> @RWÐ'¿øÐ¿øÒ¿ü@RXпøU`°@RV¿lпø@RU<>ô¿€7<<3C>(€¢ пø’ @ íÐ'¿øÐ¿ø’ /@RE¸ÔO€<4F>
 <01>U`¸@R><>À/˜<>!U`ÀÔ¿ø@R€0Ö¿øØJÀ€£ /€+˜<>"4$@R¸€¢ Ú @U˜<>!@Q÷<01> @Qîпø@R<08>@Qü<01><1B> @QûÐ'¿hпhUaÖ¿ø@QöÞ¿hÞ'¿øÐ¿øÒ¿ü@Qÿ<>à¿ô  à'¿ôпü@Qá<01> @Qá#˜Ð$b(˜Ð"(Ò¿ü@Qà˜Ð"(Ua@QÝпø@QÎ<01> @QÎ%™Ð$¢8™Ð"8Ò¿ø@QÍ™Ð"8Ua@QʘÐ"(@Qº'™Ð$â<™Ð"8@Q´)˜Ð%" +—êc¸<C2B8>-—ì£<><EFBFBD>
—Ð#Ì@ ÿ—Ð#Ì@ b€%U<>!@Q²U<>!$@Q®U<>!TÒ¿ü@Q©U<>!pÒ¿ø@Q¤/—îã<><EFBFBD>
U<>—Ò—Ô£Ì@Q—U<>!¤@Q“1˜ð",ò D€¦€R5˜ô¢,ö D€¦€€J˜Ð",“* Ô € @Qhпø@Qd<01><1B> @QcÐ'¿h˜Öâ,™*àÚ @ Ua¨Ð¿hÔ¿ø@QZ˜Þâ,¡+àâ @@QMпü@QI<01><1B> @QHÐ'¿d%˜ä¢,§, è Ua°Ð¿dÔ¿ü@Q?пdÒ¿hÔ¿ô@пd@QLпh@QI+˜êb,ª`-˜ê%¢,¿ÿ´Ð¿üÒ¿øÔ¿ô@<01> @Q<01>Çà<08>è?ÿþ<62>ã€ð' Dò' Hô' LÀ'»@À'»<À'»8—Ð#ˆ<CB86>˜<>!Ua¸Ô H@P÷—Òc€€¢`
˜<>!UaÔÔ  H@PêU<>!ì@PõºÐ D@Pñ<01><1D> @PðÐ'¿ðпðUaôÔ D@Pì—Ô£€€<E282AC>
˜<>!UaüÔ¿ð@PË¿Pпð@Pô<>€¦»Dпð”$@Pï<>€žU<>" @PǺРH@PÃ<01><1D> @PÂÐ'¿HпHUbÔ H@P¾U<>"@P´ºÐ H@P°<01><1D> @P¯Ð'¿DпDUb$Ô H@P«Ð¿H @
VÐ'¿H—Ö <E282AC> ˜<>!Ub,Ô¿H@P…¿PпH@P®<>
»DпD”$@P©<>€S—Ø#˜<CB9C> €N—Úc„€<E2809E>  Ô¿ð™Þâ<”Ub@˜<>!@Pb!—à#¸<C2B8> пð@ ¸Ð¿HÒ¿ð@ =€1Ò¿ð#™âb<@U<>"X@PsпHÒ H˜Ô¢ @Py<>ä¿H'˜æâ èL€€¥ /Ô¿ð+™êb<”Ò¿HU<>"h@PZÒ¿H-˜ì¢ @Ô¿ð/™îâ<”U<>"|@PLпð@PLð¿Hð'¿ð²
ò'¿Lô¿L€<4C>€`¿Pпð@P4<>€Rö¿d9<ºÀ(€§@пð’ @ ÌÐ'¿ð€BÒ¿d<
@
 €¢À €9пðUb”@P/Ð'¿ü€<C3BC>€.˜<>"4¿ü@P(˜<>"4@Oú˜šb3À* пð@P˜<>"4@Oð<01> @OðÐ'¿ðпð˜b4@Oð—Þ <E282AC>˜<>!Ub˜Ô¿ð@OÌпü@P à¿L $ à'¿L¿ÿ â¿L€<4C>%—䣄€<E2809E>˜<>!Ub´Ô¿ð@O¬À'»8пð@Oç<> '˜æâ0€¤àпð@O߀¬U<>"Ì@OÜÐ'¿Ü€<C39C>€¤Ð¿Ü@OØÐ'¿Ø€<C398>€šÐ¿Ø<C2BF>
@O—€¢ ¿ÿòпØ<C2BF>
@OŽè¿Ø<C2BF><08> UbÐ@Oœ<>¿ÿâ˜<>"4Ò¿ð@O†˜<>"4UbÔ@OƒÒ¿Ø’`
˜<>"4@O}пØ<C2BF>
¿P@OŠ<>˜<>"4@O˜¿ÿÃê»8€<38> <01>!,@O_ì»,Ð%¡(î»,ðá(ð'»,<01>!,@OUÐ'»8ò»8ò'»,ô»,À&¡(ö»,À&à ˜<>"4@OG<01> @OGø»,Ð'ú»,Ð@˜b4@OEпØ<C2BF>
@O8Ò¿Ø”`
À*ÿþпØ<C2BF>
@O0<01> @O0Ø»,Ð# Ú»,Ð`Ò¿Ø’`
@O.пØ<C2BF>
@O!Þ»,Ð#àà»,¢ ¤¿Pè „è$`„è €è$`€¬ €¬% èè$@¬% èè$@¬% èè$@¬¥ è¿ÿõè$@î»,° ð%à˜ò»,À&a$¿ÿcпÜ@O<À'»@РD@O,<> 5˜ô¢0€¦ Ð D@O$€ÍU<>"Ø@O!Ð'¿Ü€<C39C>€ÅпÜ@OÐ'¿Ø€<C398>€»ö¿ØøNà
€§ . пØ<C2BF>
UbÜ@Nê<>¿ÿë˜<>"4Ò D@NÔ˜<>"4Ubà@NÑÒ¿Ø’`
˜<>"4@NËпØ<C2BF>
¿P@NØ<>Ò¿Ø’`
U<>"ä@NÆ<>˜<>"4@NÝ¿ÿÃú»@€<> <01>!,@N¤Ò»4Ð"a(Ô»4Ö¡(Ö'»4<01>!,@NšÐ'»@Ø»@Ø'»4Ú»4À#a(Þ»4À#à ˜<>"4@NŒ<01> @NŒà»4Ð$â»4Ð@˜b4@NŠÐ¿Ø<C2BF>
@N}<01> @N}ä»4Ð$ æ»4ÐàÒ¿Ø’`
@N{пØ<C2BF>
@Nnè»4Ð% ê»4¬`®¿Pðà„ð% „ðà€ð% €´ €´& ðÀð%€´& ðÀð%€´& ðÀð%€´¦ ðÀ¿ÿõð%€ö»4¸ ø&à˜ú¿d<@€¢@
€$пØ<C2BF>
¿P@NW<>Ö»4˜àœš¿Pà`„à# „à`€à# €¤ €¤$ à@à#¤$ à@à#¤$ à@à#¤¤ à@¿ÿõà#æ»4¨ è$á$ê»4À%a$¿ÿBпÜ@N`À'»<ì L€<4C>€ÍРH@NL<> /˜îâ0€¥àРH@ND€½U<>"è@NAÐ'¿Ü€<C39C>€µÐ¿Ü@N=Ð'¿Ø€<C398>€«ð¿ØòN
€¦`. пØ<C2BF>
Ubì@N
<>¿ÿë˜<>"4Ò H@Mô˜<>"4Ubð@MñÒ¿Ø’`
˜<>"4@MëпØ<C2BF>
¿P@Mé<>˜<>"4@N¿ÿÌô»<€<> <01>!,@MÍö»0Ð&á(ø»0ú!(ú'»0<01>!,@MÃÐ'»<л<Ð'»0Ò»0À"a(Ô»0À"  ˜<>"4@Mµ<01> @MµÖ»0Ð"ÀØ»0Иb4@M³Ð¿Ø<C2BF>
@M¦<01> @M¦Ú»0Ð#`Þ»0ÐàÒ¿Ø’`
@M¤Ð¿Ø<C2BF>
@M—à»0Ð$ â»0¤`œ¦¿Pèà„è$ „èà€è$ €¬ €¬% èÀè$€¬% èÀè$€¬% èÀè$€¬¥ èÀ¿ÿõè$€î»0° ð%á$ò¿d5<¶@9(€¦ÀпØ<C2BF>
¿P@M<>ú»0<C2BB>`¿PÔ`„Ô" „Ô`€Ô" €˜ €˜# Ô@ Ô" ˜# Ô@ Ô" ˜# Ô@ Ô" ˜£ Ô@ ¿ÿõÔ" Ú»0ž Þ#`˜¿ÿRпÜ@M<>!—à#€€<E282AC>˜<>!UbôÔ D@M9â»@â'»4ä»4€<34>ó'—æ ¤à è»4Ô ê»4Ö@Uc˜<>!@M$À'»(ì»4î ð»4ò ´@¶& ö'¿Hø»4ú €§`€<пHUc@@M6<>л(<28> Ð'»(—Òc¨€<C2A8> —Ô£€€¢ ˜<>!UcD@LüµÐ¿HUcX@M<>Ö»(àÖ'»(—Ø#¤€<C2A4> —Úc€€£`˜<>!Uc\@Lߘ—Ð#Ð@LèÞ»4Ðà—ÒcÐ@M<>à»(  à'»(#—âc¬€<C2AC>%—䣀€¤ ˜<>!Ucp@L¼uæ»4ÐàUcŒ@LØ<>)—è#€€¥ ˜<>!Uc<>@L¦_+—êcÄ€<C384>ì»4РUc¨@L½<>/—î ¥à˜<>!Uc°@LD1—ð#°€<C2B0>€"ò»4ô`˜<CB9C>ö»4øà$;<<3C> €¢ Ô»4Ö $˜
àI€£ I—Úc€€£`˜<>!UcÈ@LfÞ»<Þ'»0à»0€<30>â»0ä`æ»4èà€¥ê»4Ð`ì»0Ò @Lu<>î»0ðà ° ð%à ò»0ôa(ô'»0¿ÿã7—ö ¦àø»0€<30>ú»0Ô`л0ÖU˜<>!@L0˜<>!V` @L(Ò»4Ô`˜<CB9C>
€8Ö»4Øà$ !€£À€0#—âc¼€<C2BC>ä»4æ¡$€<>
è»4ê °-<® @1(€¥À3—òc€€¦`˜<>!V` @Kþô»4Ѐһ0€<30> ö»0ÒÀø»4ÒÔ Lÿúå¨ú»8ú'»,л,€<>Ò»,Ô`Ö»4Øà€£
Ú»4Ð`Þ»,Òà@Kþ<>à»,â ¢`â$ ä»,æ¡(æ'»,¿ÿã)—è#€€¥ ê»,€<>ì»,Ô î»,ÖÀV`0˜<>!@K¹˜<>!V`X@K±ð»,€<>€/ò»0€<30>€+ô»4ö €¦àø»4ú л4Ð <04><1D>" V`h@K¾<>Ò»(`Ò'»(—Ô£ˆ<CB86>
Ö»(€<> Ø»4Ô™Úb<”V`p˜<>!@K€Þ»,€<>à»,â ˜<CB9C>ä»0€<30>æ»,èàPê»0ì`P€¥€ /—î㔀<E2809D>Qð»0€<30>M3—òc€€¦`˜<>!V`Œ@KXô»0€<30>1ö»0øàPú»4Ð`P€¢*—Òc€€¢`˜<>!V`¨@KBÔ»4Ö $€Šà’—Ø#„€<E2809E> Ú»4Ô@™Þâ<”V˜<>!@K-æ!—à#„€<E2809E>â»4Ô@%™ä¢<”V˜<>!@K'—æãÀ€<C380>è»0ê!$€<>ì»0î °1<² À5(€¦@ ö»0ÐÀ’ @ÈÐ'¿ì¸ ø'¿äú»0Ð@Ð'¿ìÒ»0Ô@Ô'¿ì—Öã<><EFBFBD> €>—Ø#¸<C2B8> Ú»4Ô@—Ò<63> Ö¿ì—Ø#Ì@Û€-пì™Òb8˜Ô¢ @K <>Þ»4ÔÀ!™à"<”—ÒV<> øÖ¿ì—Ø#Ì@Jðâ»4Ô@%™ä¢<”Ö¿ì'˜æâ ÀV<>!—Ò—Ø#Ì@JÝ)—è#¸<C2B8>ê»4Ð@@ -—죠<C2A0>î»4ÒÀпì@Šð»4Òпì@€Mпì™Òb8˜Ô¢ @JÆ<>€"ò»4Ò@5™ô¢<@V<>!4@J®ö»4ÖÀ9™ø"<À—Òc <C2A0> ˜`˜`V<>!DÔ¿ì@J™€#ú»4Ò@™Ð"<@V<>!T@JŽÔ¿ì˜Òb ”€ Ö»4ÖÀ™Ø"<À —Òc <C2A0> ˜` ˜`(V<>!d@Jv—Úc <C2A0> —Þã¸<C2B8> à»0Ò $
oma$â»4Ð@@ä»0Ò $
oma$æ»4ÔÀ)™è"<”V<>!|@JUê¿ä€<C3A4>пì@JQ-—죀€¥ ˜<>!Va”@J€Ó/—î ¥à˜<>!Va´@J ð»,€<>€¹ò»,ô`Pö»4øàP€§€²;—úc€€§`˜<>!VaÐ@I÷л4Ò $€Š`—Ô£„€<E2809E>
Ö»4ÔÀ™Ø"<” V˜<>!@I‛—Úc„€<E2809E> Þ»4ÔÀ!™à"<”Vb˜<>!@IÐ#—âc¸<C2B8>ä»,Ô æ»4ÖÀпð—Ò—Ø#Ì@¸)—è#œ€<C593>ê»4Ò¿ð@œ€bпðÒ H˜Ô¢ @Iá<>ì¿ð/˜îâ ðM€€¦ /€(3—òc<><EFBFBD>ô»,Ö ö»4ØÀ9™ø"<˜Ò¿ð—Ô£ÈV<>"$—ÚcÌ@I¶;—úcœ€<C593> л4Ô™Òb<”€ Ò¿ðV<>"L@I§€,—Ô£<><EFBFBD>
Ö»,ÖàÒ¿ð˜Ø" @ Ú»4Ø@™Þâ<˜—Ô£ÈV<>"h—ÚcÌ@I<>!—à#œ€<C593>Ò¿ð#˜âb @ä»4Ô€'™æâ<”V<>"”@I{)—è#€€¥ ˜<>!Vb´@IGê»4ìa(ì'»4¿ü /—î <E282AC>˜<>!VbÔÔ H@I6ð»<ð'»0ò»0€<30>"ô»0ö  <>ø»0Ð Vbø@IG<> ;—úcÄ€<C384>л0Ð Vbü@I7<>—Òc€€¢`˜<>!Vc@IðÔ»8Ô'»,Ö»,€<> Ø»,Ú Þ»0àà€¤ â»0Ð`ä»,Ò @I<>æ»,èá(è'»,¿ÿçê»,€<>-—죔€<E2809D> î»,ðàPò»0ô`P€¦€Áö»,øà ¸ ø&à ú»0Ð`Ò»0Ô`˜Ø'¿HÚ»0Þ`€£à€&пHVc@Hã<> à»(  à'»(#—âc¨€<C2A8>ŸÐ¿HVc @HÑ<> ä»(¤ ä'»('—æ㤀<C2A4><01>)—è#¬€<C2AC>—Ð#Ð@H¦ê»0Ð`—ÒcÐ@HÃ<>xРD@H—ì»0î <08><17> @H”Ð'¿èпèÒ D@H•пèVc$@H“ð»0Ò Ð¿è@HŽò»0ô`$7<¸;€§€®Ð L€<4C>€¨—ÒcŒ€<C592> €”—Ô£„€<E2809E>
 Ô¿è™Öâ<” Vc(˜<>!@HS—Ø#¼€<C2BC> €OÚ»0Þa$€<>€Jà»0â °%<¦ @)(€¤À€B+—êcÀ€<C380>
ì»0Ѐ’ @ûÐ'¿ìî»0ðÀð'¿ì3—òc¸<C2B8>пìÒ¿è@€"пìÒ H˜Ô¢ @HS<>Ô¿è5™ô¢<”Ò¿ìV<>#@@H;Ò¿ì7˜öâ @Ô¿è9™ø"<”V<>#T@H-пì@H-€1;—úc¸<C2B8>пè@cпè@пè’!í@ÇÒ¿è™Ð"<@V<>#l@HÒ¿è™Ô¢<@
V<>#|@HÒ¿è™Öâ<@ V<>#Œ@GÿØ»0ÒпèÔ LÿöÈ—Úc„€<E2809E>  Ô¿è™Þâ<”V˜<>!@GÁ€©!—à#À€<C380>â»0äa$€<>æ»0èà°+<¬ /(€¥€ ð»0Ð @lÐ'¿ì² ò'¿äô»0ö€ö'¿ìÀ'¿äø»0úú'¿ìÀ'¿ä—Ð#„€<E2809E> Ô¿è™Òb<”V˜<>!@GŠ—Ô£¸<C2B8>
—Öã <C2A0> пìÒ¿è@cпìÒ¿è@ë€8пìÒ H˜Ô¢ @G¡<>Ö¿è™Ø"<À —Òc <C2A0> ˜`,˜`4V<>#ÌÔ¿ì@G~Ô¿ì˜Úb ”€ Ö¿è™Þâ<À—Òc <C2A0> ˜`8˜`@V<>#Ü@Ge!—à# <C2A0>#—âc¸<C2B8> ä»0Ò $
oma$пè@æ»0Òà$
oma$Ô¿è)™è"<”V<>#ð@GFê¿ä€<C3A4>пì@GBпè@G?ì»0î¡(î'»0¿ýÞ1—ð#€€<E282AC>˜<>!W`Ô¿ð@Gò»8ò'»,ô»,€<>€yö»,øà <>€mРD@Gú»,Ò`<08> <09> @GÐ'¿èпèÒ D@GпèW`$@FÿÔ»,Ҡпè@Fú—Öã„€<E2809E>  Ô¿è™Ø"<” W`(˜<>!@FЗÚc¸<C2B8> —Þ㜀<C593>пðÒ¿è@¨€3пðÒ H˜Ô¢ @Fí<>à¿ð#˜âb äL€¤ /'—æ㜀<C593> Ô¿è)™è"<”Ò¿ðW<> <@FÉ+—êcœ€<C593>Ò¿ð-˜ì¢ @Ô¿è/™îâ<”W<> T@F¶Ð¿è@F¶ð»,ò!(ò'»,¿ÿ‡ô»@€<>ö»@ö'»4ø»4ú!(ú'»@л4Ð@F¤Ò»4Ð`@F Ð»4@F<>¿ÿìÔ»<€<>
Ö»<Ö'»0Ø»0Ú!(Ú'»<Þ»0ÐÀ@FŽà»0Ð @FŠÐ»0@F‡¿ÿìâ»8€<38>ä»8ä'»,æ»,èá(è'»8ê»,Ð@@Fxì»,Р@Ftл,@Fq¿ÿìпð@Fl<01>Çà<08>è?ÿÿc<E2809A><63>ã€ð' Dò'  DÐ'¿ð—Òc€€<E282AC> ˜<>!W`lÔ¿ð@F+˜<>!@FuÀ'¿øÔ¿ø€¢ 
€eпð˜b4”$@FLÐ'¿ü€<C3BC>€YÖ¿ü˜˜"4À*À ˜ÚKb4€£`/€2пð’ /@F*Ð'¿ô€<C3B4>Þ¿ôÀ+À˜<>"4@FºÐ¿ð@F
<01><1D> @F Ð'¿ôпôW`€Ô¿ð˜â4@F˜<>"4@E÷<01> @E÷Ð'¿ôпô˜b4@E÷˜<>"4@Eè<01> @EèÐ'¿ôпô˜b4@Eèà H  à' H¢$ <>пð@Eðä¿ôä'¿ðæ¿ø¦àæ'¿ø¿ÿ›è H€<48>пð@EÇ<01> @EÇÐ'¿ôпôÒ¿ð@EÈê¿ôê'¿ð-—죀€<E282AC>˜<>!W`ˆÔ¿ð@E¢˜<>!@Eìпð°<08>Çà<08>è?ÿÿc<08>ã€ð' D¿tРD@E®€¢?ÿ€\пˆ<”
€¢€ €RРD@EÈÐ'¿pØ¿p€<70> €Hпp@EÃÐ'¿l€<6C>€;пl<C2BF>
W`Œ@E•<>€0пl<C2BF>
W`<60>@EŒ<>€'пl<C2BF>
@EpºÐ D@El<01><1D> @EkÐ'¿üÚ¿ü€<C3BC> пüÒ D@EhпüW`”@EfÒ¿l`
пü@Eaпüÿÿ­Ð¿ü@Ej¿ÿÂпp@E†Ð D@E‰Ð D@E‡<01>Çà<08>è?ÿÿc <63>ã€ð'  D @E€€¢?ÿ ˜Ð"0€¢ РD!ÿ@Ew<01>Çà<08>è?ÿÿc <63>ã€ð' Dò'   H@Eo€¢?ÿРH@EN<01>Çà<08>è?ÿÿc<E2809A><63>ã€ð' Dò' Hô' Lö' Pø' T@E`Ð'¿üпü€¢?ÿW<> ˜@E9€QÒ¿ü€<C3BC> €?Ô D€<44>
РD@E)€¢?ÿW<> ¨@E%€,РT! ”!ÿ@E?Ð'¿ôÖ¿ô€¢ÿÿРT@E<01> @D˘<> ð@E3пô@E2˜<>!@E+пô@E*Р   P˜ @E&РH@Dù<01> @D®<01> @E Ð'¿øØ¿ü€¢ Ú¿ø€£ÿ¿ÿô<01>Çà<08>è?ÿÿc<18>ã€ð' D¿xРD@Dº€¢?ÿ пŒ<”
€¢€ РD@Dã<01>Çà<08>è?ÿþc<E2809A><63>ã€ð' Dò'  D @DçÐ'¿ôпô€¢?ÿРD@D¾€MРH!!ÿ@DØÐ'¿ðÒ¿ð€¢ÿ
РH@D¯Ð¿ô@DÜ€;»ðпô”$@DØÐ'¿ü€<C3BC>»ðпðÔ¿ü@DÒÐ'¿ø€<C3B8> Ô¿øÖ¿ü–"À
Ö'¿ü€<C3BC> ¿ÿðØ¿ø€£?ÿ¿ÿßÚ¿ü€£ÿРD@D€Þ¿ø€£ÿÿРH@Dwпô@D¤Ð¿ð@D¡<01>Çà<08>è?ÿÿc <63>ã€ð' Dò'   H@DŸ€¢?ÿРD@D`<01>Çà<08>è?ÿÿc˜<63>ã€ð' Dò' H@DuÐ'¿üпü€¢?ÿW<> °@DN€1Ò¿ü€<C3BC> РD@DB€¢?ÿW<> À@D>˜<> D˜`H˜”  H˜ @D\W<> È@D.<01> @Cã<01> @DUÐ'¿øÔ¿ü€¢
Ö¿ø€¢ÿÿ¿ÿô<01>Çà<08>è?ÿÿc <63>ã€ð'  D!ÿ@DO€¢?ÿРD@D <01>Çà<08>è?ÿÿc˜<63>ã€ð' Dò'  H@DBÐ'¿üпü€<C3BC> ˜<>!W`àÔ H@CµÒ¿üÔ`?ÿРD@D1<01>Çà<08>è<EFBFBD>ã¿ <C2BF>Çà<08>è8)`*|ÿÿÿÿH,ÿÿÿÿH.˜ÿÿÿÿH0 ìÿÿÿÿH3´ ÿÿÿÿHÿÿÿÿHÐdÿÿÿÿHÿÿÿÿH;,PLÿÿÿÿHÿÿÿÿH ì!ÐÿÿÿÿH#$ÿÿÿÿHÿÿÿÿH&xÿÿÿÿHusage: %s [options] [-W <working dir>] [-S <RCS dir>] [subdir ...]
options:
-i[Aaoxm]
clone: A - all the following
a - "*.a" files
o - "*.o" files
x - executables ('x' mode bits set)
m - "Makefile*" files
-v verbose (the more, the verboser)
source files
-L take checked out source over RCS regardless of time
-O don't check out new files, Only create symbolic links to exiting files
(this option is for cloning build trees from controlled source trees)
-R don't create any RCS links
-l symbolicly link files instead of copying them
-m make any missing directories
-q quiet
-d diff new versions of existing files
-c<cmd> use <cmd> to do diffs (default is diffc)
-o<out> write diffs to <out> instead of /tmp/,out??????
-W<dir> use working directory <dir> (default is ".")
-S<dir> use RCS/source directory <dir>
(default is /RCS directories of working tree)
-f follow source-tree links to non-RCS dirs (old behavior)
-X execute instead of generating shell script
-C process SCCS directories if present
-s do not resolve symbolic links for files. use file name
%s: can't get current working directory
%s/%s/RCS/RCSusing sourcedir of "%s"
%s: can't get current working directory
%s/%s//#!/bin/sh
#
# the following makes things more readeable
w='%s' # Working directory
s='%s' # Source directory
rm -rf %s; touch %s
%s/%s%s/%sScanning directory "%s"
>> GetNew("%s", "%s")
/RCS%s/RCS>> RcsDir="%s"
/RCS%s/RCS/RCS%s/RCS>> RCS RcsDir="%s"
%s: creating symlink
rm -f ${w}/%s
ln -s %s ${w}/%s
ln -s ${s}/%s ${w}/%s
r>> soft link RcsDir="%s"
%s: >10 "soft" links
.,v/.../RCS.../>> Pass 1: scanning WorkingDir "%s"
>> keyname="%s", fullname="%s"
.o>> .o -- ignored
.a>> .a -- ignored
>> Makefile* -- ignored
RCS>> RCS -- ignored
SCCS>> SCCS -- ignored
>> executable -- ignored
source: keyname="%s" fullname="%s"
no source file
>> directory
rcs: keyname="%s" fullname="%s"
no rcs file
.snf%s: no source or RCS file
>> source newer than rcs
>> source newer than working
%s: writable -- not updated
%s: newer file
%s ${w}/%s %s >>%s 2>&1
%s ${w}/%s ${s}/%s >>%s 2>&1
rm -f ${w}/%s
%s %s ${w}/%s
rm -f ${w}/%s
%s ${s}/%s ${w}/%s
chmod 0%03o ${w}/%s
>> source older than working
>> rcs newer than source
>> rcs newer than working
%s: writable -- not updated
%s: newer RCS file
(cd %s; %s %s ${w}/%s >>%s 2>&1)
(cd %s; co -q ${w}/%s)
(cd ${s}/%s; %s %s ${w}/%s >>%s 2>&1)
(cd ${s}/%s; co -q ${w}/%s)
>> source older than working
>> Pass 2: scanning SourceDir "%s"
RCSSCCS>> SCCS -- ignored
.o.a/%s: building directory
ln -s %s ${w}/%s
ln -s ${s}/%s ${w}/%s
rm -rf ${w}/%s
mkdir ${w}/%s
chmod 0755 ${w}/%s
%s: missing directory
%s: new file
%s %s ${w}/%s
%s ${s}/%s ${w}/%s
chmod 0%03o ${w}/%s
>> scanning RcsDir "%s"
/%s: new RCS file
(cd %s; co -q ${w}/%s)
(cd %s; co -q ${w}/%s)
ResolveLink %s->%s/%s%s
.../fork() faileddirnamefork() faileddirnamefailed to exec co(1)%s: no such group
00¿ÿó<0¿ÿðH0¿ÿíT0¿ÿê`0¿ÿçl0¿ÿäx0¿ÿá„0¿ÿÞ<03>0¿ÿÛœ0¿ÿب0¿ÿÕ´0¿ÿÒÀ0¿ÿÏÌ0¿ÿÌØ0¿ÿÉä0¿ÿÆð0¿ÿÃü0¿ÿÀ0¿ÿ½0¿ÿº 0¿ÿ·,0¿ÿ´80¿ÿ±D0¿ÿ®P0¿ÿ«\0¿ÿ¨h0¿ÿ¥t0¿ÿ¢€0¿ÿŸŒ0¿ÿœ˜0¿ÿ™¤0¿ÿ°0¿ÿ“¼0¿ÿ<C2BF>È0¿ÿ<C2BF>Ô0¿ÿŠà0¿ÿ‡ì0¿ÿ„ø0¿ÿ<C2BF>0¿ÿ~0¿ÿ{0¿ÿx(0¿ÿu40¿ÿr@0¿ÿoL0¿ÿlX0¿ÿid0¿ÿf@(#) $Revision$_ìdiff/tmp/,outXXXXXXMakefile-S:-W:i:OLRXflsCmqvd~c:o:ln -scpln -scpln -scpln -scpcoco-q`T  è hx
# @ È Œ| ÿñÔèx h Œ È 
O´  _h `P`TL'ÿñ.ÿñ:ÿñG X_´ ^LœDgœpHŒXyN,xMì@ _  ¥K¼ Æ Ð_¸ Ú è_„ î_ˆ ö_h þ_˜     *_” 9 EI(˜MJÀ\U ]HäDe_<> m y <01>_€ ÿñŽ@^Ô8"]Ì@¡^8"ª °Ì
Tµb ¿_H"Ä]<5D>`Ë@!ÐfHÿñÕ]´èÜDX˜è_X8"î^ÈD"óxúb$^°8" Œ@]x\"^€T^ì˜""^h"*]ð\/^P°6ÿñ=]$<24>D^¼8"L^Dx"R]üD"Wb$!_ÿñf]`8"m]<s^¤8"y_8"^Œ8"b(]0˜ +8Ÿ^ |¥_(H"«p²]ÀD"¸b,¿b0Å^à˜"Ì@Ó

Binary file not shown.

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,140 @@
#! /bin/sh
# This shell script runs findnewrcs on a clone tree.
# Usage
DoUsage()
{
cat << dernier
Usage: fnrclone [-OPTIONS] <source> <destination>
where OPTIONS are:
[-c (checkout any new versions of files from RCS)]
[-s (create a script & log file in $HOME/fnrclone and
execute the script)]
[-n (leave actual files, not symbolic links)]
[-f <logfile name> (create a log file of changes)]
[-d (descend symbolically linked directories)]
[-S (do not follow symbolic links for files)
[-O (do not check out files, Only create symbolic links for existing files)
[-C (process SCCS directories[usually they are ignored])
[-u Usage message]
NOTE: the default is make symbolic links and don't check out newer
revisions of files, just shadow the source. If the RCS directory is
accessible, check out any brand new files as real files. If the
RCS directory is not accessible (remote exchange), do NOT check out
any brand new files.
dernier
}
if [ $# -lt 2 ] ; then
DoUsage
exit 1
fi
DEF_s="L"
DEF_X="X"
LINKOPT="l"
ACTUAL=
#Parse the options
set -- `getopt csSCOdnuf: $*`
while [ $# -gt 0 ]
do
case $1 in
-n) LINKOPT= ;shift;;
-s) DEF_X=;shift;;
-S) DEF_S=s;shift;;
-c) DEF_s=;shift;;
-C) DEF_C=C;shift;;
-O) DEF_O=O;shift;;
-u) DoUsage;shift;;
-f) LOG=$2;shift 2;;
-d) ACTUAL="${ACTUAL}f";shift;;
--) shift;;
-*) DoUsage;shift;;
*) SRC=$1;DEST=$2;shift 2;;
esac
done
OPTS="${DEF_X}${DEF_s}${DEF_S}${DEF_C}${DEF_O}${ACTUAL}${LINKOPT}miA"
#
# get the system from uname -s
#
SYSTEM=`uname -s`
RELEASE=`uname -r`
MACHINE=`uname -m`
Findnewrcs="findnewrcs.${SYSTEM}"
if [ "$SYSTEM" = "HP-UX" ];then
# 700's
M700=`echo $MACHINE | fgrep '/7' 2>/dev/null`
M800=`echo $MACHINE | fgrep '/8' 2>/dev/null`
R100=`echo $RELEASE | fgrep '10.' 2>/dev/null`
R90=`echo $RELEASE | fgrep '9.' 2>/dev/null`
R80=`echo $RELEASE | fgrep '8.' 2>/dev/null`
R70=`echo $RELEASE | fgrep '7.' 2>/dev/null`
if [ "$M700" ]; then
if [ "$R100" ];then
Findnewrcs="findnewrcs.700.100"
elif [ "$R80" ];then
Findnewrcs="findnewrcs.700.807"
fi
elif [ "$M800" ]; then
if [ "$R100" ];then
Findnewrcs="findnewrcs.800.100"
elif [ "$R90" ];then
Findnewrcs="findnewrcs.800.90"
elif [ "$R80" ];then
Findnewrcs="findnewrcs.800.80"
else
Findnewrcs="findnewrcs.800.70"
fi
else
if [ "$R90" ];then
Findnewrcs="findnewrcs.300.90"
elif [ "$R80" ];then
Findnewrcs="findnewrcs.300.80"
fi
fi
fi
if [ "$SYSTEM" = "SunOS" ];then
if [ "$MACHINE" = "i86pc" ];then
Findnewrcs="findnewrcs.UNIX_SV"
elif [ "$MACHINE" = "prep" ];then
Findnewrcs="findnewrcs.SunOS_PPC"
else
Findnewrcs="findnewrcs.SunOS"
fi
fi
#
# make an old style script
#
FNR_BINDIR=`dirname $0`
if [ ! "$DEF_X" ];then
DATE=`date +%H%M%S`
FNR_DIR=/$HOME/fnrclone
[ ! -d $FNR_DIR ] && mkdir $FNR_DIR
FNR_SCRIPT=$FNR_DIR/script$DATE
FNR_LOG=$FNR_DIR/log$DATE
$FNR_BINDIR/$Findnewrcs -S${SRC} -W${DEST} -${OPTS} > $FNR_SCRIPT 2> $FNR_LOG
chmod 777 $FNR_SCRIPT
chmod 777 $FNR_LOG
$FNR_SCRIPT
echo "`basename $0`: script is in $FNR_SCRIPT, logfile is $FNR_LOG"
if [ "$LOG" ];then
cat $FNR_LOG > $LOG
echo "logfile is also in $LOG"
fi
else # execute without a script
if [ "$LOG" ];then
$FNR_BINDIR/$Findnewrcs -S${SRC} -W${DEST} -${OPTS} 2> $LOG
else
$FNR_BINDIR/$Findnewrcs -S${SRC} -W${DEST} -${OPTS}
fi
fi

View file

@ -0,0 +1,58 @@
#! /usr/local/bin/perl
eval "exec /usr/local/bin/perl -S $0 $*"
if $running_under_some_shell;
$system = `uname -s`;
$release = `uname -r`;
$machine = `uname -m`;
if ($system =~ m%SunOS%) {
if ($machine =~ m%prep%) {
$system = "SunOS_PPC";
}
}
push(@targets,"findnewrcs.${system}");
#
# for hp need subsystems
#
if ($system =~ m%HP-UX%) {
# if it's not 700 9.0, don't do HP-UX
if ($machine =~ m%.*/7%) {
if ($release =~ m%9\.%) {
push(@targets,"findnewrcs.700.90");
push(@targets,"findnewrcs.800.90");
}
elsif ($release =~ m%8\.%) {
@targets = ("findnewrcs.700.807");
}
elsif ($release =~ m%10\.%) {
@targets = ("findnewrcs.700.100");
}
}
elsif ($machine =~ m%.*/8%) {
if ($release =~ m%9\.%) {
@targets = ("findnewrcs.800.90");
}
elsif ($release =~ m%8\.%) {
@targets = ("findnewrcs.800.80");
}
elsif ($release =~ m%7\.%) {
@targets = ("findnewrcs.800.70");
}
}
elsif ($machine =~ m%.*/[34]%) {
if ($release =~ m%9\.%) {
@targets = ("findnewrcs.300.90");
}
elsif ($release =~ m%8\.%) {
@targets = ("findnewrcs.300.80");
}
}
}
foreach $target (@targets) {
system ("make load${target}");
}

View file

@ -0,0 +1,144 @@
#! /usr/local/bin/perl
eval "exec /usr/local/bin/perl -S $0 $*"
if $running_under_some_shell;
################################################################################
#
# File: ListTheTree <source tree>
# RCS: $XConsortium: ListTheTree /main/3 1995/10/30 13:43:24 rswiston $
# Author: Jim Andreas Hewlett-Packard, OSSD-CV
# Created: 1/15/92
# Modified by: Marc Ayotte Hewlett-Packard, OSSD-CV (perlizer)
# Language: N/A
# Package: N/A
# Status: CDE distributed
#
# (c) Copyright 1993, Hewlett-Packard Company, all rights reserved.
#
# Description: This file does 2 things:
# 1) List the source tree's structure.
# This structure is placed into the source tree's
# directory as :TreeListing.
# 2) Creates a listing of all of the files locked in the
# source tree and places it in :TreeListing.locks.
################################################################################
if ($ARGV[0]) {
$TREE = $ARGV[0];
#
# if not / relative get pwd path
#
if ($TREE !~ m%^\/%) {
print STDERR " Must be a / related path e.g -> /foo. Sorry!\n";
exit 1;
}
}
else {
die " USAGE ListTheTree <source directory>\n";
}
# put /usr/local/bin in the path for Rcslocks
$ENV{'PATH'} = "/x/cdesrc/admin/bin:/usr/local/bin:$ENV{'PATH'}";
if (! chdir("$TREE")) {
die " ERROR -> Couldn't change directory to $TREE.\n";
}
######################
# get the tree listing
######################
system ("find . -print > :TreeListing.new");
unlink(":TreeListing");
if (! rename(":TreeListing.new",":TreeListing")) {
print " WARNING -> couldn't mv :TreeListing.new to :TreeListing.\n";
}
###################################
# find the locked files in the tree
###################################
unlink(":TreeListing.locks.new");
open(NLOCK,">>$TREE/:TreeListing.locks.new");
print NLOCK "List of locked files in $TREE\n\n";
@dirs=(`find . -type d -print`);
foreach $dir (@dirs) {
undef(@rcsLocks);
chop($dir);
if (chdir("$dir")) {
@rcsLocks = (`Rcslocks -v`);
# only list directory if there are locks
if (@rcsLocks) {
print NLOCK "$dir\n";
while (@rcsLocks) {
$lock = shift(@rcsLocks);
print NLOCK " $lock";
}
print NLOCK "\n";
}
}
else {
print " WARNING -> could not cd to ${TREE}/${dir}\n";
print " $!\n";
}
chdir("$TREE");
}
unlink("$TREE/:TreeListing.locks");
rename("$TREE/:TreeListing.locks.new","$TREE/:TreeListing.locks");
#
# get changes from last listing
# check file $TREE/changestamp
#
$cstamp = "${TREE}/changestamp";
if ( -f "${TREE}/changestamp" ) {
$laststamp = `cat $cstamp`;
chop $laststamp;
}
else {
$date = `date +%y%m%d`;
chop $date;
$laststamp = "${date}0001";
$dip = `echo "$laststamp" >$cstamp`;
$date = `date +%m%d0001`;
chop $date;
system "touch $date $cstamp";
}
$curstamp = `date +%y%m%d%H%M`;
chop $curstamp;
unlink("$TREE/:TreeListing.changes.new");
open(NCHANGE,">>$TREE/:TreeListing.changes.new");
print NCHANGE "List of changed files in $TREE\n\n";
@allfiles=(`find . -follow -name "*,v" -newer $cstamp -print`);
foreach $file (@allfiles) {
chop $file;
if (open($RCSFILE,"$file")) {
NEXTLINE:
while ($line = <$RCSFILE>) {
chop $line;
if ($line !~ m%^date%) {
next NEXTLINE;
}
else {
$lastdate = $line;
$author = $line;
$lastdate =~ s%^.* (\d+\.\d+\.\d+\.\d+\.\d+).*$%\1%;
$lastdate =~ s%\.%%g;
if ($lastdate > $laststamp) {
$author =~ s%^.*author (.*); .*;$%\1%;
print NCHANGE "$file <-> $author\n";
}
}
}
close($RCSFILE);
}
}
$dip = `echo "$curstamp" >$cstamp`;
unlink("$TREE/:TreeListing.changes");
rename("$TREE/:TreeListing.changes.new","$TREE/:TreeListing.changes");

View file

@ -0,0 +1,54 @@
#!/bin/ksh
TMPFILE=/tmp/xxIIee$$
TMPFILE300=${TMPFILE}300
TMPFILE700=${TMPFILE}700
TMPFILEOTHER=${TMPFILE}OTHER
TMPFILEEMPTY=${TMPFILE}EMPTY
if (( $# < 1 ))
then
PWDIR=`/bin/pwd`
DATEDIR=`basename $PWDIR`
DIR=/x/logs/build/$DATEDIR
else
DIR=/x/logs/build/$1
fi
echo >$TMPFILEEMPTY
echo >>$TMPFILEEMPTY
echo >>$TMPFILEEMPTY
echo "300 Build Machines in $DIR" > $TMPFILE300
echo >> $TMPFILE300
echo "700 Build Machines in $DIR" > $TMPFILE700
echo >> $TMPFILE700
echo "Other Build Machines in $DIR" > $TMPFILEOTHER
echo >> $TMPFILEOTHER
find $DIR -name summar\* -exec grep master_build {} \; > $TMPFILE
grep 300 $TMPFILE | sort -k 6,6 >> $TMPFILE300
grep 700 $TMPFILE | sort -k 6,6 >> $TMPFILE700
grep -v 300 $TMPFILE | grep -v 700 | sort -k 6,6 >> $TMPFILEOTHER
cat $TMPFILE700 $TMPFILEEMPTY $TMPFILEOTHER $TMPFILEEMPTY $TMPFILE300
rm $TMPFILE
rm $TMPFILE300
rm $TMPFILE700
rm $TMPFILEOTHER
rm $TMPFILEEMPTY

View file

@ -0,0 +1,121 @@
#! /usr/local/bin/perl
eval "exec /usr/local/bin/perl -S $0 $*"
if $running_under_some_shell;
################################################################################
#
# File: cleanLinks <source tree>
# RCS: $XConsortium: cleanLinks /main/3 1995/10/30 13:43:35 rswiston $
# Author: Marc Ayotte Hewlett-Packard, OSSD-CV
# Created: Sun Jul 4 17:57:13 PDT 1993
# Language: perl
# Package: N/A
# Status: CDE distributed
#
# (c) Copyright 1993, Hewlett-Packard Company, all rights reserved.
#
# Usage: cleanLinks <directory>
#
# Description: This script removes symbolic links to nowhere in
# <directory>. It does not remove anything with RCS
# in its path.
#
################################################################################
if ($ARGV[0]) {
$TREE = $ARGV[0];
}
else {
die " USAGE CleanLinks <source directory>\n";
}
if (! chdir("$TREE")) {
die " ERROR -> Couldn't change directory to $TREE.\n";
}
#######################################################
# define local subroutines
#######################################################
sub dokill {
die "\n left on INTR \n";
exit 1;
}
########################################################
# Catch signals
########################################################
$SIG{'INT'} = 'dokill';
##############################
# get the symlinks in the tree
##############################
if (! open(FIND,"find . -type d ! -type l -print|")) {
print STDERR " ERROR failure in open used for find.\n";
die "You may have to contact your build administrator\n";
}
#
# don't buffer find output
#
$| = 1;
print "************ List of symlinks to nowhere removed **********\n";
##################################################################
# go through the directories and examine each symlink.
# resolve the symlink and, if the file at the end doesn't exist,
# remove the original symlink. Don't do anything that ends in RCS.
##################################################################
FILE:
while ($new = <FIND>) {
chop $new;
if (! opendir(THISDIR,"$new")) {
print STDERR " WARNING -> could not process directory $new\n";
next FILE;
}
else {
if (! chdir("$new")) {
print STDERR " WARNING -> could not change directory to $new\n";
next FILE;
}
}
# remove . from $new path for cuteness of output
$new =~ s%^\.%%;
@allfiles = grep(!/^\.\.?$/, readdir(THISDIR));
foreach $file (@allfiles) {
if (( -l $file) && ($file !~ m%RCS$%) && (! -d $file)) {
#
# resolve the link
#
$tmp1file = $file;
$counter = 0;
while (defined($tmp2file = readlink($tmp1file))) {
$tmp1file = $tmp2file;
#
# watch for cyclic symlinks
#
if ($counter++ == 10) {
last;
}
}
#
# if last piece in resolved chain is not a file
# it is a symlink to nowhere -> remove
#
if ( ! -e $tmp1file) { # remove link to nowhere
if (unlink("$file")) {
print "removing ${TREE}${new}/${file}\n";
}
else {
print STDERR " WARNING -> ${TREE}${new}/${file} -> could not remove\n";
print "$!\n";
}
}
}
}
closedir(THISDIR);
if (! chdir("$TREE")) {
die " ERROR -> Couldn't change directory to $TREE.\n";
}
}

View file

@ -0,0 +1,28 @@
#! /bin/ksh
# This script trims the number of files in the main build log directory
# It can also be used to trim other log files
# marca 2/7/90
USAGE="cleanLogs [logdir] [number of logs left]"
# defaults
LOGSLEFT=14
LOGDIR=/x/logs/build
[ $# -gt 1 ] && LOGSLEFT=$2
[ $# -gt 0 ] && LOGDIR=$1
#clean up the log files because dere be too many
echo ""
echo "***************************************"
echo "START Trimming log files"
cd $LOGDIR
LOGS=`ls -rt`
set -- $LOGS
while [ $# -gt $LOGSLEFT ]
do
#eliminate last log file
echo "Trying to delete $1"
rm -rf $1 || echo "could not delete $1"
shift
done

View file

@ -0,0 +1,23 @@
#! /bin/sh
# This script cleans the fnrclone, etc directories.
for DIRS in `echo "fnrclone fnrnolink fnrnoRCS"`
do
CURRENT=$HOME/$DIRS
if [ -d $CURRENT ];then
echo ""
echo "In $CURRENT"
cd $CURRENT
LOGS=`ls -rt`
set -- $LOGS
#check to see if you have at least 10 log and script files
while [ $# -gt 20 ]
do
echo $1
rm -rf $1 || echo "could not delete $1"
shift
done
fi
echo ""
done

View file

@ -0,0 +1,29 @@
#! /bin/sh
# This script cleans a source tree of unwanted ,RCSnew* files
# created when you abort RCS.
# It also makes all the ,v files have group bin and owner bin --marca
# marca 2/7/90
USAGE="USAGE: cleansrctree <sourcedir>"
if [ $# -lt 1 ];then
echo ""
echo "$USAGE"
exit 1
fi
cd /$1
#change owner and group to bin
echo "FILES NOT OWNER BIN"
find . -name "*,v" ! -user bin -print -exec chown bin {} \;
find . -name "*,v" ! -group bin -print -exec chgrp bin {} \;
echo "FILES not 444"
find . -name "*,v" -perm 0440 -exec chmod +r {} \; -print
echo ""
echo "FILES NOT GROUP BIN"
echo ""
echo ",RCS FILES"
# eliminate , files
find . -name ",*" -print -exec rm -f {} \;

View file

@ -0,0 +1,69 @@
################################################################################
#
# RCS: $XConsortium: cron_example /main/3 1995/10/30 13:43:46 rswiston $
# Author: Marc Ayotte, Hewlett-Packard OSSD-CV
# Created: Tue Jun 29 10:12:15 PDT 1993
# Language: N/A
# Package: N/A
# Status: CDE
#
# (c) Copyright 1993, Hewlett-Packard Company, all rights reserved.
#
# Description: This file is an example cron script which triggers
# builds and does normal tree maintenance. The various functions
# are delimited by the letters #[A-Z]).
# A) fnrclone can leave 2 files each time it executes:
# The file ${HOME}/fnrclone/log.hhmmss and script.hhmmss.
# These files can pile up and they are cleaned out by the cleanfnr
# script.
# NOTE: In the very near future this will not be the default
# operation for fnrclone and this may no longer be necessary.
# B) By default, master_build puts its log files in the
# /x/logs/build/MMDD/${buildtreename} directory. The
# cleanLogs script trims these directories.
# C) The script ListTheTree creates a listing of all of the files in
# a tree and puts the list under the name :TreeListing in the top
# of the tree.
# D) An example of building the /x/cde_hp700_90 tree on the
# machine that is doing cron.
# E) An example of building the /x/cde_hp700d_90(debug) tree on a
# remote machine using remsh.
################################################################################
#A) clean ${HOME}/fnrclone directory
4 11 * * * /x/cdesrc/admin/BuildTools/master_build/cleanfnr 1>/users/marca/xbuild/cleanfnr.log 2>&1
#B) clean excess build logs in /x/logs/build
4 19 * * * /x/cdesrc/admin/BuildTools/master_build/cleanLogs 1>/x/logs/cronlogs/cleanLogs.log 2>&1
#C) create a listing of the files in a tree and put into top of the tree.
# this also creates a listing of locked files
10 12 * * * /x/cdesrc/admin/BuildTools/master_build/ListTheTree /x/cdesrc 1>/x/logs/cronlogs/ListTheTreecdesrc.log 2>&1
#D) build the hp tree putting the log files in the default location.
# the source tree is /x/cdesrc; the build tree is /x/cde_hp700_90.
# This entry will first do an fnrclone -s /x/cdesrc /x/cde_hp700_90
# to sync up the build tree's links to the source (-clone s).
# The log and error files from the clone will go into
# /x/logs/build/mmdd/cde_hp700_90/clonelog.HHMMSS
# /x/logs/build/mmdd/cde_hp700_90/cloneerr.HHMMSS
# It uses -c to do all of the normal imake functions:
# make -i Makefile; make -i Makefiles;make -i includes;make -i
# depend and make -i.
# The log files for make -i will go in
# /x/logs/build/mmdd/cde_hp700_90/make.HHMMSS.
# The log files for all other operations will go in
# /x/logs/build/mmdd/cde_hp700_90/allmake.HHMMSS.
# The second entry uses -w to "clean the tree": remove all .o's, .a's,
# executables etc. Normally we make clean once a week on Saturday night.
# The -cl option will remove symbolic links to nowhere.
# The -m option will mail notification to someone when the build
# is complete.
############ cde_hp700_90 - LOCAL ##############
6 22 * * 0,1,2,3,4,5 /x/cdesrc/admin/BuildTools/master_build/master_build -src /x/cdesrc -build /x/cde_hp700_90 -clone s -cl -c -m buildwatch@hpcvlx 1>/x/logs/cronlogs/r5s700.log 2>&1
6 22 * * 6 /x/cdesrc/admin/BuildTools/master_build/master_build -src /x/cdesrc -build /x/cde_hp700_90 -clone s -cl -c -w -m buildwatch@hpcvlx 1>/x/logs/cronlogs/r5s700.log 2>&1
#E) build the debug tree on hpcvusj
############ cde_hp700d_90 - HPCVUSJ ##############
10 22 * * 0,1,2,3,4,5 /x/cdesrc/admin/BuildTools/master_build/remote_build hpcvusj -src /x/cdesrc -build /x/cde_hp700d_90 -clone s -cl -c -m buildwatch@hpcvlx 1>/x/logs/cronlogs/r5s700.log 2>&1
10 22 * * 6 /x/cdesrc/admin/BuildTools/master_build/remote_build hpcvusj -src /x/cdesrc -build /x/cde_hp700d_90 -clone s -cl -c -w -m buildwatch@hpcvlx 1>/x/logs/cronlogs/r5s700.log 2>&1

View file

@ -0,0 +1,50 @@
#!/bin/sh
#
# this script make sure that all dirs in /x80src are
# owned by xbuild, and that all directories have permissions
# of 755.
#
# - jim andreas 10/91
#
# modified to be more general by Marc Ayotte 11/92
doUsage()
{
cat << eof
USAGE: fixSourceDirPerm <tree> <owner> <group>
Note: if owner != bin, files and directories owned by bin
will NOT be changed to owner.
eof
}
if [ $# -lt 3 ];then
doUsage;
exit 1
fi
cd $1 || doUsage
# Some dirs in the build trees have to be owned by bin (rcs_tools)
# if bin is not the chosen group, don't change files that are already bin
if [ "$2" != "bin" ];then
DontDoBin="! -user bin"
fi
# change ownership of non-conforming dirs
#
echo "DIRS not owned by $2"
find . -type d ! -path "*RCS*" ! -path "*/CRT*" ! -user $2 $DontDoBin -print -exec chown $2 {} \; -exec chgrp $3 {} \;
# chmod mode of non-conforming dirs
#
echo "DIRS not 755 permission by $2"
find . -type d -user $2 ! -path "*/CRT*" $DontDoBin ! -perm 755 -print -exec chmod 755 {} \;
# chown mode of non-conforming files
#
echo "FILES not owned by $2"
find . -type f ! -path "*RCS*" ! -path "*/CRT*" ! -user $2 $DontDoBin -print -exec chown $2 {} \; -exec chgrp $3 {} \;

View file

@ -0,0 +1,89 @@
#! /usr/local/bin/perl
eval "exec /usr/local/bin/perl -S $0 $*"
if $running_under_some_shell;
################################################################################
#
# File: manageBInstallDirs <source tree>
# RCS: $XConsortium: manageBInstallDirs /main/3 1995/10/30 13:43:53 rswiston $
# Author: Marc Ayotte Hewlett-Packard, OSSD-CV
# Created: Thu Dec 30 14:02:31 PST 1993
# Language: perl
# Package: N/A
# Status: CDE distributed
#
# (c) Copyright 1993, Hewlett-Packard Company, all rights reserved.
#
# Usage: manageBInstallDirs <directory> <latestsubdir> [#dirsleft]
#
# Description: This script removes excessive binstall directories of
# the type parentdir/mm_dd (month day).
# It also symbolically links the most recent subdirectory
# to parentdir/latest.
#
################################################################################
if ($ARGV[1]) {
$tree = $ARGV[0];
$latestSubdir = $ARGV[1];
}
else {
die "USAGE manageBInstallDirs <parent directory> <latestsubdir> [# dirsleft]\n";
}
if (! chdir("$tree")) {
die " ERROR -> Couldn't change directory to $tree.\n";
}
if ($ARGV[2]) {
$numDirsLeft = $ARGV[2];
}
else {
$numDirsLeft = 7;
}
#######################################################
# define local subroutines
#######################################################
sub dokill {
die "\n left on INTR \n";
exit 1;
}
########################################################
# Catch signals
########################################################
$SIG{'INT'} = 'dokill';
##################################################
# get the mm_dd directories in oldest first order.
# remove the oldest if there are more than minimum.
##################################################
@allDirs = (`ls -t`);
$counter = 0;
foreach $dir (@allDirs){
chop $dir;
$_ = $dir;
if (m%^[0-9][0-9]_[0-9][0-9]$% && -d $dir) {
if ($counter++ >= $numDirsLeft) {
print "removing $tree/$dir\n";
system "rm -rf $dir";
}
}
}
############################
# link latestSubdir to latest
############################
if (-l "latest") {
print "linking $latestSubdir to \"latest\"\n";
system "rm -f latest";
system "ln -s -f $latestSubdir latest";
}
elsif(-d "latest") {
print "Error - directory \"latest\" is a real directory";
}
else { # create link
system "ln -s -f $latestSubdir latest";
}

View file

@ -0,0 +1,520 @@
#!/bin/ksh
################################################################################
#
# File: master_build
# RCS: $XConsortium: master_build /main/14 1996/07/18 14:17:16 drk $
# Author: Marc Ayotte Hewlett-Packard, OSSD-CV
# Created: 2/6/90
# Modified by: Jim Andreas, Fred Handloser, Marc Ayotte, Ron Voll
# and others from Hewlett-Packard, OSSD-CV
# Language: N/A
# Package: N/A
# Status: CDE distributed
#
# (c) Copyright 1993, Hewlett-Packard Company, all rights reserved.
#
# Description: This file controls the building and cloning of
# of source and build trees. Look at the file cron.example
# and the usage information below for examples of how
# to use this script. There is also a man page
# master_build.1
################################################################################
################################################################################
function DoUsage #
################################################################################
{
if [ -n $1 ]; then
echo "unrecognized option: $1"
echo
fi
cat<<eof
Usage:master_build
[ -src <srcdir> ] (source directory e.g. /proj/cde, /proj/x11)
[ -build <buildir> (build dir. as in /proj/cde, /proj/x11)
[ -clone <option> ] (one of:
f -> do a full checkout # TEMPORARILY OBSOLETE!!
n -> clone creating real files (fnrclone -n)
s -> clone without checking files out of RCS
c -> clone checking out newer RCS files
sync-> clone checking out newer RCS files (OBSOLETE)
[ -cl ] (run cleanLinks)
[ -c ] (compile)
[ -b ] (run make binstall and use the default path mechanism in imake)
[ -bp <path> ] (run make binstall and supply the install location)
[ -ba <path> ] (run make binstall and create an automatic install path)
(This path is of the form path/mm_dd).
[ -cb <#dirs left> ] (clean binstall directories. must be used
with -ba option)
[ -l ] (make lint libraries)
[ -n ] (do not make Makefile,Makefiles,includes,depend)
[ -w ] (clean the tree before building)
[ -be <chrootdir> ] (do a chroot build using chrootdir)
[ -ld <ldoptions> ] (pass ld options to build probably obsolete)
[ -model <model> ] (necessary for apollo or prism)
[ -m ] ( send mail to all in BUILD_WATCH list when finished)
[ -noIgnore ] (do not use the -k option to make)
[ -log <logdir> ] directs output to <logdir>/mm_dd/cde
e.g. -log /proj/cde/logs -> /proj/cde/logs/mm_dd/cde/*
if no -log is specified, output is directed to <buildir>/mm_dd/cde/*
if no -build is specified, output is directed to ./mm_dd/cde/*
[ -t ] <tooldir> (directory containing master_build, fnrclone
directories. Currently $TOOLDIR)
eof
#
# if there is a bad option mail to any in the BUILD_WATCH list,
# we don't know if the -m option was used.
if [ "$BUILD_WATCH" ]
then
LETTER=/tmp/optError.$$
echo "master_build did not run on machine $SYSNAME" > $LETTER
echo "due to bad option '$1'" >> $LETTER
echo "" >> $LETTER
echo "" >> $LETTER
printenv >> $LETTER
mailx -s"master_build did not run on $SYSNAME due to bad option '$1'" $BUILD_WATCH < $LETTER
rm $LETTER
fi
exit 1
} # END DoUsage
###########################################################################
# Initialize Parameters
# get the architecture and start time
SYSNAME=`uname -n`
ARCH=`uname -s`
#
# Resolve date call that depend on HP-UX, Apollo sys5.3, or Apollo
# bsd4.3. The default for architectures is "date
#
if [ -f /hp-ux ]
then
DATECMD="/bin/date"
elif [ -f /com/ctnode ]
then
DATECMD="/sys5.3/bin/date"
else
DATECMD="date"
fi
START_TIME_LONG=`$DATECMD`
START_TIME="`$DATECMD +%d`_`$DATECMD +%H`:`$DATECMD +%M`:`$DATECMD +%S`"
DATE="`$DATECMD +%m`_`$DATECMD +%d`"
SENDMAIL="FALSE"
TOOLDIR=/x/cdesrc/admin/BuildTools
IGNORE="-k"
BASE_LOG_DIR=
###########################################################################
###########################################################################
# parse command line arguments...
# Prepend options from the MASTERBUILD environment variable.
set -- $MASTERBUILD $*
if [ $# -lt 1 ]
then
DoUsage $1 # exit on error
fi
while [ $# -gt 0 ]
do case $1 in
-src) SRC_DIR=$2;shift 2 ;; # source directory
-build) OBJ_DIR=$2;shift 2 ;; # build directory
-clone) CLONEOPT=$2;shift 2 ;; # clone options if any
-cl) CLEANLINKS="TRUE";shift ;; # run clean links
-c) COMPILE="TRUE";shift ;; # Compile object
-b) DOBINSTALL="TRUE";
BINSTALL_PATH=;shift ;; # run make binstall w/default path
-bp) DOBINSTALL="TRUE";
BINSTALL_PATH=$2;
shift 2 ;; # run make binstall w/supplied path
-ba) DOBINSTALL="TRUE";
BINSTALL_PATH=$2;
BINSTALL_AUTOPATH="TRUE"; # append /mm_dd to BINSTALL_PATH
shift 2 ;; # run make binstall w/auto path
-cb) DOCLEANBINSTALL="TRUE" ; # run manageBInstallDirs
NUMBINSTALLDIRSLEFT=$2 ; # directories to leave when
shift 2 ;; # cleaning binstall subdirs
-n) NOMAKEMAKEFILE=TRUE;shift;; # Do not do make Makefile, etc
-w) CLEAN="TRUE";shift ;; # Remove all object files
-l) DOLINT="TRUE";shift ;; # Make lint from top level
-ld) LDOPTIONS=$2;shift 2 ;; # LDOPTS passed
-be) BE=TRUE;BEDIR=$2;shift 2;; # use pseudo-root BEDIR to build
-log) BASE_LOG_DIR=$2;shift 2;; # use alternate log directory
-t) TOOLDIR=$2;shift 2 ;; # directory for fnrclone, etc.
-model) MODEL=$2;shift 2 ;; # not necessary for hp
-noIgnore) IGNORE=; shift ;; # do not ignore make errors (no -k)
-m) SENDMAIL="TRUE";BUILD_WATCH=$2;shift 2 ;; # send mail when finished
*) DoUsage $1;shift ;; # exit on error
esac
done
umask 002
###########################################################################
# Set up various log directories
#
CLEANBINSTALL=$TOOLDIR/master_build/manageBInstallDirs
LATESTDIR=$DATE # for manageBInstallDirs
CLEANBINSTALLPATH=$BINSTALL_PATH # for manageBInstallDirs
# binstall automatic path
if [ "$BINSTALL_AUTOPATH" ];then
BINSTALL_PATH=$BINSTALL_PATH/$DATE
else
if [ "$DOCLEANBINSTALL" ];then
echo "ERROR - can't run manageBInstallDirs unless -ba option is used";
DoUsage
fi
fi
#
# The log directory is determined as follows
#
# 1. The directory specified in the -log flag.
# 2. The directory specified in the -build flag.
# 3. The current directory.
#
if [ "$BASE_LOG_DIR" = "" ]; then
if [ "$OBJ_DIR" ]; then
BASE_LOG_DIR=$OBJ_DIR;
else
BASE_LOG_DIR=".";
fi
fi
BASE_LOG_DIR=$BASE_LOG_DIR/$DATE
# set up log directories on build machines
# use build directory for log file if present, otherwise use source
# if binstall wanted and no object dir -> error
if [ "$OBJ_DIR" ];then
FOCUS_DIR=$OBJ_DIR
else
if [ "$DOBINSTALL" ];then
echo "\n\t----------------------------------------------------------";
echo "\t*** ERROR - must specify -build option with -b options ***"
echo "\t----------------------------------------------------------";
DoUsage;
fi
FOCUS_DIR=$SRC_DIR
fi
#
# check the existence of OSVersion.tmpl
#
if [ ! -a $FOCUS_DIR/config/OSVersion.tmpl ]; then
echo "$FOCUS_DIR/config/OSVersion.tmpl does not exist"
echo "Abort...."
exit 1
fi
#
# check the existence of localtree.tmpl
#
if [ ! -a $FOCUS_DIR/config/localtree.tmpl ]; then
echo "$FOCUS_DIR/config/localtree.tmpl does not exist"
echo "Abort...."
exit 1
fi
#
# setup the log directory
#
LEAF_LOG_DIR=`basename $FOCUS_DIR`
LOG_DIR=$BASE_LOG_DIR/$LEAF_LOG_DIR
[ ! -d $LOG_DIR ] && mkdir -p $LOG_DIR
DATE=`$DATECMD +%H%M%S`
BUILDLOGDATE=`$DATECMD +%a`
# make a daily directory for logs
CLONE_ERR=$LOG_DIR/cloneerr.$DATE
CLONE_LOG=$LOG_DIR/clonelog.$DATE
CLEANLINKS_LOG=$LOG_DIR/cleanlinks.$DATE
MAKE_FILE=$LOG_DIR/make.$DATE
ALL_MAKE=$LOG_DIR/allmake.$DATE
LINT_LOG=$LOG_DIR/lint.$DATE
BINSTALL_LOG=$LOG_DIR/binstall.$DATE
CLEANBINSTALL_LOG=$LOG_DIR/cleanbinstall.$DATE
SUMMARY_FILE=$LOG_DIR/summary.$DATE
PROCESSID_FILE=$LOG_DIR/pid.$DATE
echo "$$" > $PROCESSID_FILE
echo "pid of master_build is $$ for $FOCUS_DIR on $SYSNAME" >> $PROCESSID_FILE
# Log file for a particular build tree
[ "$OBJ_DIR" ] && [ ! -d $OBJ_DIR/logs ] && mkdir $OBJ_DIR/logs
OBJ_DIR_LOG=$OBJ_DIR/logs/make.${BUILDLOGDATE}.${DATE}
###########################################################################
# Clone source or build trees
#
# clone if appropriate
if [ "$CLONEOPT" ]
then
cd $FOCUS_DIR #directory which will be cloned if not checkout all
echo "\n==== Cloning $FOCUS_DIR on $SYSNAME, pid of master_build is $$ ====\n";
case $CLONEOPT in
s) $TOOLDIR/fnrclone/fnrclone $SRC_DIR $FOCUS_DIR -f $CLONE_LOG 1>$CLONE_ERR 2>&1;;
n | c) $TOOLDIR/fnrclone/fnrclone $SRC_DIR $FOCUS_DIR -${CLONEOPT} -f $CLONE_LOG 1>$CLONE_ERR 2>&1;;
sync) $TOOLDIR/fnrclone/fnrclone $SRC_DIR $FOCUS_DIR -c -f $CLONE_LOG 1>$CLONE_ERR 2>&1;;
*) echo "\n=========== bad clone option $CLONEOPT on $SYSNAME ========\n";
# if there is a bad option mail to any in the BUILD_WATCH list,
# even if the -m option was not used since this is an error
if [ "$BUILD_WATCH" ]; then
LETTER=/tmp/cloneOptError.$$
echo "master_build on machine $SYSNAME exited " > $LETTER
echo "due to bad clone option '$CLONEOPT'" >> $LETTER
echo "" >> $LETTER
echo "" >> $LETTER
printenv >> $LETTER
mailx -s"master_build on $SYSNAME exited due to bad clone option '$CLONEOPT'" $BUILD_WATCH < $LETTER
rm $LETTER
fi
exit 1;;
esac
fi
#################################
# Clean symbolic links to nowhere
#################################
if [ "$CLEANLINKS" = "TRUE" ]
then
echo "\n= removing symbolic links to nowhere in $FOCUS_DIR on $SYSNAME =\n";
$TOOLDIR/master_build/cleanLinks $FOCUS_DIR 1>$CLEANLINKS_LOG 2>&1
fi
###########################################################################
#
# build new stuff...
#
if [ "$CLEAN" ]
then
CLEAN="make $IGNORE clean"
CLEAN_STEPNAME="clean "
else
CLEAN="true"
fi
if [ "$COMPILE" -o "$DOLINT" ];then
if [ "$COMPILE" ]; then
BUILD="make $IGNORE"
COMPILE_STEPNAME="make"
else
BUILD="true"
fi
if [ "$DOLINT" ];then
LINT="make $IGNORE lintlib"
LINT_STEPNAME="lintlib"
else
LINT="true"
fi
# if only doing make (-n option) ignore everything else
if [ "$NOMAKEMAKEFILE" ];then
MFILE="true"
MFILES="true"
MKINCLUDES="true"
DEPEND="true"
else
MFILE="make -f Makefile.ini Makefile"
MFILES="make $IGNORE Makefiles"
MKINCLUDES="make $IGNORE includes"
DEPEND="make $IGNORE depend"
MAKEFILES_STEPNAME="Makefiles"
INCLUDES_STEPNAME="includes"
DEPEND_STEPNAME="depend"
fi
echo "\n================= Building $OBJ_DIR on $SYSNAME ==================\n"
echo "Build Directory: $OBJ_DIR"
echo "Logging Directory: $LOG_DIR"
echo "MasterBuild Steps: $MAKEFILES_STEPNAME $CLEAN_STEPNAME $INCLUDES_STEPNAME $DEPEND_STEPNAME $COMPILE_STEPNAME $LINT_STEPNAME"
#
# Print out information about the view configuration
#
CLEARTOOL=/usr/atria/bin/cleartool
if [ -f $CLEARTOOL -a -x $CLEARTOOL ]; then
CWD=`pwd`
cd $OBJ_DIR
echo "\nBuild view: " `$CLEARTOOL pwv -wdview -short`
echo "\nView config-spec:"
$CLEARTOOL catcs | grep -v "^#" | sed 's/.*/ &/'
echo "\nChecked out versions:"
$CLEARTOOL lsco -cview -avobs -fmt " %Sd %u %n\n"
cd $CWD
fi
#
# print out OSVersion.tmpl info if it is a symbolic link
#
echo "\n$FOCUS_DIR/config/OSVersion.tmpl:"
if [ -L $FOCUS_DIR/config/OSVersion.tmpl ]; then
ls -l $FOCUS_DIR/config/OSVersion.tmpl | \
awk '{ print " Link to -> " $11 }'
else
ls -l $FOCUS_DIR/config/OSVersion.tmpl
fi
awk '/^#define/ { print " " $2,$3 }' $FOCUS_DIR/config/OSVersion.tmpl
#
# print out localtree.tmpl info if it is a symbolic link
#
echo "\n$FOCUS_DIR/config/localtree.tmpl:"
if [ -L $FOCUS_DIR/config/localtree.tmpl ]; then
ls -l $FOCUS_DIR/config/localtree.tmpl | \
awk '{ print " Link to -> " $11 }'
else
ls -l $FOCUS_DIR/config/localtree.tmpl
fi
echo ""
######################################################################
# This section below probably only applies to Hewlett-Packard
# It concerns using a chroot build environment when building.
######################################################################
#chroot build
if [ "$BE" ];then
cat<<dernier>$BEDIR/tmp/allmake$$script
#! /bin/sh
umask 002
cd $OBJ_DIR && $MFILE && $MFILES && $CLEAN && $MKINCLUDES && $DEPEND
dernier
chmod +x $BEDIR/tmp/allmake$$script
/usr/local/bin/changeroot $BEDIR /tmp/allmake$$script 1>$ALL_MAKE 2>&1
rm -f $BEDIR/tmp/allmake$$script
cat<<dernier>$BEDIR/tmp/make$$script
#! /bin/sh
umask 002
LDOPTS="$LDOPTIONS"
export LDOPTS
cd $OBJ_DIR && $BUILD
dernier
chmod +x $BEDIR/tmp/make$$script
/usr/local/bin/changeroot $BEDIR /tmp/make$$script 2>&1 | tee $OBJ_DIR_LOG 1>$MAKE_FILE
rm -f $BEDIR/tmp/make$$script
if [ "$DOLINT" ];then
cat<<dernier>$BEDIR/tmp/lint$$script
#! /bin/sh
umask 002
cd $OBJ_DIR && $LINT
dernier
chmod +x $BEDIR/tmp/lint$$script
/usr/local/bin/changeroot $BEDIR /tmp/lint$$script 1>$LINT_LOG 2>&1
rm -f $BEDIR/tmp/lint$$script
fi
######################################################################
# non chroot (normal) builds
######################################################################
else
if [ "$ARCH" = "SunOS" ];then
PATH=$PATH:/usr/ccs/bin
export PATH
fi
if [ "$MODEL" = "apollo" -o "$MODEL" = "prism" ]
then
( umask 002
echo "Preparing to build in: \"$OBJ_DIR\"."
cd $OBJ_DIR &&
$MFILE &&
$MFILES &&
$CLEAN &&
$MKINCLUDES &&
$DEPEND
) 1>$ALL_MAKE 2>&1
( umask 002
echo "Building in \"$OBJ_DIR\"."
echo " X11REV=\"$X11REV\"."
echo " MOTIFREV=\"$MOTIFREV\"."
cd $OBJ_DIR &&
$BUILD
) 2>&1 | tee $OBJ_DIR_LOG 1>$MAKE_FILE
( umask 002
echo "Linting in \"$OBJ_DIR\"."
cd $OBJ_DIR &&
$LINT
) 1>$LINT_LOG 2>&1
else # all other architectures
COMMAND="umask 002
cd $OBJ_DIR &&
$MFILE &&
$MFILES &&
$CLEAN &&
$MKINCLUDES &&
$DEPEND &&
$BUILD 2>&1 | tee $OBJ_DIR_LOG 1>$MAKE_FILE &&
$LINT 1>$LINT_LOG 2>&1"
eval "$COMMAND" 1>$ALL_MAKE 2>&1
fi # apollo || prism
fi # BE
LETTER=/tmp/allOK.$$
STORAGEDIR=`/bin/pwd`
END_TIME="`$DATECMD +%d`_`$DATECMD +%H`:`$DATECMD +%M`:`$DATECMD +%S`"
END_TIME_LONG=`$DATECMD`
echo "master_build for $FOCUS_DIR on machine $SYSNAME " > $LETTER
echo " " >> $LETTER
echo " started at $START_TIME_LONG" >> $LETTER
echo " " >> $LETTER
echo " and finished at $END_TIME_LONG" >> $LETTER
echo "" >> $LETTER
echo "Summary: $SYSNAME $FOCUS_DIR $STORAGEDIR $START_TIME $END_TIME" >> $LETTER
echo "" >> $LETTER
cp $LETTER $SUMMARY_FILE
if [ "$SENDMAIL" = "TRUE" ] && [ "$BUILD_WATCH" ]
then
mailx -s"master_build for $FOCUS_DIR finished at `date`" $BUILD_WATCH < $LETTER
fi
rm -f $LETTER
fi # COMPILE || DOLINT
if [ "$DOBINSTALL" ];then
echo "Running make binstall on \"$OBJ_DIR\"."
if [ "$BINSTALL_PATH" ];then
BINSTALL="make $IGNORE BINSTALLPATH=$BINSTALL_PATH binstall";
else
BINSTALL="make $IGNORE binstall";
fi
cd $OBJ_DIR && $BINSTALL 1>$BINSTALL_LOG 2>&1
if [ "$DOCLEANBINSTALL" ];then
echo "Running clean binstall on \"$CLEANBINSTALLPATH\""
$CLEANBINSTALL $CLEANBINSTALLPATH $LATESTDIR $NUMBINSTALLDIRSLEFT 1>$CLEANBINSTALL_LOG 2>&1
fi
fi
exit 0

View file

@ -0,0 +1,55 @@
#! /usr/local/bin/perl
eval "exec /usr/local/bin/perl -S $0 $*"
if $running_under_some_shell;
###############################################################################
#
# File: mkPreviousLink
# RCS: $XConsortium: mkPreviousLink /main/3 1995/10/30 13:44:16 rswiston $
# Author: John Herberg
# Created: 4/13/94
# Language: perl
# Package:
# Status
#
# (c) Copyright 1994, Hewlett-Packard, all rights reserved.
#
# Usage: mkPreviousLink <directory>
#
# Description: Copies latest link in directory to previous.
#
###############################################################################
###############################################################################
# printUsage - print sytax of script and die
###############################################################################
sub printUsage
{
die "Usage: mkPreviousLink <binstallpath>\n";
}
###
### Start main
###
&printUsage() if ((@ARGV != 1) || ($ARGV[0] =~ /^-/o));
$tree=$ARGV[0];
$_ = "$tree/latest";
### Resolve link
( -l ) || die "*** Error: $_ is not a symbolic link\n";
defined($ldest = readlink) || die "*** Error: Failed to resolve link, $_ $ldest\n";
### Create "previous" link
chdir($tree) || die "*** Error: Failed to change directory to $tree\n";
unlink("previous");
symlink($ldest, "previous") ||
die "*** Error: Could not create link, $tree/previous -> $ldest\n";

View file

@ -0,0 +1,20 @@
#!/bin/sh
#this script is set to provide access to remote builds and pass the
# appropriate options to the remote machines
# Marc Ayotte 2/5/90
USAGE="USAGE: remote_build <remotehost> [Remoteoptions ..]
see master_build for details on options"
if [ $# -lt 1 ];then
echo ""
echo "$USAGE"
exit 1
fi
REMOTEHOST=$1
shift
remsh $REMOTEHOST "/x/cdesrc/admin/BuildTools/master_build/master_build $*"

View file

@ -0,0 +1,9 @@
/* $XConsortium: README /main/2 1996/07/15 13:57:35 drk $ */
This directory is for information for setup for a user or administrator's
system.
This is a readme for anything that goes in this directory.
perl.hp.tar.Z - 8/10/93 - the 9.0 hp perl package. untar in /.
perl.ibm.tar.Z - 8/10/93 - the AIX 3.2 ibm perl package. untar in /.
perl.sun.tar.Z - 01/18/94 - the SunOS 5.3 perl package. untar in /.
installtools - setup script - DO NOT USE YET!!!

View file

@ -0,0 +1,22 @@
#! /bin/ksh
# This script checks to see if the system release is OK and the compiler
# is OK on hpux.
RELEASE=`uname -r|fgrep '9.05' 2>/dev/null`
if [ ! "$RELEASE" ];then
echo " System Release Incorrect. uname -r should be 9.05"
echo " system is instead `uname -r`"
echo ""
fi
COMPILER=`what /bin/c89 |fgrep '9.68' 2>/dev/null`
if [ ! "$COMPILER" ];then
echo " Compiler version is Incorrect. It should be 9.68"
echo " Instead it is:"
what /bin/c89
echo ""
fi

View file

@ -0,0 +1,144 @@
#!/bin/ksh
#set -x
######################################################################
# check to see if the system release is OK and build environments are OK
# on an AIX build box
# Yanling Qi (yanling@austin.ibm.com) (512-838-2846)
######################################################################
#
Lslpp()
{
/bin/lslpp -lc $1|grep "usr"|grep -v "AVAILABLE"
}
#
# (1) check oslevel
#
OSLEVEL=$(/bin/oslevel |fgrep '3250')
print "\nCheck OS level......"
if [ "XX$OSLEVEL" = "XX" ]; then
echo " System Release Incorrect. /bin/oslevel should be 3250"
echo " system is instead `/bin/oslevel`"
echo ""
else
echo " Check oslevel Passed"
fi
#
# (2) check basic operating system package (/usr/bin /usr/lpp and some
# /usr/lib /usr/bin/ld
#
print "\nCheck basic operating system package......"
Lslpp bos.obj |awk -F: '{
if ($1 ~ "usr")
{
if($2 == "bos.obj 03.02.00.00" && ($3 == "COMMITTED" || $3 == "APPLIED"))
printf(" Check base Operating System Package: Passed\n");
else {
printf("Package should be: bos.obj 03.02.00.00\n")
printf(" yours is: %s\n",$0);
}
}
else # missing this package
printf("Package bos.obj 03.02.00.00 is missing\n")
}'
#
# (3) Check C++ compliler
print "\nCheck C++ compliler......"
Lslpp xlCcmp.obj |awk -F: '{
if ($1 ~ "usr")
if($2 == "xlCcmp.obj 01.01.02.29" && ($3 == "COMMITTED" || $3 == "APPLIED"))
printf(" Check AIX XL C++ Compiler/6000 Package: Passed\n");
else{
printf(" Package should be xlCcmp.obj 01.01.02.29\n")
printf(" yours is: %s\n",$0);
}
else # missing this package
printf("Package xlCcmp.obj 01.01.02.29 is missing\n");
}'
#
# (4) check C++ lib /usr/lpp/xlC/lib/libC.a
# /usr/lpp/xlC/lib/profiled/libC.a
#
print "\nCheck C++ lib......"
Lslpp xlCrte.obj|awk -F: '{
if ($1 ~ "usr")
if($2 == "xlCrte.obj 01.01.02.29" && ($3 == "COMMITTED" || $3 == "APPLIED"))
printf(" Check AIX XL C++ Compiler/6000 Runtime Package: Passed\n");
else{
printf(" Package should be xlCrte.obj 01.01.02.29\n")
printf(" yours is: %s\n",$0);
}
else # missing this package
printf("Package xlCrte.obj 01.01.02.29 is missing\n");
}'
#
# (5) check c compliler
#
print "\nCheck xl c compiler......"
Lslpp xlccmp.obj |awk -F: '{
if ($1 ~ "usr")
if($2 == "xlccmp.obj 01.03.00.12" && ($3 == "COMMITTED" || $3 == "APPLIED"))
printf(" Check AIX XL C Compiler Package: Passed\n");
else{
printf(" Package should be xlccmp.obj 01.03.00.12\n")
printf(" yours is: %s\n",$0);
}
else # missing this package
printf("Package xlccmp.obj 01.03.00.12 is missing\n");
}'
#
# (6) check Base Application Development Toolkit
# cpp lex yacc
#
print "\nCheck Base Application Development Toolkit......"
Lslpp bosadt.bosadt.obj |awk -F: '{
if ($1 ~ "usr")
if($2 == "bosadt.bosadt.obj 03.02.00.00" && ($3 == "COMMITTED" || $3 == "APPLIED"))
printf(" Check Base Application Development Toolkit Package: Passed\n");
else{
printf(" Package should be bosadt.bosadt.obj 03.02.00.00\n")
printf(" yours is: %s\n",$0);
}
else # missing this package
printf("Package bosadt.bosadt.obj 03.02.00.00 is missing\n");
}'
#
# (7) check Base Development Libraries & Include files
# cpp lex yacc
#
print "\nCheck Base Development Libraries & Include files......"
Lslpp bosadt.lib.obj |awk -F: '{
if ($1 ~ "usr")
if($2 == "bosadt.lib.obj 03.02.00.00" && ($3 == "COMMITTED" || $3 == "APPLIED"))
printf(" Check Base Development Libraries & Include files Package: Passed\n");
else{
printf(" Package should be bosadt.lib.obj 03.02.00.00\n")
printf(" yours is: %s\n",$0);
}
else # missing this package
printf("Package bosadt.lib.obj 03.02.00.00 is missing\n");
}'
#
# (8) check X Development Libraries and Include Files
#
#
print "\nCheck X Development Libraries and Include Files......"
Lslpp X11dev.obj |awk -F: '{
if ($1 ~ "usr")
if($2 == "X11dev.obj 01.02.03.00" && ($3 == "COMMITTED" || $3 == "APPLIED"))
printf(" Check X Development Libraries and Include Files Package: Passed\n");
else{
printf(" Package should be X11dev.obj 01.02.03.00\n")
printf(" yours is: %s\n",$0);
}
else # missing this package
printf("Package X11dev.obj 01.02.03.00 is missing\n");
}'

Binary file not shown.

Binary file not shown.

Binary file not shown.

158
cde/admin/BuildTools/tog/build_id Executable file
View file

@ -0,0 +1,158 @@
#!/bin/ksh
#
# build_id
#
########################################################################
# set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
PROG_NAME="$0"
LOG_DIR="/project/dt/admin/mkid"
LOG_FILE="cdeID"
LOG_PATH=""
DO_X_BUILD="False"
DO_MOTIF_BUILD="False"
DO_CDE_BUILD="False"
DO_CDEDOC_BUILD="False"
DO_CDETEST_BUILD="False"
DO_DEBUG="False"
##########################################################################
usage ()
{
cat <<eof
USAGE: $1
[-e | -dev] # Default: build x11, motif and cde
[-x | -x11] # Build x11 only
[-m | -motif] # Build motif only
[-c | -cde] # Build cde only
[-t | -cdetest] # Build cde tests only
[-a | -all] # Build x11, motif, cde, cdedoc and cdetest
[-debug] # Debugging output
[{-ld | -log_dir} <dirpath>]
# Specify an alternate log directory.
# Default: $LOG_DIR
[{-lf | -log_file} <filename>]
# Specify an alternate log file relative to $LOG_DIR.
# Default: $LOG_FILE
[{-lp | -log_path} <path>]
# Specify an alternate log directory.
# Default: $LOG_DIR/$LOG_FILE
[-h | -? | -help] # Print usage and exit
eof
}
##########################################################################
while [ $# -gt 0 ]; do
case $1 in
-e | -dev) DO_X_BUILD="True"
DO_MOTIF_BUILD="True"
DO_CDE_BUILD="True"
shift 1 ;;
-x | -x11) DO_X_BUILD="True"
shift 1 ;;
-m | -motif) DO_MOTIF_BUILD="True"
shift 1 ;;
-c | -cde) DO_CDE_BUILD="True"
shift 1 ;;
-t | -cdetest) DO_CDETEST_BUILD="True";
shift 1 ;;
-a | -all) DO_X_BUILD="True"
DO_MOTIF_BUILD="True"
DO_CDE_BUILD="True"
DO_CDEDOC_BUILD="True"
DO_CDETEST_BUILD="True"
shift 1 ;;
-debug) DO_DEBUG="True"
shift 1 ;;
-ld | -log_dir) LOG_DIR=$2; shift 2 ;;
-lf | -log_file) LOG_FILE=$2; shift 2 ;;
-lp | -log_path) LOG_PATH=$2; shift 2 ;;
-h | "-?" | -help | *) usage $PROG_NAME;
exit 1;
esac
done
##########################################################################
#
# Script setup: Do this after the command line parsing to pick up
# an alternate setting of SCRIPTS_DIR
#
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
#
# If no project was selected, then build the 'dev' projects
#
PROJECTS=""
if [ "True" = $DO_X_BUILD ]; then
PROJECTS="$PROJECTS $X_TOP"
fi
if [ "True" = $DO_MOTIF_BUILD ]; then
PROJECTS="$PROJECTS $MOTIF_TOP"
fi
if [ "True" = $DO_CDE_BUILD ]; then
PROJECTS="$PROJECTS $CDE_TOP"
fi
if [ "True" = $DO_CDETEST_BUILD ]; then
PROJECTS="$PROJECTS $CDETEST_TOP"
fi
if [ -z "$PROJECTS" ]; then
PROJECTS="$X_TOP $MOTIF_TOP $CDE_TOP"
fi
##########################################################################
#
# Set the log path
#
if [ -z "$LOG_PATH" ]; then
LOG_PATH=$LOG_DIR/$LOG_PATH
fi
/usr/local/bin/mkid -o$LOG_PATH $PROJECTS
#
# Clean up temporary files and exit
#
do_exit 0

View file

@ -0,0 +1,207 @@
#!/bin/ksh
#
# build_project
#
########################################################################
# set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
##########################################################################
#
# Script setup:
#
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
PROG_NAME=$0
CDETEST_BUILD_COMMAND=$CDETEST_TOP/admin/BuildTools/master_build/test_build
BOOTSTRAPCFLAGS='BOOTSTRAPCFLAGS=""'
PROJECT=""
BUILD_TYPE="inc"
LOG_DIR="/tmp"
########################################################################
#
# usage -
#
usage ()
{
cat <<eof
USAGE: $1
{-p | -project} {x11 | motif | cde | cdedoc | cde-test}
[-c | -clean] # Do a clean build; the default is incremental
[{-t | -top} <dir>]
[{-l | -log_dir} <dir>] # Only used with project cde-test
# Default TOP for x11 is '$X_TOP'.
# Default TOP for motif is '$MOTIF_TOP'.
# Default TOP for cde is '$CDE_TOP'.
# Default TOP for cdedoc is '$CDEDOC_TOP'.
# Default TOP for cde-test is '$CDETEST_TOP'.
[-h | -? | -help] # Print usage and exit
eof
}
########################################################################
#
# Parse command line
#
while [ $# -gt 0 ]; do
case $1 in
-p | -project) PROJECT=$2; shift 2 ;;
-c | -clean) BUILD_TYPE="clean"; shift 1 ;;
-t | -top) TOP=$2; shift 2 ;;
-l | -log_dir) LOG_DIR=$2; shift 2 ;;
-h | -? | -help | *) usage $PROG_NAME;
exit 1;
esac
done
if [ "" = "$PROJECT" ]; then
usage $PROG_NAME
exit 1
fi
########################################################################
#
# Define OS-specific variables
#
case "`uname -s`" in
SunOS) if [ "4.1.4" = "`uname -r`" ]; then
export PATH=$PATH:/usr/local/bin
else
export PATH=/opt/SUNWspro/bin:/usr/ccs/bin:$PATH:/usr/local/bin
export LM_LICENSE_FILE=/opt/SUNWspro/license_dir/license.dat
fi
;;
UNIX_System_V) BOOTSTRAPCFLAGS="BOOTSTRAPCFLAGS=-D__uxp__"
export PATH=/usr/ccs/bin:$PATH:/usr/local/bin
print -u1 "$PROG_NAME: Setting $BOOTSTRAPCFLAGS" ;;
UNIX_SV) export PATH=$PATH:/usr/local/bin
print -u1 "$PROG_NAME: Setting $BOOTSTRAPCFLAGS" ;;
IRIX) export PATH=$PATH:/usr/sbin ;;
HP-UX) export PATH=$PATH:/usr/ccs/bin ;;
Linux) export PATH=$PATH:/usr/bin:/usr/local/bin ;;
*) export PATH=$PATH:/usr/local/bin ;;
esac
########################################################################
#
# Set the cwd
#
if [ "" = "$TOP" ]; then
case $PROJECT in
x | x11) cd $X_TOP ;;
motif) cd $MOTIF_TOP ;;
cde) cd $CDE_TOP ;;
cdedoc) cd $CDEDOC_TOP ;;
cde-test) cd $CDETEST_TOP ;;
*) print -u2 "Exiting ... Project '$PROJECT' is NOT supported!"
exit 1
esac
else
cd $TOP
fi
########################################################################
#
# Audits
#
if [ $PROJECT != "cde-test" -a ! -f Makefile ]; then
print -u2 "Exiting ... No Makefile is in the '`pwd`' directory!"
exit 1
fi
########################################################################
#
# Run the build script
#
case $BUILD_TYPE in
clean)
case $PROJECT in
x | x11 | motif)
TARGET=World ;;
cde)
TARGET=World.dev ;;
cdedoc)
TARGET=World.doc ;;
cde-test)
FLAGS="-c -w" ;;
esac
;;
inc)
case $PROJECT in
x | x11 | motif)
TARGET=Everything ;;
cde)
TARGET=Everything.dev ;;
cdedoc)
TARGET=Everything.doc ;;
cde-test)
FLAGS=-c ;;
esac
;;
esac
case $PROJECT in
x | x11 | motif | cde | cdedoc)
case "`uname -s`" in
UNIX_SV)
if [ "" = "$TOP" ]; then
make -k BOOTSTRAPCFLAGS="-DSVR4 -Di386" $TARGET
else
make -k BOOTSTRAPCFLAGS="-DSVR4 -Di386" $TARGET TOP=$TOP
fi
;;
Linux)
if [ "" = "$TOP" ]; then
make -k $TARGET
else
make -k $TARGET TOP=$TOP
fi
;;
*)
if [ "" = "$TOP" ]; then
make -k "$BOOTSTRAPCFLAGS" $TARGET
else
make -k "$BOOTSTRAPCFLAGS" $TARGET TOP=$TOP
fi
;;
esac
;;
cde-test)
$CDETEST_BUILD_COMMAND -build $CDETEST_TOP $FLAGS -log $LOG_DIR ;;
esac

View file

@ -0,0 +1,751 @@
#!/bin/ksh
#
# build_summary
#
########################################################################
#set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
PROG_NAME="`basename $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PROG_NAME: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PROG_NAME: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
COMPONENTS_FILES=""
COMPONENTS="all"
DEBUG="False"
SUMMARY_FILES=""
NOT_DONE_SUMMARY_FILES=""
PRINT_ERRORS="5"
usage ()
{
cat <<eof
USAGE: $PROG_NAME
[{-c | -components_file} <file>]
# Specifies a file containing a list of components to
# be extracted. Multiple -c flags can be specified.
[{-e | -errors} <number>]
# Specifies the number of errors shown for each
# component in the components files. Defaults to all.
[-h | -? | -help]
# Print usage and exit
[{-l | -log_path} <path>]
[{-m | -mail | -mail_list} <user_name(s)>]
[{-pn | -project_name} <project_name>]
# The default is CDE. This impacts the Subject field
# when email is sent. Use "-pn X11" to get "X11" in
# the Subject field.
{-s | -summary_file} <file>
# Specifies a summary report from a build_world.
# $PROG_NAME accepts multiple -f flags.
eof
}
##########################################################################
#
# FUNCTION: is_complete_build <summary_file>
#
# Returns 0 if the build is complete.
# Returns 1 if the build is not complete
#
is_complete_build ()
{
typeset SUMMARY_FILE LCMPL
SUMMARY_FILE=$1
LCMPL=`grep "$BTAG_CMPL" $SUMMARY_FILE | tail -1`
if [ -z "$LCMPL" ]; then
return 1
fi
}
###############################################################################
#
# FUNCTION: print_build_start_end ()
#
# ViewName StartTime BuildStatus
# -------- --------- -----------
# cde-dec STARTED: Sun Jan 16, 23:34 FINISHED: Mon Jan 17, 23:34
# cde-hp STARTED: Sun Jan 16, 23:34 BUILDING: making all in ...
# cde-ibm STARTED: Sun Jan 16, 23:34 FINISHED: Mon Jan 17, 23:34
# cde-sco STARTED: Sun Jan 16, 23:34 FINISHED: Mon Jan 17, 23:34
# cde-sgi STARTED: Sun Jan 16, 23:34 FINISHED: Mon Jan 17, 23:34
# cde-sun STARTED: Sun Jan 16, 23:34 FINISHED: Mon Jan 17, 23:34
#
###############################################################################
print_build_start_end ()
{
typeset CMPL LOGD PRJT DATE VIEW
typeset AWK_START_END_SUMMARY
AWK_START_END_SUMMARY='{printf("%-12s %-28s %-28s\n", $1,$2,$3)}'
echo "ViewName StartTime BuildStatus" | awk "$AWK_START_END_SUMMARY"
echo "-------- --------- -----------" | awk "$AWK_START_END_SUMMARY"
for r in $SUMMARY_FILES
do
VIEW=`grep "$BTAG_VIEW" $r | head -1 | awk '{printf("%s", $NF)}'`
DATE=`grep "$BTAG_DATE" $r | head -1 | awk '{printf("%s", $NF)}' FS=+`
is_complete_build $r
if [ $? -eq 0 ]; then
CMPL=`grep "$BTAG_CMPL" $r | tail -1 |
awk '{printf("%s", $NF)}' FS=+`
echo "$VIEW|STARTED: $DATE|FINISHED: $CMPL" | \
awk "$AWK_START_END_SUMMARY" FS="|"
else
LOGD=`grep "$BTAG_LOGD" $r | head -1 | awk '{printf("%s", $NF)}'`
PRJT=`grep "$BTAG_PRJT" $r | tail -1 | awk '{printf("%s", $NF)}'`
LOGF=$LOGD/$PRJT.log
if [ -f $LOGF ]; then
CMPL=`$EXTRACT_MSG -m $BUILD_MSGS -l $LOGF | tail -1`
else
CMPL=""
fi
echo "$VIEW|STARTED: $DATE|BUILDING: $CMPL" | \
awk "$AWK_START_END_SUMMARY" FS="|"
fi
done
print -u1
}
###############################################################################
#
# FUNCTION: print_build_parameters ()
#
# ViewName Type ConfigSpec Platfm Projects
# -------- ---- ---------- ------ --------
# cde-dec clean cde-next.cs dec x11,motif,cde
# cde-hp clean cde-next.cs hp x11,motif,cde
# cde-ibm clean cde-next.cs ibm x11,motif,cde
# cde-sco clean cde-next.cs sco x11,motif,cde
# cde-sgi clean cde-next.cs sgi x11,motif,cde
# cde-sun clean cde-next.cs sun x11,motif,cde
#
# ViewName LogDirectory
# -------- ------------
# cde-dec /project/dt/logs/build/cde-dec/LATEST -> ./Jan.17.12:24:36
# cde-hp /project/dt/logs/build/cde-hp/LATEST -> ./Jan.17.12:24:36
# cde-ibm /project/dt/logs/build/cde-ibm/LATEST -> ./Jan.17.12:24:36
# cde-sco /project/dt/logs/build/cde-sco/LATEST -> ./Jan.17.12:24:36
# cde-sgi /project/dt/logs/build/cde-sgi/LATEST -> ./Jan.17.12:24:36
# cde-sun /project/dt/logs/build/cde-sun/LATEST -> ./Jan.17.12:24:36
#
###############################################################################
print_build_parameters ()
{
typeset CMPL CSPS LOGD PRJT PTFM STRT TYPE VIEW
typeset AWK_LOG_SUMMARY AWK_BUILD_SUMMARY
AWK_LOG_SUMMARY='{printf("%-12s %-48s\n", $1,$2)}'
AWK_BUILD_SUMMARY='{printf("%-12s %-6s %-16s %-14s %-16s\n",$1,$2,$3,$4,$5)}'
#
# Section 1: Type/ConfigSpec/Platform/Projects
#
echo "ViewName Type ConfigSpec Platfm Projects" | awk "$AWK_BUILD_SUMMARY"
echo "-------- ---- ---------- ------ --------" | awk "$AWK_BUILD_SUMMARY"
for r in $SUMMARY_FILES
do
CSPC=`grep "$BTAG_CFGS" $r | head -1 | awk '{printf("%s", $NF)}'`
PRJT=`grep "$BTAG_PRJT" $r | awk '{printf("%s ", $NF)}'`
PTFM=`grep "$BTAG_PTFM" $r | head -1 | awk '{printf("%s", $NF)}'`
TYPE=`grep "$BTAG_TYPE" $r | head -1 | awk '{printf("%s", $NF)}'`
if [ "incremental" = "$TYPE" ]; then
TYPE="incrmt"
fi
VIEW=`grep "$BTAG_VIEW" $r | head -1 | awk '{printf("%s", $NF)}'`
echo "$VIEW|$TYPE|$CSPC|$PTFM|$PRJT" | awk "$AWK_BUILD_SUMMARY" FS="|"
done
print -u1
#
# Section 2: LogDirectory
#
echo "ViewName LogDirectory" | awk "$AWK_LOG_SUMMARY"
echo "-------- ------------" | awk "$AWK_LOG_SUMMARY"
for r in $SUMMARY_FILES
do
LOGD=`grep "$BTAG_LOGD" $r | head -1 | awk '{printf("%s", $NF)}'`
if [ -L $LOGD ]; then
LOGD=`ls -l $LOGD | awk '{printf("%s %s %s", $9, $10, $11)}'`
fi
VIEW=`grep "$BTAG_VIEW" $r | head -1 | awk '{printf("%s", $NF)}'`
echo "$VIEW|$LOGD" | awk "$AWK_LOG_SUMMARY" FS="|"
done
}
###############################################################################
#
# FUNCTION: print_error_and_warning_summaries_by_project ()
#
#
# Project x11 motif cde cdedoc cde-test
# ViewName Errrs Warns Errrs Warns Errrs Warns Errrs Warns Errrs Warns
# -------- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
# build-dec-cde 0 0 0 0 0 554 DNR DNR DNR DNR
# build-hp-cde 0 0 0 0 0 554 DNR DNR DNR DNR
# build-ibm-cde 0 0 0 0 0 554 DNR DNR DNR DNR
# build-sco-cde 0 0 0 0 0 554 DNR DNR DNR DNR
# build-sgi-cde 0 0 0 0 DNR DNR DNR DNR DNR DNR
# build-sun-cde 0 0 0 0 0 554 DNR DNR DNR DNR
#
###############################################################################
print_error_and_warning_summaries_by_project ()
{
BLANKS=" "
PROJ_CDE="cde"
PROJ_CDD="cdedoc"
PROJ_CDT="cde-test"
PROJ_MTF="motif"
PROJ_X11="x11"
AWK_PROJ_HEADER='{printf("%-12s %-12s %-12s %-12s %-12s %-12s\n",$1,$2,$3,$4,$5,$6)}'
AWK_PROJ_VIEWNAME='{printf("%-12s ", $1)}'
AWK_PROJ_SUMMARY='{printf("%5s %5s ", $1, $2)}'
#
# Print the header for this section
#
echo "Project $PROJ_X11 $PROJ_MTF $PROJ_CDE $PROJ_CDD $PROJ_CDT"|awk "$AWK_PROJ_HEADER"
echo "ViewName" | awk "$AWK_PROJ_VIEWNAME"
for p in $PROJ_X11 $PROJ_MTF $PROJ_CDE $PROJ_CDD $PROJ_CDT
do
echo "Errrs Warns" | awk "$AWK_PROJ_SUMMARY"
done
print -u1
echo "--------" | awk "$AWK_PROJ_VIEWNAME"
for p in $PROJ_X11 $PROJ_MTF $PROJ_CDE $PROJ_CDD $PROJ_CDT
do
echo "----- -----" | awk "$AWK_PROJ_SUMMARY"
done
print -u1
#
# Print the error and warning summaries for each view.
#
for r in $SUMMARY_FILES
do
#
# Print the view name.
#
VIEW=`grep "$BTAG_VIEW" $r | head -1 | awk '{printf("%s", $NF)}'`
echo "$VIEW" | awk "$AWK_PROJ_VIEWNAME"
#
# Print the error and warn totals for each project.
#
for p in $PROJ_X11 $PROJ_MTF $PROJ_CDE $PROJ_CDD $PROJ_CDT
do
ERRRS=`grep "^$p " $r | tail -1 | awk '{print $2}'`
WARNS=`grep "^$p " $r | tail -1 | awk '{print $4}'`
if [ -z "$ERRRS" ] -a [ -z "$WARNS" ]
then
echo "DNR DNR" | awk "$AWK_PROJ_SUMMARY"
else
echo "$ERRRS $WARNS" | awk "$AWK_PROJ_SUMMARY"
fi
done
#
# Print a newline.
#
print -u1
done
}
###############################################################################
#
# FUNCTION: print_error_summaries_by_component ()
#
#
# Component DEC HP IBM SCO SGI SUN
# --------- ----- ----- ----- ----- ----- -----
# cde/admin 0 0 0 0 0 5
# cde/lib/DtHelp 5 3 1 0 0 0
# cde/programs/dtwm 10 3 5 0 0 0
#
# cde-test/doc 133 22 1 0 45 0
#
###############################################################################
print_error_summaries_by_component ()
{
AWK_COMP_NAME='{printf("%-32s ", $1)}'
AWK_COMP_ERROR='{printf("%5s ", $1)}'
let num_errors=0
#
# Find the per component errors.
#
for f in $COMPONENTS_FILES
do
#
# Extract the project name from the name of the components file.
# Assumes the components files are named <project>.components.
#
p=`basename $f | awk '{ print $1 }' FS='.'`
for c in `cat $f`
do
#
# Collect the errors for the current component from the report
# summary files and put them in an array.
#
let i=0
FOUND="False"
for r in $SUMMARY_FILES
do
ERRORS[i]=`grep "$p/$c " $r | tail -1 | awk '{print $2}'`
#
# The search may have succeeded but the component may
# only have warnings and no errors. If this is true,
# then this component should not be added to the error
# list
#
if [ ! -z "`echo ${ERRORS[i]}`" ]; then
if [ "`echo ${ERRORS[i]}`" != "0" ]; then
FOUND="True"
fi
fi
let i=i+1
done
#
# If the component doesn't show up anywhere ignore it.
#
if [ -z "`echo ${ERRORS[*]}`" -o "False" = "$FOUND" ]
then
continue
fi
let num_errors=num_errors+1
if [ num_errors -eq 1 ]; then
#
# Print the header for this section
#
echo "Component" | awk "$AWK_COMP_NAME"
for r in $SUMMARY_FILES
do
PTFM=`grep "$BTAG_PTFM" $r | head -1 | awk '{printf("%s", $NF)}'`
echo "$PTFM" | awk "$AWK_COMP_ERROR"
done
print -u1
echo "---------" | awk "$AWK_COMP_NAME"
for r in $SUMMARY_FILES
do
echo "-----" | awk "$AWK_COMP_ERROR"
done
print -u1
fi
#
# Print the component name including the project it belongs to.
#
echo "$p/$c" | awk "$AWK_COMP_NAME"
#
# Print the errors for this component.
#
for r in $SUMMARY_FILES
do
ERRRS=`grep "$p/$c " $r | tail -1 | awk '{print $2}'`
if [ -z "$ERRRS" ]
then
is_complete_build $r
if [ $? -eq 0 ]; then
ERRRS="0"
else
ERRRS="DNR"
fi
fi
echo "$ERRRS" | awk "$AWK_COMP_ERROR"
done
#
# Print a newline.
#
print -u1
done
done
if [ $num_errors -eq 0 ]; then
print -u1 "NO errors were found."
fi
}
###############################################################################
#
# FUNCTION: print_error_listings_by_component ()
#
# -------------------------------------------------------------------
# - <component-name>
# -------------------------------------------------------------------
# make all in <component-name>...
# error 1
# error 2
# make all in <component-name>/subdir...
# error 3
# error 4
#
###############################################################################
print_error_listings_by_component ()
{
let num_errors=0
for f in $COMPONENTS_FILES
do
#
# Extract the project name from the name of the components file.
# Assumes the components files are named <project>.components.
#
p=`basename $f | awk '{ print $1 }' FS='.'`
for c in `cat $f`
do
#
# Collect the errors for the current component from the
# report summary files and put them in an array.
#
let i=0
FOUND="False"
for r in $SUMMARY_FILES
do
ERRORS[i]=`grep "$p/$c " $r | tail -1 | awk '{print $2}'`
#
# The search may have succeeded but the component may
# only have warnings and no errors. If this is true,
# then this component should not be added to the error
# list
#
if [ ! -z "`echo ${ERRORS[i]}`" ]; then
if [ "`echo ${ERRORS[i]}`" != "0" ]; then
FOUND="True"
fi
fi
let i=i+1
done
#
# If the component doesn't show up anywhere ignore it.
#
if [ -z "`echo ${ERRORS[*]}`" -o "False" = "$FOUND" ]
then
continue
fi
let num_errors=num_errors+1
#
# Print the component name including the project it belongs to.
#
COMP=`echo $c | tr "/" ","`
print -u1 "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
print -u1 "+ COMPONENT: $p/$COMP"
print -u1 "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"
print -u1
#
# Print the errors for this component.
#
for r in $SUMMARY_FILES
do
LOGD=`grep "$BTAG_LOGD" $r | head -1 |
awk '{printf("%s", $NF)}'`
VIEW=`grep "$BTAG_VIEW" $r | head -1 |
awk '{printf("%s", $NF)}'`
ERR_FILE=$LOGD/$p/$COMP.err
if [ -f "$ERR_FILE" ]
then
print -u1 "+"
print -u1 "+ View: $VIEW"
print -u1 "+ Error File: $ERR_FILE"
print -u1 "+"
print -u1
head -$PRINT_ERRORS $ERR_FILE
print -u1
fi
done
#
# Print a newline.
#
print -u1
done
done
if [ num_errors -eq 0 ]; then
print -u1 "NO errors were found."
fi
}
#############################################################################
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="True"
shift 1 ;;
-c | -components_file)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
COMPONENTS_FILES="$COMPONENTS_FILES $2"
shift 2 ;;
-e | -errors)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
PRINT_ERRORS="$2"
shift 2 ;;
-h | "-?" | -help)
usage $PROG_NAME
do_exit 1 ;;
-l | -log_path )
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
LOG_PATH=$2
shift 2 ;;
-m | -mail | -mail_list)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
MAIL_LIST=$2
shift 2 ;;
-pn | -project_name)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
# Change the value of SUBJECT_BUILD_SUMMARY
SUBJECT_BUILD_SUMMARY="${2}: Build Summary"
shift 2 ;;
-s | -summary_file)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
SUMMARY_FILES="$SUMMARY_FILES $2"
shift 2 ;;
*)
print -u2 "$PROG_NAME: invalid option $1; exiting ..."
do_exit 1 ;;
esac
done
#############################################################################
#
# Check to make sure that the command-line parameters make sense.
#
for f in $COMPONENTS_FILES
do
if [ ! -f $f ]
then
print -u2 "$PROG_NAME: Component file \"$f\" does not exist."
print -u2 "$PROG_NAME: exiting ..."
do_exit 1
fi
done
if [ -z "$SUMMARY_FILES" ]
then
print -u2 "$PROG_NAME: No report summaries specified; exiting ..."
do_exit 1
fi
#############################################################################
#
# Determine which builds never started or never completed.
#
NOT_AVAILABLE_SUMMARY_FILES=""
AVAILABLE_SUMMARY_FILES=""
for r in $SUMMARY_FILES
do
if [ ! -f $r ]; then
if [ -z "$NOT_AVAILABLE_SUMMARY_FILES" ]; then
NOT_AVAILABLE_SUMMARY_FILES="$r"
else
NOT_AVAILABLE_SUMMARY_FILES="$NOT_AVAILABLE_SUMMARY_FILES $r"
fi
else
if [ -z "$AVAILABLE_SUMMARY_FILES" ]; then
AVAILABLE_SUMMARY_FILES="$r"
else
AVAILABLE_SUMMARY_FILES="$AVAILABLE_SUMMARY_FILES $r"
fi
fi
done
SUMMARY_FILES="$AVAILABLE_SUMMARY_FILES"
#
# Redirect output
#
EXECUTIVE_SUMMARY_LOG=/tmp/$PROG_NAME.execsum.$$
if [ "$DEBUG" = "False" ]; then
do_register_temporary_file $EXECUTIVE_SUMMARY_LOG
touch $EXECUTIVE_SUMMARY_LOG
exec 9>&1
exec > $EXECUTIVE_SUMMARY_LOG
fi
#############################################################################
#
# Header information
#
DATE=`date "$BTAG_DFMT"`
print -u1 " BUILD SUMMARY FOR: $DATE"
print -u1 " +++++++++++++++++++++++++++++++++++++"
print -u1
for r in $NOT_AVAILABLE_SUMMARY_FILES
do
print -u1 "Missing build summary: $r\n"
done
print -u1
print_error_and_warning_summaries_by_project
print -u1
print_build_start_end
print -u1
print -u1
print -u1 " BUILD PARAMETERS"
print -u1 " ++++++++++++++++"
print -u1
print -u1
print_build_parameters
print -u1
print -u1
print -u1 " ERROR SUMMARIES BY COMPONENT"
print -u1 " ++++++++++++++++++++++++++++"
print -u1
print -u1
print_error_summaries_by_component
#############################################################################
#
# Find the per component errors.
#
if [ $PRINT_ERRORS -gt 0 ]; then
print -u1
print -u1
print -u1 " ERROR LISTINGS BY COMPONENT"
print -u1 " +++++++++++++++++++++++++++"
print -u1
print -u1
print_error_listings_by_component
fi
##########################################################################
#
# Complete the build summary and mail it, save it, or dump it to stdout
#
if [ "" != "$MAIL_LIST" ]; then
mailx -s "$SUBJECT_BUILD_SUMMARY (`date $SUBJECT_DATE`) [Report #${REPORT_NUM}]" "$MAIL_LIST" < $EXECUTIVE_SUMMARY_LOG
fi
if [ "" != "$LOG_PATH" ]; then
cp $EXECUTIVE_SUMMARY_LOG $LOG_PATH
fi
if [ "$DEBUG" = "False" -a "" = "$MAIL_LIST" -a "" = "$LOG_PATH" ]; then
exec >&9
cat $EXECUTIVE_SUMMARY_LOG
fi
for r in $SUMMARY_FILES
do
is_complete_build $r
if [ $? -ne 0 ]; then
#
# Clean up temporary files and exit
#
do_exit 1
fi
done
#############################################################################
#
# Clean up temporary files and exit
#
do_exit 0

View file

@ -0,0 +1,124 @@
#!/bin/ksh
#
# build_summary_cron
#
########################################################################
#set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
PROG_NAME="`basename $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
BUILD_SUMMARY_ARGS=""
DEBUG="False"
MAIL_LIST=""
let RETRIES=4
let SLEEP_SECONDS=3600
let REPORT_NUM=1
usage ()
{
cat <<eof
USAGE: $PROG_NAME
[-retries <#_retries>]
[-sleep <#_seconds>]
[-h | -? | -help]
# Print usage and exit
#
# '$PROG_NAME' calls 'build_summary' to construct the report.
#
# If 'build_summary' returns an error code indicating
# that some of the specified builds have not completed,
# '$PROG_NAME' will put itself to sleep for 3600 seconds
# before trying again up to a maximum of 4 times.
# The number of retries and the sleep time can be altered
# using the '-retries' and '-sleep' options.
#
# Any command-line options not recognized by '$PROG_NAME' are
# passed to 'build_summary'.
#
# Any output from 'build_summary' is passed to the users
# specified in the '-mail' option.
eof
}
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="True"
shift ;;
-h | -help | '-?')
usage $PROG_NAME
do_exit 1 ;;
-retries)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
let RETRIES=$2
shift 2 ;;
-sleep)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
let SLEEP_SECONDS=$2
shift 2 ;;
*)
BUILD_SUMMARY_ARGS="$BUILD_SUMMARY_ARGS $1"
shift 1 ;;
esac
done
while [[ $RETRIES -ge 0 ]]
do
$BUILD_SUMMARY $BUILD_SUMMARY_ARGS
STATUS=$?
if [ $STATUS -eq 0 ]; then
#
# Clean up temporary files and exit
#
do_exit 0
fi
let REPORT_NUM=REPORT_NUM+1
let RETRIES=RETRIES-1
if [[ $RETRIES -ge 0 ]]; then
sleep $SLEEP_SECONDS
fi
done
#
# Clean up temporary files and exit
#
do_exit 1

View file

@ -0,0 +1,662 @@
#!/bin/ksh
#
# build_world
#
########################################################################
# set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
PROJECT_NAME="dt"
BUILD_TYPE=""
LOG_DIR=""
MAIL_LIST=""
PRE_BUILD=""
POST_BUILD=""
TOP=""
PROG_NAME="$0"
LOG_DATE="`date +%h.%d,%H:%M:%S`"
TMP_LOG_DIR_BASE=/project/dt/logs/build #Need to define now for usage()
VIEW_TAG="`uname -s`:no_view_specified"
X_PROJECT=x11
MOTIF_PROJECT=motif
CDE_PROJECT=cde
CDEDOC_PROJECT=cdedoc
CDETEST_PROJECT=cde-test
BUILD=build
DO_X_BUILD="False"
DO_MOTIF_BUILD="False"
DO_CDE_BUILD="False"
DO_CDEDOC_BUILD="False"
DO_REDIRECT_IO="True"
DO_CDETEST_BUILD="False"
DO_DEBUG="False"
DO_NOT_BUILD="False"
DO_COMPONENT_LOGS="True"
DO_ERROR_FILES="True"
DO_WARNING_FILES="True"
##########################################################################
usage ()
{
cat <<eof
USAGE: $1
[-e | -dev] # Default: build x11, motif and cde
[-x | -x11] # Build x11 only
[-m | -motif] # Build motif only
[-c | -cde] # Build cde only
[-d | -cdedoc] # Build cde docs only
[-t | -cdetest] # Build cde tests only
[-a | -all] # Build x11, motif, cde, cdedoc and cdetest
[-no_build] # Dont build anything
[-no_complogs] # Dont create .log files for components
[-no_errors] # Dont create .err files
[-no_ioredirect]# Dont redirect stdout/stderr to build.log
[-no_warnings] # Dont create .wrn files
[-rpt_summary]
# Only print information used by
# build_summary to stdout. Equivalent to
# -no_build -no_complogs -no_errors -no_warnings
[-clean] # Do a clean build; default is incremental
[-debug] # Debugging output
[-pre <script_name>]
# script_name is a program that is run before the
# build is run.
[-post <script_name>]
# script_name is a program that is run after the
# build is run.
[{-v | -view | -view_tag} <view_tag>]
# The ClearCase view should always be set before
# this script is run. This option should only
# be used on systems where ClearCase is not installed.
# The view tag will be used when constructing the
# log directory name.
[{-ld | -log_dir} <directory>]
# Specify an alternate log directory.
# Default: $TMP_LOG_DIR_BASE/<view_tag>/<date>/
# <date> is of the format '$LOG_DATE'
[{-sd | -script_dir} <directory>]
# Specify an alternate directory for required files.
# Default: $SCRIPTS_DIR/
[{-pn | -project_name} project_name]
# Specifies the project name used in the log dir.
# The default log dir is is /project/dt/...
# Use this option (-pn x11) for X11 only builds to
# get logs in /project/x11/...
[-top <dir_name>]
# Use this to over-ride the default TOP directory
# for a project. There is NO default.
[{-mail | mail_list} <user_names>]
[-h | -? | -help] # Print usage and exit
eof
}
##########################################################################
while [ $# -gt 0 ]; do
case $1 in
-e | -dev) DO_X_BUILD="True"
DO_MOTIF_BUILD="True"
DO_CDE_BUILD="True"
shift 1 ;;
-x | -x11) DO_X_BUILD="True"
shift 1 ;;
-m | -motif) DO_MOTIF_BUILD="True"
shift 1 ;;
-c | -cde) DO_CDE_BUILD="True"
shift 1 ;;
-d | -cdedoc) DO_CDEDOC_BUILD="True"
shift 1 ;;
-t | -cdetest) DO_CDETEST_BUILD="True";
shift 1 ;;
-a | -all) DO_X_BUILD="True"
DO_MOTIF_BUILD="True"
DO_CDE_BUILD="True"
DO_CDEDOC_BUILD="True"
DO_CDETEST_BUILD="True"
shift 1 ;;
-no_build) DO_NOT_BUILD="True"; shift 1 ;;
-no_complogs) DO_COMPONENT_LOGS="False"; shift 1 ;;
-no_errors) DO_ERROR_FILES="False"; shift 1 ;;
-no_ioredirect) DO_REDIRECT_IO="False"; shift 1 ;;
-no_warnings) DO_WARNING_FILES="False"; shift 1 ;;
-rpt_summary) DO_NOT_BUILD="True"
DO_COMPONENT_LOGS="False"
DO_ERROR_FILES="False"
DO_WARNING_FILES="False"
shift 1;;
-clean) BUILD_TYPE="clean"; shift 1 ;;
-debug) DO_DEBUG="True"
DO_REDIRECT_IO="False"; shift 1 ;;
-ld | -log_dir) LOG_DIR=$2; shift 2 ;;
-v | -view | -view_tag) VIEW_TAG=$2; shift 2 ;;
-sd | -script_dir) SCRIPTS_DIR=$2;
export SCRIPTS_DIR;
shift 2 ;;
-pre) PRE_BUILD=$2; shift 2 ;;
-post) POST_BUILD=$2; shift 2 ;;
-top) TOP=$2; shift 2 ;;
-pn | -project_name) PROJECT_NAME=$2; shift 2 ;;
-mail | -mail_list) MAIL_LIST=$2; shift 2 ;;
-h | "-?" | -help | *) usage $PROG_NAME;
exit 1;
esac
done
##########################################################################
#
# Script setup: Do this after the command line parsing to pick up
# an alternate setting of SCRIPTS_DIR
#
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
do_check_file $BUILD_PROJECT -x "NOT found"
do_check_file $EXTRACT_LOG -x "NOT found"
do_check_file $EXTRACT_MSG -x "NOT found"
do_check_file $CDE_COMPONENTS -f "NOT found"
do_check_file $ERROR_MSGS -f "NOT found"
do_check_file $WARNING_MSGS -f "NOT found"
##########################################################################
#
# Exit if $CLEAR_CASE_TOOL is installed and no view is set
#
if [ -x $CLEAR_CASE_TOOL ]; then
$CLEAR_CASE_TOOL pwv | grep 'Set view' | grep NONE > /dev/null
if [ $? -eq 0 ]; then
print -u2 "Exiting ... No ClearCase view is set!"
do_exit 1
fi
VIEW_TAG="`$CLEAR_CASE_TOOL pwv -short`"
else
#
# Some systems don't have $CLEAR_CASE_TOOL so we need to
# work around it. Just output a warning for now.
#
print -u2 "$PROG_NAME: Warning: '$CLEAR_CASE_TOOL' is NOT installed."
fi
##########################################################################
#
# If no project was selected, then build the 'dev' projects
#
if [ "False" = $DO_X_BUILD -a "False" = $DO_MOTIF_BUILD -a "False" = $DO_CDE_BUILD -a "FALSE" = $DO_CDEDOC_BUILD -a "False" = $DO_CDETEST_BUILD ]; then
DO_X_BUILD="True"
DO_MOTIF_BUILD="True"
DO_CDE_BUILD="True"
fi
##########################################################################
#
# If $INITIALIZE_VIEW is present, run it
#
if [ -x $INITIALIZE_VIEW -a "$X_PROJECT" != "$PROJECT_NAME" ]; then
$INITIALIZE_VIEW > /dev/null 2>&1
fi
##########################################################################
#
# Set the log dir and log file for the project logs
#
# Put all undirected stdout and stderr in a separate log file
#
if [ "" = "$LOG_DIR" ]; then
LOG_DIR=$LOG_DIR_BASE/$VIEW_TAG/$LOG_DATE
if [ -L $LOG_DIR_BASE/$VIEW_TAG/LATEST ]; then
rm $LOG_DIR_BASE/$VIEW_TAG/LATEST
fi
ln -s ./$LOG_DATE $LOG_DIR_BASE/$VIEW_TAG/LATEST
fi
SUMM_FILE=$LOG_DIR/build.summary
if [ ! -d $LOG_DIR ]; then
mkdir -p $LOG_DIR
chmod 775 $LOG_DIR
fi
if [ "True" = "$DO_REDIRECT_IO" ]; then
BUILD_LOG=$LOG_DIR/$BUILD.log
BUILD_LOG_REDIRECT="-e $BUILD_LOG"
rm -f $BUILD_LOG && touch $BUILD_LOG
exec >> $BUILD_LOG
exec 2>> $BUILD_LOG
else
BUILD_LOG_REDIRECT=""
fi
##########################################################################
#
# Build a project
#
do_build ()
{
#
# $1 = the project name
# $2 = [optional] command line options for $BUILD_PROJECT
# $3 = [optional] value for command line option $2
#
print -u1 "building in $1..."
DATE=`date +"$BTAG_DFMT"`
if [ "True" = $DO_NOT_BUILD ]; then
print -u1 "$BTAG_STRT $1: $DATE" >> $SUMM_FILE
print -u1 "$BTAG_PRJT = $1" >> $SUMM_FILE
print -u1 "$BTAG_ENDD $1: $DATE" >> $SUMM_FILE
return
fi
#
# if building cde tests, write to cde-test-summary.log and
# not cde-test.log since cde-test.log will be created by the
# test-build program.
#
if [ "$CDETEST_PROJECT" = "$1" ]; then
LOG_FILE=$LOG_DIR/$1-summary.log
else
LOG_FILE=$LOG_DIR/$1.log
fi
print -u1 "$BTAG_STRT $1: $DATE" >> $SUMM_FILE
print -u1 "$BTAG_PRJT = $1" >> $SUMM_FILE
print -u1 "$BTAG_LOGF = $LOG_FILE" >> $SUMM_FILE
print -u1 "$BTAG_STRT $1: $DATE" > $LOG_FILE
print -u1 "$BTAG_PRJT = $1" >> $LOG_FILE
print -u1 "$BTAG_LOGF = $LOG_FILE" >> $LOG_FILE
print -u1 "$BTAG_SYST = `uname -a`" >> $LOG_FILE
print -u1 "$BTAG_VIEW = $VIEW_TAG" >> $LOG_FILE
if [ "" = "$BUILD_TYPE" ]; then
print -u1 "$BTAG_TYPE = incrmt" >> $LOG_FILE
else
print -u1 "$BTAG_TYPE = $BUILD_TYPE" >> $LOG_FILE
fi
if [ -x $CLEAR_CASE_TOOL ]; then
$CLEAR_CASE_TOOL catcs >> $LOG_FILE
fi
if [ "" != "$PRE_BUILD" -a -x "$PRE_BUILD" ]; then
print -u1 "Running pre-build script '$PRE_BUILD'." >> $LOG_FILE
$PRE_BUILD >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
print -u2 "\nThe pre_build script '$PRE_BUILD' failed."
print -u2 "Aborting the build!\n"
do_exit 1
fi
fi
if [ "" = "$2" ]; then
if [ "" = "$BUILD_TYPE" ]; then
if [ "" = "$TOP" ]; then
$BUILD_PROJECT -p $1 >> $LOG_FILE 2>&1
else
$BUILD_PROJECT -top "$TOP" -p $1 >> $LOG_FILE 2>&1
fi
else
if [ "" = "$TOP" ]; then
$BUILD_PROJECT -p $1 -"$BUILD_TYPE" >> $LOG_FILE 2>&1
else
$BUILD_PROJECT -top "$TOP" -p $1 -"$BUILD_TYPE" >> $LOG_FILE 2>&1
fi
fi
else
if [ "" = "$BUILD_TYPE" ]; then
if [ "" = "$TOP" ]; then
$BUILD_PROJECT -p $1 "$2" "$3" >> $LOG_FILE 2>&1
else
$BUILD_PROJECT -top "$TOP" -p $1 "$2" "$3" >> $LOG_FILE 2>&1
fi
else
if [ "" = "$TOP" ]; then
$BUILD_PROJECT -p $1 -"$BUILD_TYPE" "$2" "$3" >> $LOG_FILE 2>&1
else
$BUILD_PROJECT -top "$TOP" -p $1 -"$BUILD_TYPE" "$2" "$3" >> $LOG_FILE 2>&1
fi
fi
fi
if [ "" != "$POST_BUILD" -a -x "$POST_BUILD" ]; then
print -u1 "Running post-build script '$POST_BUILD'." >> $LOG_FILE
$POST_BUILD >> $LOG_FILE 2>&1
fi
DATE=`date +"$BTAG_DFMT"`
print -u1 "$BTAG_ENDD $1: $DATE" >> $LOG_FILE
print -u1 "$BTAG_ENDD $1: $DATE\n" >> $SUMM_FILE
}
##########################################################################
#
# do_summary -
#
do_summary ()
{
#
# $1 = the project name
# $2 = the log file
#
PROJECT=$1
LOG_FILE=$2$3
ERR_FILE=$2$4
WRN_FILE=$2$5
print -u1 extracting errors and warnings in $PROJECT...
ERR=`$EXTRACT_MSG \
-m $ERROR_MSGS \
-i $WARNING_MSGS -i $IGNORE_MSGS \
-l $LOG_FILE $BUILD_LOG_REDIRECT | wc -l`
WARN=`$EXTRACT_MSG \
-m $WARNING_MSGS \
-l $LOG_FILE $BUILD_LOG_REDIRECT | wc -l`
if [ "True" = $DO_ERROR_FILES ]; then
$EXTRACT_MSG \
-m $ERROR_MSGS -m $BUILD_MSGS \
-i $WARNING_MSGS -i $IGNORE_MSGS \
-l $LOG_FILE $BUILD_LOG_REDIRECT | \
$COMPRESS_MSG \
-m $BUILD_MSGS $BUILD_LOG_REDIRECT > $ERR_FILE
fi
if [ "True" = $DO_WARNING_FILES ]; then
$EXTRACT_MSG \
-m $WARNING_MSGS -m $BUILD_MSGS \
-l $LOG_FILE $BUILD_LOG_REDIRECT | \
$COMPRESS_MSG \
-m $BUILD_MSGS $BUILD_LOG_REDIRECT > $WRN_FILE
fi
AWK_PROJECT='{printf("%-32s %5s errors %5s warnings",$1,$2,$3)}'
echo $PROJECT $ERR $WARN | awk "$AWK_PROJECT" >> $SUMM_FILE
print -u1 >> $SUMM_FILE
if [ "True" = "$DO_DEBUG" ]; then
echo $PROJECT $ERR $WARN | awk "$AWK_PROJECT"
print -u1
fi
}
##########################################################################
#
# do_component_summary
#
do_component_summary ()
{
#
# $1 = the project name
# $2 = the project log file
# $3 = the components file
#
PROJECT=$1
PROJECT_LOG_FILE=$2
COMPONENTS_FILE=$3
COMPONENTS_LOG_DIR=$LOG_DIR/$PROJECT
typeset -i TTL_ERR
typeset -i TTL_WARN
AWK_COMPONENT='{printf(" %-32s %5s errors %5s warnings",$1,$2,$3)}'
#
# Separate the log file for the project into log files for the
# individual components. Put them into a subdirectory since
# there may be alot of them.
#
if [ "$DO_COMPONENT_LOGS" = "True" ]; then
if [ ! -d $COMPONENTS_LOG_DIR ]; then
mkdir -p $COMPONENTS_LOG_DIR
chmod 775 $COMPONENTS_LOG_DIR
fi
$EXTRACT_LOG \
-l $PROJECT_LOG_FILE \
-c $COMPONENTS_FILE \
-ld $COMPONENTS_LOG_DIR $BUILD_LOG_REDIRECT
fi
let TTL_ERR=0
let TTL_WARN=0
for COMPONENT in `cat $COMPONENTS_FILE`
do
print -u1 extracting errors and warnings in $PROJECT/$COMPONENT...
COMPONENT_FILE_BASE=`echo $COMPONENT | tr "/" ","`
COMPONENT_LOG_FILE=$COMPONENTS_LOG_DIR/$COMPONENT_FILE_BASE.log
if [ ! -f $COMPONENT_LOG_FILE ]; then
print -u2 $PROG_NAME: Error, $COMPONENT_LOG_FILE not found.
continue
fi
ERR=`$EXTRACT_MSG \
-m $ERROR_MSGS \
-i $WARNING_MSGS -i $IGNORE_MSGS \
-l $COMPONENT_LOG_FILE $BUILD_LOG_REDIRECT | wc -l`
WARN=`$EXTRACT_MSG \
-m $WARNING_MSGS \
-l $COMPONENT_LOG_FILE $BUILD_LOG_REDIRECT | wc -l`
let TTL_ERR=TTL_ERR+ERR
let TTL_WARN=TTL_WARN+WARN
if [ $ERR -ne 0 -o $WARN -ne 0 ]; then
echo $PROJECT/$COMPONENT $ERR $WARN | \
awk "$AWK_COMPONENT" >> $SUMM_FILE
print -u1 >> $SUMM_FILE
if [ "True" = $DO_ERROR_FILES -a $ERR -gt 0 ]; then
COMPONENT_ERR_FILE=$COMPONENTS_LOG_DIR/$COMPONENT_FILE_BASE.err
$EXTRACT_MSG \
-m $ERROR_MSGS -m $BUILD_MSGS \
-i $WARNING_MSGS -i $IGNORE_MSGS \
-l $COMPONENT_LOG_FILE $BUILD_LOG_REDIRECT | \
$COMPRESS_MSG \
-m $BUILD_MSGS $BUILD_LOG_REDIRECT > $COMPONENT_ERR_FILE
fi
if [ "True" = $DO_WARNING_FILES -a $WARN -gt 0 ]; then
COMPONENT_WRN_FILE=$COMPONENTS_LOG_DIR/$COMPONENT_FILE_BASE.wrn
$EXTRACT_MSG \
-m $WARNING_MSGS -m $BUILD_MSGS \
-l $COMPONENT_LOG_FILE $BUILD_LOG_REDIRECT | \
$COMPRESS_MSG \
-m $BUILD_MSGS $BUILD_LOG_REDIRECT > $COMPONENT_WRN_FILE
fi
if [ "True" = "$DO_DEBUG" ]; then
echo $PROJECT/$COMPONENT $ERR $WARN | awk "$AWK_COMPONENT"
print -u1
echo TOTAL $TTL_ERR $TTL_WARN | awk "$AWK_COMPONENT"
print -u1
fi
fi
done
echo $PROJECT-TOTAL $TTL_ERR $TTL_WARN | awk "$AWK_COMPONENT" >> $SUMM_FILE
print -u1 >> $SUMM_FILE
}
##########################################################################
#
# Print header stuff needed for build_summary
#
DATE=`date +"$BTAG_DFMT"`
print -u1 "###################################################" >> $SUMM_FILE
print -u1 "$BTAG_DATE = $DATE" >> $SUMM_FILE
print -u1 "$BTAG_VIEW = $VIEW_TAG" >> $SUMM_FILE
if [ -x $CLEAR_CASE_TOOL ]; then
TMP_FILE_NAME=`$CLEAR_CASE_TOOL catcs | head -1 | awk '{printf "%s\n", $3}'`
if [ -f "$TMP_FILE_NAME" ]; then
print -u1 "$BTAG_CFGS = `$CLEAR_CASE_TOOL catcs | head -1 | awk '{printf "%s\n", $3}'`" >> $SUMM_FILE
else
print -u1 "$BTAG_CFGS = NoSpecFile" >> $SUMM_FILE
fi
else
print -u1 "$BTAG_CFGS = NoClrCase" >> $SUMM_FILE
fi
print -u1 "$BTAG_PTFM = `uname -s`" >> $SUMM_FILE
print -u1 "$BTAG_LOGD = $LOG_DIR" >> $SUMM_FILE
if [ "" = "$BUILD_TYPE" ]; then
print -u1 "$BTAG_TYPE = incrmt" >> $SUMM_FILE
else
print -u1 "$BTAG_TYPE = $BUILD_TYPE" >> $SUMM_FILE
fi
print -u1 "###################################################\n" >> $SUMM_FILE
##########################################################################
#
# Do the builds and Summarize the results
#
if [ "True" = $DO_X_BUILD ]; then
print -u1 "#############################################" >> $SUMM_FILE
do_build $X_PROJECT "" ""
do_summary $X_PROJECT $LOG_DIR/$X_PROJECT .log .err .wrn
do_component_summary \
$X_PROJECT \
$LOG_DIR/$X_PROJECT.log \
$X_COMPONENTS
print -u1 "#############################################\n" >> $SUMM_FILE
fi
if [ "True" = $DO_MOTIF_BUILD ]; then
print -u1 "#############################################" >> $SUMM_FILE
do_build $MOTIF_PROJECT "" ""
do_summary $MOTIF_PROJECT $LOG_DIR/$MOTIF_PROJECT .log .err .wrn
do_component_summary \
$MOTIF_PROJECT \
$LOG_DIR/$MOTIF_PROJECT.log \
$MOTIF_COMPONENTS
print -u1 "#############################################\n" >> $SUMM_FILE
fi
if [ "True" = $DO_CDE_BUILD ]; then
print -u1 "#############################################" >> $SUMM_FILE
do_build $CDE_PROJECT "" ""
do_summary $CDE_PROJECT $LOG_DIR/$CDE_PROJECT .log .err .wrn
do_component_summary \
$CDE_PROJECT \
$LOG_DIR/$CDE_PROJECT.log \
$CDE_COMPONENTS
print -u1 "#############################################\n" >> $SUMM_FILE
fi
if [ "True" = $DO_CDEDOC_BUILD ]; then
print -u1 "#############################################" >> $SUMM_FILE
do_build $CDEDOC_PROJECT "" ""
do_summary $CDEDOC_PROJECT $LOG_DIR/$CDEDOC_PROJECT .log .err .wrn
do_component_summary \
$CDEDOC_PROJECT \
$LOG_DIR/$CDEDOC_PROJECT.log \
$CDEDOC_COMPONENTS
print -u1 "#############################################\n" >> $SUMM_FILE
fi
if [ "True" = "$DO_CDETEST_BUILD" ]; then
print -u1 "#############################################" >> $SUMM_FILE
do_build $CDETEST_PROJECT "-log_dir" "$LOG_DIR"
if [ -f $LOG_DIR/$CDETEST_PROJECT/allmake.* ]; then
ln -s $LOG_DIR/$CDETEST_PROJECT/allmake.* $LOG_DIR/$CDETEST_PROJECT.log
fi
do_summary $CDETEST_PROJECT $LOG_DIR/$CDETEST_PROJECT .log .err .wrn
do_component_summary \
$CDETEST_PROJECT \
$LOG_DIR/$CDETEST_PROJECT.log \
$CDETEST_COMPONENTS
print -u1 "#############################################\n" >> $SUMM_FILE
fi
#print -u1 "###################################################\n" >> $SUMM_FILE
#do_summary $BUILD $LOG_DIR/$BUILD.log
#print -u1 "###################################################\n" >> $SUMM_FILE
##########################################################################
#
# Complete the build summary with the config spec and the $BTAG_CMPL
#
print -u1 "###################################################\n" >> $SUMM_FILE
if [ -x $CLEAR_CASE_TOOL ]; then
$CLEAR_CASE_TOOL catcs >> $SUMM_FILE
fi
print -u1 "###################################################\n" >> $SUMM_FILE
DATE=`date +"$BTAG_DFMT"`
print -u1 "###################################################\n" >> $SUMM_FILE
print -u1 "$BTAG_CMPL: $DATE\n" >> $SUMM_FILE
print -u1 "###################################################\n" >> $SUMM_FILE
##########################################################################
#
# Complete the build summary and mail it or dump it to stdout
#
if [ "" != "$MAIL_LIST" ]; then
mailx -s "$SUBJECT_BUILD_COMPLETE - $VIEW_TAG (`date $SUBJECT_DATE`)" "$MAIL_LIST" < $SUMM_FILE
else
cat $SUMM_FILE
fi
#
# Clean up temporary files and exit
#
do_exit 0

View file

@ -0,0 +1,348 @@
#!/bin/ksh
#
# cc_checkedout
#
########################################################################
# set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
PROG_NAME="`basename $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PROG_NAME: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PROG_NAME: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
#
# Script specific global variables
#
COMPONENTS_FILES=""
COMPONENTS=""
DEBUG="False"
DO_DELETE="True"
DO_LISTING="True"
DO_SUMMARY="True"
DO_TMPFILE="True"
HAVE_EVENTS="True"
CHECKEDOUT_LOG=""
LOG_PATH=""
MAIL_LIST=""
PROG_NAME="`basename $0`"
WHAT_TO_SEARCH="-avobs"
##########################################################################
#
# FUNCTION: do_executive_summary ()
#
do_executive_summary ()
{
AWK_EXEC_CO_SUMMARY='{printf("%-40s [CheckedOut= %-3s; Users= ", $1,$2)}'
AWK_EXEC_USER_SUMMARY='{printf("%s ", $1)}'
AWK_EXEC_TERM_SUMMARY='{printf("]\n")}'
COMPONENT=$1
if [ "True" = "$DEBUG" ]; then
print -u2 "summarizing events in $COMPONENT"
fi
TOTAL_CHECKEDOUT=`$EXTRACT_MSG -l $CHECKEDOUT_LOG $COMPONENT | wc -l |
awk '{printf("%s",$1)}'`
if [ $TOTAL_CHECKEDOUT -ne 0 ]; then
USERS=`$EXTRACT_MSG -l $CHECKEDOUT_LOG $COMPONENT |
awk '{ print $1 }' FS="::" | sort | uniq`
echo "$COMPONENT $TOTAL_CHECKEDOUT" | awk "$AWK_EXEC_CO_SUMMARY"
for u in $USERS
do
echo "$u" | awk "$AWK_EXEC_USER_SUMMARY"
done
echo "" | awk "$AWK_EXEC_TERM_SUMMARY"
fi
}
##########################################################################
#
# FUNCTION: usage ()
#
usage ()
{
cat <<eof
USAGE: $PROG_NAME
[-d | -debug] # Print output to stdout
[-h | -? | -help] # Print usage and exit
[{-l | -log_path} <file>] # Specifies the output file for the report.
[{-m | -mail | -mail_list} <user_name(s)>]
[{-t | -tmpfile} <file>] # Specifies the tmp file to be extracted from.
[{-w | -what | -what_to_search} <option or directory>]
# The default is: $WHAT_TO_SEARCH
[-no_delete]
[-no_listing]
[-no_summary]
# '$PROG_NAME' calls clearcase commands to determine which files
# are currently checked out and then delivers the report. The
# report can be sent to a list of mail recipients, or a log file
# or both. If neither is specified, the report is sent to stdout
# by default.
eof
}
######################################################################
#
# Exit if no view is set
#
$CLEAR_CASE_TOOL pwv | grep 'Set view' | grep NONE > /dev/null
if [ $? -eq 0 ]; then
print -u2 "$PROG_NAME: Exiting ... NO ClearCase view is set!"
exit 1
fi
##########################################################################
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="True"
shift 1 ;;
-h | -? | -help)
usage $PROG_NAME
do_exit 1 ;;
-l | -log_path)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
LOG_PATH=$2
shift 2 ;;
-m | -mail | -mail_list)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
MAIL_LIST=$2
shift 2 ;;
-t | -tmpfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
DO_TMPFILE="false"
CHECKEDOUT_LOG=$2
shift 2 ;;
-w | -what | -what_to_search)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
WHAT_TO_SEARCH=$2
shift 2 ;;
-no_listing)
DO_LISTING="False"
shift 1 ;;
-no_summary)
DO_SUMMARY="False"
shift 1 ;;
-no_delete)
DO_DELETE="False"
shift 1 ;;
*)
usage $PROG_NAME
do_exit 1 ;;
esac
done
if [ "True" = "$DO_TMPFILE" ]; then
CHECKEDOUT_LOG=/tmp/$PROG_NAME.checkedout.$$
CHECKEDOUT_LOG_PRIME=/tmp/$PROG_NAME.checkedout.1.$$
do_register_temporary_file $CHECKEDOUT_LOG
do_register_temporary_file $CHECKEDOUT_LOG_PRIME
#
# First get the list of files
#
$CLEAR_CASE_TOOL lsco -fmt "%u %n %f\n" $WHAT_TO_SEARCH > $CHECKEDOUT_LOG
#
# Since it is possible for more than one person to have a
# file checked-out must get all locks. Note that it also
# desireable to get each user's comments attached to the
# checkout.
#
cat $CHECKEDOUT_LOG | while read LINE; do
FILE="`echo $LINE | awk '{printf "%s", $2}'`"
$CLEAR_CASE_TOOL lsco -d -fmt "%u::%Ad::days::%Tf::(%Rf)::%n::%f\n" \
$FILE >> $CHECKEDOUT_LOG_PRIME
done
#
# Sort the files and remove dups.
#
sort $CHECKEDOUT_LOG_PRIME | uniq > $CHECKEDOUT_LOG
cp $CHECKEDOUT_LOG $CHECKEDOUT_LOG_PRIME
sed -e 's/\.cde-1/cde/
s/\.cde-2/cde/
s/\.cde-3/cde/
s/\.cde-test-1/cde-test/
s/\.cde-test-2/cde-test/
s/\.cde-test-3/cde-test/
s/\.motif-1/motif/
s/\.motif-2/motif/' $CHECKEDOUT_LOG_PRIME > $CHECKEDOUT_LOG
fi
PROJECTS="cde cde-contrib cde-cts cde-misc cde-test cde-test-misc
motif motif-cts motif-misc x11/misc x11/unsupported x11"
#
# Redirect output
#
if [ "$DEBUG" = "False" ]; then
EXECUTIVE_SUMMARY_LOG=/tmp/$PROG_NAME.execsum.$$
do_register_temporary_file $EXECUTIVE_SUMMARY_LOG
touch $EXECUTIVE_SUMMARY_LOG
exec 9>&1
exec > $EXECUTIVE_SUMMARY_LOG
fi
DATE=`date "$BTAG_DFMT"`
print -u1 " CLEARCASE CHECKEDOUT SUMMARY FOR: $DATE"
print -u1 " ++++++++++++++++++++++++++++++++++++++++++++++++++++"
print -u1
print -u1
if [ ! -s $CHECKEDOUT_LOG ]; then
if [ "$DEBUG" = "True" ]; then
print -u1 "Log file '$CHECKEDOUT_LOG' is empty"
fi
HAVE_EVENTS="False"
print -u1 "NO events were found."
fi
if [ "True" = "$DO_SUMMARY" -a "True" = "$HAVE_EVENTS" ]; then
for p in $PROJECTS
do
COMPONENTS_FILE=$SCRIPTS_DIR/$p.components
if [ -f $COMPONENTS_FILE ]; then
#
# Correct for the missing 'xc' subdirectory in x11.components
#
if [ "$p" = "x11" ]; then
p=x11/xc
fi
for c in `cat $COMPONENTS_FILE`
do
do_executive_summary /proj/$p/$c
done
else
do_executive_summary /proj/$p
fi
done
fi
if [ "True" = "$DO_LISTING" -a "True" = "$HAVE_EVENTS" ]; then
print -u1
print -u1
print -u1 " CLEARCASE CHECKEDOUT LISTING"
print -u1 " ++++++++++++++++++++++++++++"
print -u1
print -u1
cat $CHECKEDOUT_LOG | while read LINE; do
USER="`echo $LINE | awk '{FS="::"; printf "%s", $1}'`"
FILE="`echo $LINE | awk '{FS="::"; printf "%s", $6}'`"
echo $LINE | \
sed '/::1::days/s//::1:: day/' | \
sed '/\(unreserved\)/s//U/' | \
sed '/\(reserved\)/s//R/' | \
awk '{ FS="::"; printf "%-8s %3d %s %s %s\n %s@@%s\n", $1,$2,$3,$4,$5,$6,$7 }'
#
# Attach the WIP if present
#
WIP="`$CLEAR_CASE_TOOL lsco -d -user $USER -fmt '%[WIP]a' $FILE`"
if [ "" != "$WIP" ]; then
print -u1 " $WIP"
fi
#
# Attach the (possibly mult-line) comment
#
$CLEAR_CASE_TOOL lsco -d -user $USER -fmt "%c" $FILE \
| awk '{printf " %s\n", $0}'
done
fi
#####################################################################
#
# If no files were found, create a descriptive message; else
# tack on a legend
#
if [ ! -s $CHECKEDOUT_LOG ]; then
print -u1 "NO files are checked out!"
else
mv $CHECKEDOUT_LOG_PRIME $CHECKEDOUT_LOG
print -u1 "\n(R) = reserved checkout"
print -u1 "(U) = unreseved checkout"
fi
##########################################################################
#
# Complete the build summary and deliver it
#
if [ "" != "$MAIL_LIST" ]; then
mailx -s "$SUBJECT_CHECKOUTS (`date $SUBJECT_DATE`)" "$MAIL_LIST" < \
$EXECUTIVE_SUMMARY_LOG
fi
if [ "" != "$LOG_PATH" ]; then
cp $EXECUTIVE_SUMMARY_LOG $LOG_PATH
fi
if [ "$DEBUG" = "False" -a "" = "$MAIL_LIST" -a "" = "$LOG_PATH" ]; then
exec >&9
cat $EXECUTIVE_SUMMARY_LOG
fi
##########################################################################
#
# Clean up temporary files and exit
#
if [ "True" = "$DO_DELETE" ]; then
do_exit 0
fi
exit 0

View file

@ -0,0 +1,334 @@
#!/bin/ksh
#
# cc_submissions
#
########################################################################
# set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
PROG_NAME="`basename $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
#
# Script specific global variables
#
COMPONENTS_FILES=""
COMPONENTS=""
DEBUG="False"
DO_DELETE="True"
DO_LISTING="True"
DO_TMPFILE="True"
DO_SUMMARY="True"
INCLUDE_ROOT="False"
SUBMISSION_LOG=""
MAIL_LIST=""
NULLSUBDIRECTORY="__XXX__"
HAVE_EVENTS="True"
##########################################################################
#
# FUNCTION: do_executive_summary ()
#
do_executive_summary ()
{
AWK_EXEC_EVENT_SUMMARY='{printf("%-40s [Events= %-3s; Users= ", $1,$2)}'
AWK_EXEC_USER_SUMMARY='{printf("%s ", $1)}'
AWK_EXEC_TERM_SUMMARY='{printf("]\n")}'
COMPONENT=$1
if [ "True" = "$DEBUG" ]; then
print -u2 "summarizing events in $COMPONENT"
fi
TOTAL_EVENTS=`$EXTRACT_MSG -l $SUBMISSION_LOG $COMPONENT | wc -l |
awk '{printf("%s",$1)}'`
if [ $TOTAL_EVENTS -ne 0 ]; then
USERS=`$EXTRACT_MSG -l $SUBMISSION_LOG $COMPONENT |
awk '{ print $3 }' FS="|" | sort | uniq`
# for u in $USERS
# do
# USER_EVENTS=`$EXTRACT_MSG -l $SUBMISSION_LOG $COMPONENT |
# grep "$FS$u$FS" | wc -l`
# echo "$u $USER_EVENTS" | awk "$AWK_EXEC_SUMMARY"
# done
echo "$COMPONENT $TOTAL_EVENTS" | awk "$AWK_EXEC_EVENT_SUMMARY"
for u in $USERS
do
echo "$u" | awk "$AWK_EXEC_USER_SUMMARY"
done
echo "" | awk "$AWK_EXEC_TERM_SUMMARY"
fi
}
##########################################################################
#
# FUNCTION: do_listing_summary ()
#
do_listing_summary ()
{
AWK_LIST_SUMMARY='{printf("%s\n User=%-12s Event=%-16s DDTS=%8s \n Comment='%s'\n",$2,$3,$4,$5,$7)}'
COMPONENT=$1
if [ "True" = "$DEBUG" ]; then
print -u2 "listing events in $COMPONENT"
fi
TOTAL_EVENTS=`$EXTRACT_MSG -l $SUBMISSION_LOG $COMPONENT | wc -l`
if [ $TOTAL_EVENTS -ne 0 ]; then
print -u1 "+"
print -u1 "+ Events In: $COMPONENT"
print -u1 "+"
$EXTRACT_MSG -l $SUBMISSION_LOG $COMPONENT | \
awk "$AWK_LIST_SUMMARY" FS="|"
fi
}
##########################################################################
#
# FUNCTION: usage ()
#
usage ()
{
cat <<eof
USAGE: $1
[-h | -? | -help] # Print usage and exit
[{-m | -mail | -mail_list} <user_name(s)>]
[{-t | -tmpfile} <file>] # Specifies the log file to be extracted from.
[-include_root]
[-no_delete]
[-no_listing]
[-no_summary]
# '$PROG_NAME' calls clearcase commands to determine which files
# were submitted in the last 24 hours and then delivers the report.
# The report can be sent to a list of mail recipients, or a log file
# or both. If neither is specified, the report is sent to stdout
# by default.
eof
}
##########################################################################
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="True"
shift 1 ;;
-h | -? | -help)
usage $PROG_NAME
do_exit 1 ;;
-l | -log_path)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
LOG_PATH=$2
shift 2 ;;
-m | -mail | -mail_list)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
MAIL_LIST=$2
shift 2 ;;
-t | -tmpfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
DO_TMPFILE="false"
SUBMISSION_LOG=$2
shift 2 ;;
-include_root)
INCLUDE_ROOT="True"
shift 1 ;;
-no_listing)
DO_LISTING="False"
shift 1 ;;
-no_summary)
DO_SUMMARY="False"
shift 1 ;;
-no_delete)
DO_DELETE="False"
shift 1 ;;
*)
usage $PROG_NAME
do_exit 1 ;;
esac
done
if [ "True" = "$DO_TMPFILE" ]; then
SUBMISSION_LOG=/tmp/$PROG_NAME.lshistory.$$
SUBMISSION_LOG_PRIME=/tmp/$PROG_NAME.lshistory.1.$$
do_register_temporary_file $SUBMISSION_LOG
do_register_temporary_file $SUBMISSION_LOG_PRIME
EVENT="EVENT"
FS='|'
FORMAT="$EVENT$FS%n$FS%u$FS%e$FS%1.FIXESa$FS%1.l$FS%1.Nc$FS\n"
$CLEAR_CASE_TOOL lshistory -fmt $FORMAT \
-avobs -nco -since yesterday.00:00 > $SUBMISSION_LOG
#
# Delete entries submitted by root
#
grep $EVENT $SUBMISSION_LOG | sort > $SUBMISSION_LOG_PRIME
if [ "False" = $INCLUDE_ROOT ]; then
SUBMISSION_LOG_TWO=/tmp/$PROG_NAME.lshistory.2.$$
do_register_temporary_file $SUBMISSION_LOG_TWO
egrep -v -e "${FS}root$FS" $SUBMISSION_LOG_PRIME > $SUBMISSION_LOG_TWO
cp $SUBMISSION_LOG_TWO $SUBMISSION_LOG_PRIME
fi
sed -e 's/\.cde-1/cde/
s/\.cde-2/cde/
s/\.cde-3/cde/
s/\.cde-test-1/cde-test/
s/\.cde-test-2/cde-test/
s/\.cde-test-3/cde-test/
s/\.motif-1/motif/
s/\.motif-2/motif/' $SUBMISSION_LOG_PRIME > $SUBMISSION_LOG
fi
PROJECTS="cde cde-contrib cde-cts cde-misc cde-test cde-test-misc
motif motif-cts motif-misc x11/misc x11/unsupported x11"
#
# Redirect output
#
if [ "$DEBUG" = "False" ]; then
EXECUTIVE_SUMMARY_LOG=/tmp/$PROG_NAME.execsum.$$
do_register_temporary_file $EXECUTIVE_SUMMARY_LOG
touch $EXECUTIVE_SUMMARY_LOG
exec 9>&1
exec > $EXECUTIVE_SUMMARY_LOG
fi
DATE=`date "$BTAG_DFMT"`
print -u1 " CLEARCASE EVENT SUMMARY FOR: $DATE"
print -u1 " +++++++++++++++++++++++++++++++++++++++++++++++"
print -u1
print -u1
if [ ! -s $SUBMISSION_LOG ]; then
HAVE_EVENTS="False"
print -u1 "NO events were found."
fi
if [ "True" = "$DO_SUMMARY" -a "True" = "$HAVE_EVENTS" ]; then
for p in $PROJECTS
do
COMPONENTS_FILE=$SCRIPTS_DIR/$p.components
if [ -f $COMPONENTS_FILE ]; then
#
# Correct for the missing 'xc' subdirectory in x11.components
#
if [ "$p" = "x11" ]; then
p=x11/xc
fi
for c in `cat $COMPONENTS_FILE`
do
do_executive_summary /proj/$p/$c
done
else
do_executive_summary /proj/$p
fi
done
fi
if [ "True" = "$DO_LISTING" -a "True" = "$HAVE_EVENTS" ]; then
print -u1
print -u1
print -u1 " CLEARCASE EVENT LISTING"
print -u1 " +++++++++++++++++++++++"
print -u1
print -u1
for p in $PROJECTS
do
COMPONENTS_FILE=$SCRIPTS_DIR/$p.components
if [ -f $COMPONENTS_FILE ]; then
#
# Correct for the missing 'xc' subdirectory in x11.components
#
if [ "$p" = "x11" ]; then
p=x11/xc
fi
for c in `cat $COMPONENTS_FILE`
do
do_listing_summary /proj/$p/$c
done
else
do_listing_summary /proj/$p
fi
done
fi
##########################################################################
#
# Complete the build summary and mail it or dump it to stdout
#
if [ "" != "$MAIL_LIST" ]; then
mailx -s "$SUBJECT_SUBMISSIONS (`date $SUBJECT_DATE`)" "$MAIL_LIST" < \
$EXECUTIVE_SUMMARY_LOG
fi
if [ "" != "$LOG_PATH" ]; then
cp $EXECUTIVE_SUMMARY_LOG $LOG_PATH
fi
if [ "$DEBUG" = "False" -a "" = "$MAIL_LIST" -a "" = "$LOG_PATH" ]; then
exec >&9
cat $EXECUTIVE_SUMMARY_LOG
fi
##########################################################################
#
# Clean up temporary files and exit
#
if [ "True" = "$DO_DELETE" ]; then
do_exit 0
fi
exit 0

View file

@ -0,0 +1,59 @@
admin
config
databases
lib/DtHelp
lib/DtMmdb
lib/DtMrm
lib/DtPrint
lib/DtSearch
lib/DtSvc
lib/DtTerm
lib/DtWidget
lib/cs
lib/pam
lib/tt
osf/bindings
osf/uil
osf/wml
osf/xmbind
programs/doc
programs/dsdm
programs/dtaction
programs/dtappbuilder
programs/dtappintegrate
programs/dtcalc
programs/dtcm
programs/dtconfig
programs/dtcreate
programs/dtdbcache
programs/dtdocbook
programs/dtdspmsg
programs/dtexec
programs/dtfile
programs/dthello
programs/dthelp
programs/dticon
programs/dtimsstart
programs/dtinfo
programs/dtksh
programs/dtlogin
programs/dtmail
programs/dtpad
programs/dtpdm
programs/dtpdmd
programs/dtprintegrate
programs/dtprintinfo
programs/dtscreen
programs/dtsearchpath
programs/dtsession
programs/dtspcd
programs/dtsr
programs/dtstyle
programs/dtterm
programs/dtudcexch
programs/dtudcfonted
programs/dtwm
programs/localized
programs/nsgmls
programs/ttsnoop
programs/tttypes

View file

@ -0,0 +1,237 @@
##########################################################################
#
# File: cron_database
#
##########################################################################
#
#
# This is a build database file used by the cron_scripts script to start
# the various build and report scripts from crontab. cron_scripts is intended
# to provide a level of indirection which allows the nightly builds to be
# controlled without having to edit crontab entries.
#
# To set up an automated build on a particular machine you will need to
# do the following:
#
# 1. Checkout /proj/cde/admin/BuildTools/tog/cron_database.
# Edit it as specified in the section explaining the database format.
# Check it back in when satisfied with the entries.
# Copy it to /project/dt/admin/cron
#
# 2. Log onto the desired machine as 'devobj' and add the following line
# to the crontab entries:
#
# 15 * * * * /project/dt/scripts/cron_scripts
#
# The crontab entry will cause cron_scripts to run every hour at 15 minutes
# past the hour. The script checks the database to see if there is a valid
# entry for the MachineName, FullWeekdayName, and 24HourClockHour. If
# such an entry does NOT exists, cron_scripts simply exits. Otherwise,
# if the view is not set to 'none' it sets the view and exectutes the
# specified command line. If the view is set to 'none' it just executes
# the specified command line.
#
#
# Format:
#
# FullWeekdayName (aka `date +%A`)
# 24HourClockHour (aka `date +%H`)
# MachineName
# View
# CommandLine
#
# NOTE:
# Comment Character = '#'
# Line Continuation Character = '\'
#
##########################################################################
#
# CDE Cron Jobs
#
##########################################################################
#
# Monday
#
Monday 02 build-hp cde-hp \
/project/dt/scripts/build_id \
-dev -log_path /project/dt/ID/cdeID
Monday 03 build-hp cde-hp \
/project/dt/scripts/build_id \
-cdetest -log_path /project/dt/ID/cde-testID
Monday 05 hans none \
/project/dt/scripts/make_report_dir
-log_path /project/dt/logs/build/reports/LATEST
Monday 06 hans cde-sun \
/project/dt/scripts/cc_checkedout \
-log_path /project/dt/logs/build/reports/LATEST/checkedout
Monday 06 hans cde-sun \
/project/dt/scripts/cc_submissions \
-log_path /project/dt/logs/build/reports/LATEST/submitted
Monday 07 hans none \
/project/dt/scripts/build_summary_cron \
-retries 3 \
-c /project/dt/scripts/x11.components \
-c /project/dt/scripts/motif.components \
-c /project/dt/scripts/cde.components \
-c /project/dt/scripts/cdedoc.components \
-c /project/dt/scripts/cdetest.components \
-s /project/dt/logs/build/cde-hp/LATEST/build.summary \
-s /project/dt/logs/build/cde-sun/LATEST/build.summary \
-log_path /project/dt/logs/build/reports/LATEST/build.summary
Monday 19 build-hp cde-hp \
/project/dt/scripts/build_world -dev -cdetest
Monday 19 hans cde-sun \
/project/dt/scripts/build_world -dev -cdetest
#
# Tuesday
#
Tuesday 02 build-hp cde-hp \
/project/dt/scripts/build_id \
-dev -log_path /project/dt/ID/cdeID
Tuesday 03 build-hp cde-hp \
/project/dt/scripts/build_id \
-cdetest -log_path /project/dt/ID/cde-testID
Tuesday 05 hans none \
/project/dt/scripts/make_report_dir
-log_path /project/dt/logs/build/reports/LATEST
Tuesday 06 hans cde-sun \
/project/dt/scripts/cc_checkedout \
-log_path /project/dt/logs/build/reports/LATEST/checkedout
Tuesday 06 hans cde-sun \
/project/dt/scripts/cc_submissions \
-log_path /project/dt/logs/build/reports/LATEST/submitted
Tuesday 07 hans none \
/project/dt/scripts/build_summary_cron \
-retries 3 \
-c /project/dt/scripts/x11.components \
-c /project/dt/scripts/motif.components \
-c /project/dt/scripts/cde.components \
-c /project/dt/scripts/cdedoc.components \
-c /project/dt/scripts/cdetest.components \
-s /project/dt/logs/build/cde-hp/LATEST/build.summary \
-s /project/dt/logs/build/cde-sun/LATEST/build.summary \
-log_path /project/dt/logs/build/reports/LATEST/build.summary
Tuesday 19 build-hp cde-hp \
/project/dt/scripts/build_world -dev -cdetest
Tuesday 19 hans cde-sun \
/project/dt/scripts/build_world -dev -cdetest
#
# Wednesday
#
Wednesday 02 build-hp cde-hp \
/project/dt/scripts/build_id \
-dev -log_path /project/dt/ID/cdeID
Wednesday 03 build-hp cde-hp \
/project/dt/scripts/build_id \
-cdetest -log_path /project/dt/ID/cde-testID
Wednesday 05 hans none \
/project/dt/scripts/make_report_dir
-log_path /project/dt/logs/build/reports/LATEST
Wednesday 06 hans cde-sun \
/project/dt/scripts/cc_checkedout \
-log_path /project/dt/logs/build/reports/LATEST/checkedout
Wednesday 06 hans cde-sun \
/project/dt/scripts/cc_submissions \
-log_path /project/dt/logs/build/reports/LATEST/submitted
Wednesday 07 hans none \
/project/dt/scripts/build_summary_cron \
-retries 3 \
-c /project/dt/scripts/x11.components \
-c /project/dt/scripts/motif.components \
-c /project/dt/scripts/cde.components \
-c /project/dt/scripts/cdedoc.components \
-c /project/dt/scripts/cdetest.components \
-s /project/dt/logs/build/cde-hp/LATEST/build.summary \
-s /project/dt/logs/build/cde-sun/LATEST/build.summary \
-log_path /project/dt/logs/build/reports/LATEST/build.summary
Wednesday 19 build-hp cde-hp \
/project/dt/scripts/build_world -dev -cdetest
Wednesday 19 hans cde-sun \
/project/dt/scripts/build_world -dev -cdetest
#
# Thursday
#
Thursday 02 build-hp cde-hp \
/project/dt/scripts/build_id \
-dev -log_path /project/dt/ID/cdeID
Thursday 03 build-hp cde-hp \
/project/dt/scripts/build_id \
-cdetest -log_path /project/dt/ID/cde-testID
Thursday 05 hans none \
/project/dt/scripts/make_report_dir
-log_path /project/dt/logs/build/reports/LATEST
Thursday 06 hans cde-sun \
/project/dt/scripts/cc_checkedout \
-log_path /project/dt/logs/build/reports/LATEST/checkedout
Thursday 06 hans cde-sun \
/project/dt/scripts/cc_submissions \
-log_path /project/dt/logs/build/reports/LATEST/submitted
Thursday 07 hans none \
/project/dt/scripts/build_summary_cron \
-retries 3 \
-c /project/dt/scripts/x11.components \
-c /project/dt/scripts/motif.components \
-c /project/dt/scripts/cde.components \
-c /project/dt/scripts/cdedoc.components \
-c /project/dt/scripts/cdetest.components \
-s /project/dt/logs/build/cde-hp/LATEST/build.summary \
-s /project/dt/logs/build/cde-sun/LATEST/build.summary \
-log_path /project/dt/logs/build/reports/LATEST/build.summary
Thursday 19 build-hp cde-hp \
/project/dt/scripts/build_world -dev -cdetest
Thursday 19 hans cde-sun \
/project/dt/scripts/build_world -dev -cdetest
#
# Friday
#
Friday 02 build-hp cde-hp \
/project/dt/scripts/build_id \
-dev -log_path /project/dt/ID/cdeID
Friday 03 build-hp cde-hp \
/project/dt/scripts/build_id \
-cdetest -log_path /project/dt/ID/cde-testID
Friday 05 hans none \
/project/dt/scripts/make_report_dir
-log_path /project/dt/logs/build/reports/LATEST
Friday 06 hans cde-sun \
/project/dt/scripts/cc_checkedout \
-log_path /project/dt/logs/build/reports/LATEST/checkedout
Friday 06 hans cde-sun \
/project/dt/scripts/cc_submissions \
-log_path /project/dt/logs/build/reports/LATEST/submitted
Friday 07 hans none \
/project/dt/scripts/build_summary_cron \
-retries 3 \
-c /project/dt/scripts/x11.components \
-c /project/dt/scripts/motif.components \
-c /project/dt/scripts/cde.components \
-c /project/dt/scripts/cdedoc.components \
-c /project/dt/scripts/cdetest.components \
-s /project/dt/logs/build/cde-hp/LATEST/build.summary \
-s /project/dt/logs/build/cde-sun/LATEST/build.summary \
-log_path /project/dt/logs/build/reports/LATEST/build.summary
Friday 16 build-hp cde-hp \
/project/dt/scripts/build_world -clean -all
Friday 16 hans cde-sun \
/project/dt/scripts/build_world -clean -all

View file

@ -0,0 +1,5 @@
###############################################################################
#
# Builds and reports
#
15 * * * * /project/dt/scripts/cron_scripts -db /project/dt/admin/cron/cde.crondb

View file

@ -0,0 +1,9 @@
doc/common
doc/de_DE.ISO8859-1
doc/es_ES.ISO8859-1
doc/fr_FR.ISO8859-1
doc/it_IT.ISO8859-1
doc/ja_JP.dt-eucJP
doc/C
doc/tmp
doc/util

View file

@ -0,0 +1,54 @@
config
util
tet
src
comp_suites/XmMT
comp_suites/threadsafe
comp_suites/DefConfig
comp_suites/DtEditor
comp_suites/DtSvc
comp_suites/dtaction
comp_suites/dtcm
comp_suites/dtcalc
comp_suites/dtfile
comp_suites/dthelp
comp_suites/dtpad
comp_suites/dtspcd
comp_suites/dtterm
comp_suites/dtwm
comp_suites/dtfp
comp_suites/DtWidget
comp_suites/dsdm
comp_suites/dtstyle
comp_suites/dtmail
comp_suites/dtksh
comp_suites/dtsearchpath
comp_suites/dtappgather
comp_suites/dtappintegrate
comp_suites/dtlp
comp_suites/dtscreen
comp_suites/dtsession
comp_suites/DevEnv
comp_suites/examples
comp_suites/synlib
comp_suites/dtbuilder
comp_suites/dtlogin
comp_suites/vert-writing
comp_suites/tt
comp_suites/dtperf
comp_suites/Xp
comp_suites/printing
comp_suites/dtudcexch
comp_suites/dtudcfonted
comp_suites/dtsr
comp_suites/dtdocbook
comp_suites/dtinfo
comp_suites/onthespot
comp_suites/xlib_udc
sys_suites/shared
sys_suites/Intop
sys_suites/Stress
sys_suites/CtPast
sys_suites/ClipB
sys_suites/CtMenu
sys_suites/CHO

View file

@ -0,0 +1,173 @@
#!/bin/ksh
#
# compress_msg.ksh
#
########################################################################
#set -x
DEBUG="False"
ERROR_FILE=""
LOG_FILE=""
MESSAGE_FILES=""
MESSAGES_INIT="XXXXXXX"
MESSAGES="$MESSAGES_INIT"
PROG_NAME="`basename $0`"
usage ()
{
print -u1 "USAGE: $1"
print -u1 "\t{-e | -errorfile} <file>"
print -u1 "\t # Specifies the error file to send errors."
print -u1 "\t[-h | -? | -help]"
print -u1 "\t # Print usage and exit"
print -u1 "\t[{-l | -logfile} <file>]"
print -u1 "\t # Specifies the file containing msgs to be compressed"
print -u1 "\t # Defaults to using stdin"
print -u1 "\t[{-m | -msgfile} <file>]"
print -u1 "\t # Specifies a file containing messages to be"
print -u1 "\t # extracted. Multiple -m flags can be specified."
print -u1 "\t[messages ...]"
print -u1 "\t # Specifies individual messages to be extraced."
}
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="True"
shift 1 ;;
-e | -errorfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
ERROR_FILE=$2
shift 2 ;;
-m | -msgfile)
MESSAGE_FILES="$MESSAGE_FILES $2"
shift 2 ;;
-l | -logfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
exit 1
fi
LOG_FILE=$2
shift 2 ;;
-h | -? | -help)
usage $PROG_NAME
exit 1 ;;
*)
MESSAGES="$MESSAGES|$1"
shift 1;;
esac
done
if [ ! -z "$ERROR_FILE" ]
then
exec 2>> $ERROR_FILE
fi
#
# Check to make sure that the command-line parameters make sense.
#
if [ -z "$MESSAGE_FILES" ] && [ "$MESSAGES" = "$MESSAGES_INIT" ]
then
print -u2 "$PROG_NAME: No messages or message files have been specified."
print -u2 "$PROG_NAME: exiting ..."
exit 1
fi
for f in $MESSAGE_FILES
do
if [ ! -f $f ]
then
print -u2 "$PROG_NAME: Message file \"$f\" does not exist; exiting ..."
exit 1
fi
done
if [ -n "$LOG_FILE" -a ! -f "$LOG_FILE" ]
then
print -u2 "$PROG_NAME: Log file \"$LOG_FILE\" does not exist; exiting ..."
exit 1
fi
#
# Collect all the regular expressions from the message files
# ignoring those that have been commented out.
#
for f in $MESSAGE_FILES
do
IFS="
"
for m in `cat $f`
do
MESSAGES="$MESSAGES|$m"
done
IFS=" "
done
#
# Build the awk script
#
SCRIPT=/tmp/${PROG_NAME}.$$.awk
touch $SCRIPT
chmod 775 $SCRIPT
print -n -u1 'BEGIN {
do_print = 0
}
/.*/ {
if (' >> $SCRIPT
IFS="|"
let i=0
for m in $MESSAGES
do
if [ i -gt 0 ]; then
print -n -u1 " || " >> $SCRIPT
fi
print -n -u1 "index(\$0, \"$m \")" >> $SCRIPT
let i=$i+1
done
IFS=" "
print -n -u1 ') {
save = $0
do_print = 1
next
}
if (do_print)
{
print ">>>" save "<<<"
do_print = 0
}
print
}' >> $SCRIPT
#
# Use the awk script to extract the desired messages from the log file.
#
if [ -n "$LOG_FILE" ]; then
exec < $LOG_FILE
fi
awk -f $SCRIPT
#
# Clean up
#
if [ "$DEBUG" != "True" ]
then
/bin/rm $SCRIPT
fi
exit 0

View file

@ -0,0 +1,162 @@
#!/bin/ksh
#
# $TOG: cron_scripts /main/11 1999/04/26 11:42:51 mgreess $
#
# This script is run on all of the systems where an automated
# X build will occur.
#
# The main benefit of using this script is that if the type of build
# that needs to be done changes, (e.g. a clean build is needed
# instead of an incremental build), then only this file needs to be
# changed and none of the crontabs need to be changed.
#
#############################################################################
#
# The following trap is needed because of a bug in the UXP (Fujitsu)
# version of ksh.
#
trap 'echo "Trapped signal USR1"' USR1
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ "" = "$ADMIN_CRON" ]; then
ADMIN_CRON=/project/dt/admin/cron
fi
if [ "" = "$CRON_DATABASE" ]; then
CRON_DATABASE=$ADMIN_CRON/crondb
fi
DEBUG=""
MAIL_TO=""
PROG_NAME="`basename $0`"
##########################################################################
usage ()
{
cat <<eof
USAGE: $PROG_NAME
[-debug]
# Debugging output
[{-db | -database} <cron_database_file>]
# Specify the cron database
# Default: $CRON_DATABASE
[{-m | -mail} <email>]
# Specify an alternate email recipient for unexpected output.
# Default: $CDE_MAIL_ALIAS or $X_MAIL_ALIAS
[{-sd | -script_dir} <directory>]
# Specify an alternate directory for required files.
# Default: $SCRIPTS_DIR/
[-h | -? | -help]
# Print usage and exit
eof
}
##########################################################################
while [ $# -gt 0 ]; do
case $1 in
-debug) DO_DEBUG="True"
DEBUG="echo"
shift 1 ;;
-db | -database) CRON_DATABASE=$2;
shift 2 ;;
-m | -mail) MAIL_TO=$2;
shift 2 ;;
-sd | -script_dir) SCRIPTS_DIR=$2;
export SCRIPTS_DIR;
shift 2 ;;
-h | "-?" | -help | *) usage $PROG_NAME;
exit 1;
esac
done
#
# Capture all of the spurious output to stdout and stderr
#
LOGFILE=/tmp/$$.log
exec > $LOGFILE 2>&1
#
# TRACE should be passed into the script as an environment variable
# i.e., TRACE=true cron_scripts ...
#
if [ "" != "$TRACE" ]; then
echo Debugging: $DO_DEBUG
echo Cron Database: $CRON_DATABASE
echo Mail Recipient: $MAIL_TO
echo Scripts Dir: $SCRIPTS_DIR
set -x
fi
##########################################################################
#
# Script setup: Do this after the command line parsing to pick up
# an alternate setting of SCRIPTS_DIR
#
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
do_check_file $CRON_DATABASE -f "NOT found"
COMM="#"
DAY="`date +%a`"
HOST="`uname -n | sed '/\./s/\..*//'`"
HOUR="`date +%H`"
cat $CRON_DATABASE | while read LINE; do
ENTRY="`echo $LINE | grep -v $COMM | grep $HOST | grep $DAY | grep $HOUR`"
EDAY="`echo $ENTRY | awk '{ print $1 }'`"
EHOUR="`echo $ENTRY | awk '{ print $2 }'`"
EHOST="`echo $ENTRY | awk '{ print $3 }'`"
EVIEW="`echo $ENTRY | awk '{ print $4 }'`"
ECOMMAND="`echo $ENTRY | awk '{ for (i=5; i<=NF; i++) printf(\"%s \",$i) }'`"
if [ -n "$ENTRY" -a "$HOUR" = "$EHOUR" ]; then
if [ "none" = "$EVIEW" ]; then
$DEBUG $ECOMMAND
else
$DEBUG $CLEAR_CASE_TOOL setview -exec "$ECOMMAND" $EVIEW
fi
fi
done
if [ -s $LOGFILE ]; then
if [ "" = "$MAIL_TO" ]; then
if [ "`basename $CRON_DATABASE`" = "trw.crondb" ]; then
MAIL_TO=$TRW_MAIL_ALIAS
elif [ "`basename $CRON_DATABASE`" = "cde.crondb" ]; then
MAIL_TO=$CDE_MAIL_ALIAS
elif [ "`basename $CRON_DATABASE`" = "x.crondb" ]; then
MAIL_TO=$X_MAIL_ALIAS
else
MAIL_TO=$CDE_MAIL_ALIAS
fi
fi
mailx -s "Warning: unexpected cron output" $MAIL_TO < $LOGFILE
fi
rm -f $LOGFILE

View file

@ -0,0 +1,32 @@
ERROR
Error:
Error
Error code
error code
failed
ERROR
:E:
Can\'t
Cannot write
Cannot find
Don\'t
FATAL
No space
\(S\)
\(U\)
SGML error
^gencat:
cannot
core dumped
couldn't
error:
error;
failed:
fatal:
killed
not found
parser errors
permission
too many
Must be a separator
I\/O error

View file

@ -0,0 +1,7 @@
dfiles d Basic Error FolioObject
dfiles h Basic Error FolioObject
dfiles d Basic Error FolioObject
dfiles h Basic Error FolioObject
tt_client_on_exit_killed
UX:make: ERROR: \$\? \(bu35\)
SGML error at

View file

@ -0,0 +1,10 @@
cleaning in
depending in
including in
making Makefiles in
making all in
making imake with
building in
build installing in
build install in
extracting errors and warnings in

View file

@ -0,0 +1,8 @@
WARNING
Warning
Warning:
warning
warning:
warning\(
\(E\)
mkcatdefs: no

View file

@ -0,0 +1,278 @@
#!/bin/ksh
#
# extract_log.ksh
#
########################################################################
#set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
COMPONENTS_FILES=""
COMPONENTS=""
DEBUG="False"
LOG_FILE=""
ERROR_FILE=""
LOG_DIRECTORY=""
PROG_NAME="`basename $0`"
usage ()
{
print -u1 "USAGE: $1"
print -u1 "\t[{-c | -components_file} <file>]"
print -u1 "\t # Specifies a file containing a list of components to"
print -u1 "\t # be extracted. Multiple -c flags can be specified."
print -u1 "\t{-e | -errorfile} <file>"
print -u1 "\t # Specifies the error file to send errors."
print -u1 "\t[-h | -? | -help]"
print -u1 "\t # Print usage and exit"
print -u1 "\t[{-ld | -logdirectory} <directory>]"
print -u1 "\t # Specifies an alternative directory to store the"
print -u1 "\t # extracted component logs. Defaults to the directory"
print -u1 "\t # containing the log file."
print -u1 "\t{-l | -logfile} <file>"
print -u1 "\t # Specifies the log file to be extracted from."
print -u1 "\t[component ...]"
print -u1 "\t # Specifies individual components to be extraced."
print -u1 "\t # Each component specification is should correspond"
print -u1 "\t # to an individual directory in the source tree."
}
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="True"
shift 1 ;;
-c | -components_file)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
COMPONENTS_FILES="$2 $COMPONENTS_FILES"
shift 2 ;;
-e | -errorfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
ERROR_FILE=$2
shift 2 ;;
-ld | -logdirectory)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
LOG_DIRECTORY=$2
shift 2 ;;
-l | -logfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
LOG_FILE=$2
shift 2 ;;
-h | -? | -help)
usage $PROG_NAME
do_exit 1 ;;
*)
COMPONENTS="$COMPONENTS $1"
shift 1;;
esac
done
if [ ! -z "$ERROR_FILE" ]
then
exec 2>> $ERROR_FILE
fi
#
# Check to make sure that the command-line parameters make sense.
#
if [ -z "$COMPONENTS_FILES" ] && [ -z "$COMPONENTS" ]
then
print -u2 "$PROG_NAME: No components or component files specified."
print -u2 "$PROG_NAME: exiting ..."
do_exit 1
fi
for f in $COMPONENTS_FILES
do
if [ ! -f $f ]
then
print -u2 "$PROG_NAME: Component file \"$f\" does not exist."
print -u2 "$PROG_NAME: exiting ..."
do_exit 1
fi
done
if [ -z "$LOG_FILE" ]
then
print -u2 "$PROG_NAME: Missing argument for log file."
print -u2 "$PROG_NAME: exiting ..."
do_exit 1
fi
if [ ! -f $LOG_FILE ]
then
print -u2 "$PROG_NAME: Log file \"$LOG_FILE\" does not exist."
print -u2 "$PROG_NAME: exiting ..."
do_exit 1
fi
if [ -n "$LOG_DIRECTORY" ] && [ ! -d $LOG_DIRECTORY ]
then
print -u2 "$PROG_NAME: Log directory \"$LOG_DIRECTORY\" does not exist."
print -u2 "$PROG_NAME: exiting ..."
do_exit 1
fi
if [ -z "$LOG_DIRECTORY" ]
then
LOG_DIRECTORY=`dirname $LOG_FILE`
#
# Just being paranoid. dirname should return '.' if there is no
# directory component.
#
if [ -z "$LOG_DIRECTORY" ]
then
LOG_DIRECTORY='.'
fi
fi
#
# Collect all the components from the components files.
#
for f in "$COMPONENTS_FILES"
do
for c in `cat $f`
do
COMPONENTS="$COMPONENTS $c"
done
done
#
# Collect all the build messages
# ignoring those that have been commented out.
#
MESSAGES="XXXXXXX"
IFS="
"
for m in `cat $BUILD_MSGS`
do
MESSAGES="$MESSAGES|$m"
done
IFS=" "
#
# Build the awk script
#
SCRIPT=/tmp/${PROG_NAME}.$$.awk
do_register_temporary_file $SCRIPT
touch $SCRIPT
chmod 775 $SCRIPT
print -n -u1 'BEGIN {
do_print = 0
}
/.*/ {
if (' >> $SCRIPT
IFS="|"
let i=0
for m in $MESSAGES
do
if [ i -gt 0 ]; then
print -n -u1 " || " >> $SCRIPT
fi
print -n -u1 "index(\$0, \"$m \")" >> $SCRIPT
let i=$i+1
done
IFS=" "
#
# NOTE on: (index($NF, PATTERN) == 1 || index($NF, PATTERN) == 3)
# This check is intended to guard against false matches on
# subcomponents: i.e. config and programs/dtlogin/config.
# The problem is that top level subdirectories show up differently
# than lower level directories. E.g.:
# /prog/cde/config => making all in ./config...
# /prog/cde/programs/dtlogin => making all in programs/dtlogin...
#
# There are 2 ways to handle this, in the components files or here.
# I've chosen here.
#
print -n -u1 ')
{
if (index($NF, PATTERN) == 1 || index($NF, PATTERN) == 3)
{
do_print = 1
print
next
}
else
{
do_print = 0
next
}
}
if (do_print) print
}' >> $SCRIPT
#
# Extract each of the specified component logs.
#
TMP_LOG_FILE=${LOG_FILE}.$$
do_register_temporary_file $TMP_LOG_FILE
sed -n -e 's/\(.\{0,254\}\).*/\1/p' $LOG_FILE > $TMP_LOG_FILE
for c in $COMPONENTS
do
COMPONENT_LOG=$LOG_DIRECTORY/`echo $c | tr "/" ","`.log
PATTERN="$c"
#
# sed protects awk from lines which are too long.
#
if [ "$DEBUG" = "True" ]
then
echo "awk -f $SCRIPT PATTERN=$PATTERN $TMP_LOG_FILE >
$COMPONENT_LOG"
else
awk -f $SCRIPT PATTERN=$PATTERN $TMP_LOG_FILE > $COMPONENT_LOG
fi
done
#
# Clean up temporary files and exit
#
do_exit 0

View file

@ -0,0 +1,67 @@
BEGIN {
do_print = 0
}
/making Makefiles in / {
pos = match($NF, PATTERN)
if (pos == 1) {
do_print = 1
print
next
}
else {
do_print = 0
next
}
}
/cleaning in / {
pos = match($NF, PATTERN)
if (pos == 1) {
do_print = 1
print
next
}
else {
do_print = 0
next
}
}
/including in / {
pos = match($NF, PATTERN)
if (pos == 1) {
do_print = 1
print
next
}
else {
do_print = 0
next
}
}
/depending in / {
pos = match($NF, PATTERN)
if (pos == 1) {
do_print = 1
print
next
}
else {
do_print = 0
next
}
}
/making All in / {
pos = match($NF, PATTERN)
if (pos == 1) {
do_print = 1
print
next
}
else {
do_print = 0
next
}
}
/.*/ {
if (do_print) print
}

View file

@ -0,0 +1,239 @@
#!/bin/ksh
#
# extract_msg.ksh
#
########################################################################
#set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
DEBUG="False"
IGNORED_MESSAGE_FILES=""
IGNORED_MESSAGES_INIT="XXXXXXX"
IGNORED_MESSAGES="$IGNORED_MESSAGES_INIT"
LOG_FILE=""
ERROR_FILE=""
MESSAGE_FILES=""
MESSAGES_INIT="XXXXXXX"
MESSAGES="$MESSAGES_INIT"
PROG_NAME="`basename $0`"
usage ()
{
print -u1 "USAGE: $1"
print -u1 "\t{-e | -errorfile} <file>"
print -u1 "\t # Specifies the error file to send errors."
print -u1 "\t[-h | -? | -help]"
print -u1 "\t # Print usage and exit"
print -u1 "\t[{-i | -ignoredmsgfile} <file>]"
print -u1 "\t # Specifies a file containing messages to be"
print -u1 "\t # ignored. Multiple -i flags can be specified."
print -u1 "\t{-l | -logfile} <file>"
print -u1 "\t # Specifies the log file to be extracted from."
print -u1 "\t[{-m | -msgfile} <file>]"
print -u1 "\t # Specifies a file containing messages to be"
print -u1 "\t # extracted. Multiple -m flags can be specified."
print -u1 "\t[messages ...]"
print -u1 "\t # Specifies individual messages to be extraced."
}
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="True"
shift 1 ;;
-e | -errorfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
ERROR_FILE=$2
shift 2 ;;
-i | -msgfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
IGNORED_MESSAGE_FILES="$IGNORED_MESSAGE_FILES $2"
shift 2 ;;
-m | -msgfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
MESSAGE_FILES="$MESSAGE_FILES $2"
shift 2 ;;
-l | -logfile)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
LOG_FILE=$2
shift 2 ;;
-h | -? | -help)
usage $PROG_NAME
do_exit 1 ;;
*)
MESSAGES="$MESSAGES|$1"
shift 1;;
esac
done
if [ ! -z "$ERROR_FILE" ]
then
exec 2>> $ERROR_FILE
fi
#
# Check to make sure that the command-line parameters make sense.
#
if [ -z "$MESSAGE_FILES" ] && [ "$MESSAGES" = "$MESSAGES_INIT" ]
then
print -u2 "$PROG_NAME: No messages or message files have been specified."
print -u2 "$PROG_NAME: exiting ..."
do_exit 1
fi
for f in $IGNORED_MESSAGE_FILES
do
if [ ! -f $f ]
then
print -u2 "$PROG_NAME: Message file \"$f\" does not exist; exiting ..."
do_exit 1
fi
done
for f in $MESSAGE_FILES
do
if [ ! -f $f ]
then
print -u2 "$PROG_NAME: Message file \"$f\" does not exist; exiting ..."
do_exit 1
fi
done
if [ -z "$LOG_FILE" ]
then
print -u2 "$PROG_NAME: Missing argument for log file; exiting ..."
do_exit 1
fi
if [ ! -f $LOG_FILE ]
then
print -u2 "$PROG_NAME: Log file \"$LOG_FILE\" does not exist; exiting ..."
do_exit 1
fi
#
# Determine where to find perl.
#
PERL="/usr/local/bin/perl"
if [ ! -x $PERL ]
then
print -u2 "$PROG_NAME: Can't find perl executable $PERL; exiting ..."
do_exit 1
fi
#
# Collect all the regular expressions from the ignored message files.
#
for f in $IGNORED_MESSAGE_FILES
do
IGNORED_MESSAGES="$IGNORED_MESSAGES`sed -e '1,$s/.*/|&/' $f`"
done
#
# Collect all the regular expressions from the message files.
#
for f in $MESSAGE_FILES
do
MESSAGES="$MESSAGES`sed -e '1,$s/.*/|&/' $f`"
done
if [ "$DEBUG" = "True" ]
then
print -u1 "======= DEBUG DEBUG IGNORED MESSAGES DEBUG DEBUG ========"
print -u1 $IGNORED_MESSAGES
print -u1 "======= DEBUG DEBUG ================ DEBUG DEBUG ========"
print -u1 "======= DEBUG DEBUG MESSAGES DEBUG DEBUG ========"
print -u1 $MESSAGES
print -u1 "======= DEBUG DEBUG ================ DEBUG DEBUG ========"
fi
#
# Build the perl script
#
SCRIPT=/tmp/${PROG_NAME}.$$.pl
if [ "$DEBUG" = "False" ]
then
do_register_temporary_file $SCRIPT
fi
touch $SCRIPT
chmod 755 $SCRIPT
print -u1 "#!$PERL" >> $SCRIPT
print -u1 "LINE: while (<>) {" >> $SCRIPT
IFS="|"
for m in $IGNORED_MESSAGES
do
MESSAGE=`echo $m | sed -e 's?\/?\\\/?g'`
print -u1 "next LINE if /$MESSAGE/;" >> $SCRIPT
done
for m in $MESSAGES
do
MESSAGE=`echo $m | sed -e 's?\/?\\\/?g'`
print -u1 "next LINE if /$MESSAGE/ && print;" >> $SCRIPT
done
IFS=" "
print -u1 "}" >> $SCRIPT
if [ "$DEBUG" = "True" ]
then
print -u1 "======= DEBUG DEBUG SCRIPT DEBUG DEBUG ========"
cat $SCRIPT
print -u1 "======= DEBUG DEBUG ================ DEBUG DEBUG ========"
fi
#
# Use the perl script to extract the desired messages from the log file.
#
if [ "$DEBUG" = "True" ]
then
print -u1 "======= DEBUG DEBUG RUN SCRIPT DEBUG DEBUG ========"
print -u1 cat $LOG_FILE | $SCRIPT
print -u1 "======= DEBUG DEBUG ================ DEBUG DEBUG ========"
fi
cat $LOG_FILE | $SCRIPT
#
# Clean up temporary files and exit
#
do_exit 0

View file

@ -0,0 +1,139 @@
#!/bin/ksh
#
# initialize_view
#
########################################################################
PROG_NAME=$0
X_TOP=/proj/x11/xc
MOTIF_TOP=/proj/motif
CDE_TOP=/proj/cde
CDE_TEST_TOP=/proj/cde-test
VERBOSE=""
DEBUG=""
usage ()
{
print -u1 "USAGE: $1"
print -u1 "\t[-v | -verbose] # Turn on tracing"
print -u1 "\t[-d | -debug] # Print commands but do NOT execute them"
}
while [ $# -gt 0 ]; do
case $1 in
-v | -verbose) VERBOSE="True"; shift 1 ;;
-d | -debug) DEBUG="echo"; shift 1 ;;
-h | -? | -help) usage $PROG_NAME
shift 1
exit 1 ;;
esac
done
if [ "True" = "$VERBOSE" ]; then
set -x
fi
#
# Motif
#
$DEBUG cd $MOTIF_TOP
if [ ! -d exports ]; then
$DEBUG mkdir exports
$DEBUG chmod 777 exports
fi
if [ ! -d imports ]; then
$DEBUG mkdir imports
$DEBUG chmod 777 imports
fi
$DEBUG cd imports
if [ ! -L x11 ]; then
$DEBUG ln -s ../../x11/xc/exports x11
fi
#
# CDE
#
$DEBUG cd $CDE_TOP
if [ ! -d exports ]; then
$DEBUG mkdir exports
$DEBUG chmod 777 exports
fi
if [ ! -d imports ]; then
$DEBUG mkdir imports
$DEBUG chmod 777 imports
fi
$DEBUG cd imports
if [ ! -L x11 ]; then
$DEBUG ln -s ../../motif/imports/x11 x11
fi
if [ ! -L motif ]; then
$DEBUG ln -s ../../motif/exports motif
fi
#
# CDE test build config links
#
if [ -d $CDE_TEST_TOP/config ]; then
$DEBUG cd $CDE_TEST_TOP/config
if [ ! -L OSVersion.tmpl ] || [ ! -L localtree.tmpl ]; then
case "`uname -s`" in
HP-UX) if [ ! -L OSVersion.tmpl ]; then
$DEBUG ln -s OSVersiontemplates/10.20 OSVersion.tmpl
fi
if [ ! -L localtree.tmpl ]; then
$DEBUG ln -s localtemplates/hpux/10.20/optimized.shared localtree.tmpl
fi
;;
OSF1) if [ ! -L OSVersion.tmpl ]; then
$DEBUG ln -s OSVersiontemplates/4.0 OSVersion.tmpl
fi
if [ ! -L localtree.tmpl ]; then
$DEBUG ln -s localtemplates/dec/alpha/osf/optimized.sharedlibs localtree.tmpl
fi
;;
AIX) if [ ! -L OSVersion.tmpl ]; then
$DEBUG ln -s OSVersiontemplates/4.2 OSVersion.tmpl
fi
if [ ! -L localtree.tmpl ]; then
$DEBUG ln -s localtemplates/ibm/rs6000/aix4.2/optimized.sharedlibs localtree.tmpl
fi
;;
SunOS) if [ ! -L OSVersion.tmpl ]; then
$DEBUG ln -s OSVersiontemplates/5.4 OSVersion.tmpl
fi
if [ ! -L localtree.tmpl ]; then
$DEBUG ln -s localtemplates/sun/optimized.sharedlibs localtree.tmpl
fi
;;
UNIX_SV) if [ ! -L OSVersion.tmpl ]; then
$DEBUG ln -s OSVersiontemplates/4.2 OSVersion.tmpl
fi
if [ ! -L localtree.tmpl ]; then
$DEBUG ln -s localtemplates/sun/optimized.sharedlibs localtree.tmpl
fi
;;
*) $DEBUG print -u1 "$PROG_NAME: Test build config links not set up for this architecture"
;;
esac
fi
else
$DEBUG print -u2 "$PROG_NAME: CDE test config directory $CDE_TEST_TOP/config does not exist!"
$DEBUG exit 1
fi
exit 0

View file

@ -0,0 +1,190 @@
#!/bin/ksh
#
###########################################################################
# set -x
DEBUG=""
X_TOP=/proj/x11/xc
MOTIF_TOP=/proj/motif
CDE_TOP=/proj/cde
LOG_DATE="`date +%h.%d,%H:%M:%S`"
LOG_ROOT=/project/dt/logs/install
VIEW=`/usr/atria/bin/cleartool pwv -s`
LOG_DIR=$LOG_ROOT/$VIEW/$LOG_DATE
DO_X_INSTALL=False
DO_MOTIF_INSTALL=False
DO_CDE_INSTALL=False
CLEAN_CDE=False
CLEAN_DIRS="/var/dt /etc/dt"
INSTALL_ALL_LOC_MSG=False
INSTALL_ALL_LOC_HELP=False
INSTALL_ALL_LOC_INFO=False
ALL_LOC_MSG="CDE-DE CDE-MSG-DE CDE-ES CDE-MSG-ES CDE-FR CDE-MSG-FR CDE-IT CDE-MSG-IT CDE-JP CDE-MSG-JP"
ALL_LOC_HELP="CDE-HELP-DE CDE-HELP-ES CDE-HELP-FR CDE-HELP-IT CDE-HELP-JP"
ALL_LOC_INFO="CDE-INFOLIB-DE CDE-INFOLIB-ES CDE-INFOLIB-FR CDE-INFOLIB-IT CDE-INFOLIB-JP"
MAKE=/usr/ccs/bin/make
if [ "IRIX" = "`uname -s`" ]; then
MAKE=/sbin/make
fi
############################################################################
usage ()
{
cat <<eof
USAGE: $1
[-x | -x11] # Install X11 only
[-m | -motif] # Install Motif only
[-c | -cde] # Install CDE (C locale) only
[-lm | -lmsg] # Install non-C locale message filesets ($ALL_LOC_MSG)
[-lh | -lhelp] # Install non-C locale help filesets ($ALL_LOC_HELP)
[-li | -linfo] # Install non-C locale infolib filesets ($ALL_LOC_INFO)
[-a | -all] # Install everything, i.e. -x, -m, -c, -lm, -lh, -li
[-clean] # Remove '$CLEAN_DIRS' before installing CDE
[-d | -debug] # Print the install commands but do NOT execute them
[{-l | -log | -log_dir} <log_dir>] # The default is '$LOG_DIR'
[{-mail | mail_list} <user_names>]
[-h | -? | -help] # Print usage and exit
eof
}
##########################################################################
while [ $# -gt 0 ]; do
case $1 in
-x | -x11) DO_X_INSTALL="True"
shift 1 ;;
-m | -motif) DO_MOTIF_INSTALL="True"
shift 1 ;;
-c | -cde) DO_CDE_INSTALL="True"
shift 1 ;;
-a | -all) DO_X_INSTALL="True"
DO_MOTIF_INSTALL="True"
DO_CDE_INSTALL="True"
INSTALL_ALL_LOC_MSG="True"
INSTALL_ALL_LOC_HELP="True"
INSTALL_ALL_LOC_INFO="True"
shift 1 ;;
-lm | -lmsg) INSTALL_ALL_LOC_MSG="True"
shift 1 ;;
-lh | -lhelp) INSTALL_ALL_LOC_HELP="True"
shift 1 ;;
-li | -linfo) INSTALL_ALL_LOC_INFO="True"
shift 1 ;;
-clean) CLEAN_CDE="True"
shift 1 ;;
-d | -debug) DEBUG="echo"
shift 1 ;;
-l | -log | -log_dir) LOG_DIR=$2;
shift 2 ;;
-mail | -mail_list) MAIL_LIST=$2;
shift 2 ;;
-h | "-?" | -help | *) usage $PROG_NAME;
exit 1;
esac
done
#
# Create the log directory
#
if [ -z "$CLEARCASE_ROOT" ]; then
print -u1 "$0: you must have a view set to do an install. Exiting ... "
exit 1
fi
#
# Create the log directory
#
if [ ! -d "$LOG_DIR" ]; then
$DEBUG mkdir -p $LOG_DIR
fi
#
# User must be root to do an install
#
id | grep root > /dev/null 2>&1
if [ "0" != "$?" ]; then
print -u1 "$0: only user 'root' may do an install. Exiting ..."
exit 1
fi
#
# X
#
if [ "True" = "$DO_X_INSTALL" ]; then
$DEBUG cd $X_TOP
$DEBUG $MAKE -i install > $LOG_DIR/x11.install 2>&1
fi
#
# Motif
#
if [ "True" = "$DO_MOTIF_INSTALL" ]; then
$DEBUG cd $MOTIF_TOP
$DEBUG $MAKE -i install.cde > $LOG_DIR/motif.install 2>&1
fi
#
# CDE
#
if [ "True" = "$CLEAN_CDE" ]; then
$DEBUG rm -rf $CLEAN_DIRS
fi
if [ "True" = "$DO_CDE_INSTALL" ]; then
$DEBUG $CDE_TOP/admin/IntegTools/dbTools/installCDE \
-s $CDE_TOP \
> $LOG_DIR/cde.install 2>&1
fi
#
# All localized msgs
#
if [ "True" = "$INSTALL_ALL_LOC_MSG" ]; then
$DEBUG $CDE_TOP/admin/IntegTools/dbTools/installCDE \
-s $CDE_TOP \
-f "$ALL_LOC_MSG" > \
$LOG_DIR/localized_msg.install 2>&1
fi
#
# All localized help
#
if [ "True" = "$INSTALL_ALL_LOC_HELP" ]; then
$DEBUG $CDE_TOP/admin/IntegTools/dbTools/installCDE \
-s $CDE_TOP \
-f "$ALL_LOC_HELP" > \
$LOG_DIR/localized_help.install 2>&1
fi
#
# All localized infolibs
#
if [ "True" = "$INSTALL_ALL_LOC_INFO" ]; then
$DEBUG $CDE_TOP/admin/IntegTools/dbTools/installCDE \
-s $CDE_TOP \
-f "$ALL_LOC_INFO" > \
$LOG_DIR/localized_infolibs.install 2>&1
fi
mv /tmp/CDE* $LOG_DIR

View file

@ -0,0 +1,99 @@
#!/bin/ksh
#
# make_report_dir
#
########################################################################
#set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
DEBUG="False"
LOG_PATH="/project/dt/logs/build/reports/LATEST"
PROG_NAME="`basename $0`"
usage ()
{
cat <<eof
USAGE: $PROG_NAME
[-log_path <path>]
[-h | -? | -help]
# Print usage and exit
#
# '$PROG_NAME' creates a directory in the parent of the
# specified path. The directory name is derived from the
# current date. It then creates a link from the newly
# created directory to the specified path in the same
# parent directory.
eof
}
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="True"
shift ;;
-h | -help | '-?')
usage $PROG_NAME
do_exit 1 ;;
-lp | -log_path )
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
LOG_PATH=$2
shift 2 ;;
*)
print -u2 "$PROG_NAME: invalid option $1; exiting ..."
do_exit 1 ;;
esac
done
PARENT_REPORT_DIR=`dirname $LOG_PATH`
REPORT_DIR=`basename $LOG_PATH`
REPORT_DATE="`date +%h%d`"
if [ ! -d "$PARENT_REPORT_DIR/$REPORT_DATE" ]; then
if [ -h "$PARENT_REPORT_DIR/$REPORT_DATE" ]; then
rm "$PARENT_REPORT_DIR/$REPORT_DATE"
fi
mkdir -p "$PARENT_REPORT_DIR/$REPORT_DATE"
fi
if [ -h "$PARENT_REPORT_DIR/$REPORT_DIR" ]; then
rm "$PARENT_REPORT_DIR/$REPORT_DIR"
fi
ln -s "$REPORT_DATE" "$PARENT_REPORT_DIR/$REPORT_DIR"
#
# Clean up temporary files and exit
#
do_exit 1

View file

@ -0,0 +1,13 @@
bindings
bitmaps
clients/mwm
clients/uil
clients/xmbind
config
demos
doc
lib/Xm
lib/Mrm
localized
tests
tools/wml

View file

@ -0,0 +1,96 @@
#!/bin/ksh
#
# prune_logs
#
########################################################################
#set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
DEBUG=""
FIND_OPTIONS=""
OUTFILE="/dev/null"
PATHNAME_LIST=""
PROG_NAME="`basename $0`"
usage ()
{
cat <<eof
USAGE: $PROG_NAME [options] pathname_list
[-debug]
# Debugging output
[-atime +ndays]
[-ctime +ndays]
[-mtime +ndays]
# These flags are passed directly to find to identify
# which files and directories should pass the test for
# deletion.
[-h | -? | -help]
# Print usage and exit
pathname_list
# List of directories to be searched for out-of-date
# log files
$PROG_NAME uses find to search all the directories listed in
pathname_list for files and subdirectories which are out-of-date
as specified by the -atime, -ctime, and -mtime flags deleting
any so identified.
eof
}
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="echo"
shift 1 ;;
-atime | -ctime | -mtime)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
FIND_OPTIONS="$FIND_OPTIONS $1 $2 "
shift 2 ;;
-h | "-?" | -help)
usage $PROG_NAME;
do_exit 1 ;;
*)
PATHNAME_LIST="$PATHNAME_LIST $1"
shift 1;;
esac
done
#
# Clean up temporary files and exit
#
$DEBUG find $PATHNAME_LIST -depth -name '*' $FIND_OPTIONS -exec rm -f {} ";" > $OUTFILE 2>&1
do_exit 0

View file

@ -0,0 +1,96 @@
#!/bin/ksh
#
# prune_logs
#
########################################################################
#set -x
##########################################################################
#
# Script setup: THIS NEEDS TO BE FIRST
#
SCRIPTS_DIR="`dirname $0`"
if [ "" = "$SCRIPTS_DIR" ]; then
SCRIPTS_DIR=/project/dt/scripts
fi
if [ ! -f $SCRIPTS_DIR/script_setup.ksh ]; then
print -u2 "$PRG: File '$SCRIPTS_DIR/script_setup.ksh' NOT found!"
print -u2 "$PRG: Exiting ..."
exit 1
fi
. $SCRIPTS_DIR/script_setup.ksh
##########################################################################
##########################################################################
#
# Script specific global variables
#
##########################################################################
##########################################################################
DEBUG=""
FIND_OPTIONS=""
OUTFILE="/dev/null"
PATHNAME_LIST=""
PROG_NAME="`basename $0`"
usage ()
{
cat <<eof
USAGE: $PROG_NAME [options] pathname_list
[-debug]
# Debugging output
[-atime +ndays]
[-ctime +ndays]
[-mtime +ndays]
# These flags are passed directly to find to identify
# which files and directories should pass the test for
# deletion.
[-h | -? | -help]
# Print usage and exit
pathname_list
# List of directories to be searched for out-of-date
# log files
$PROG_NAME uses find to search all the directories listed in
pathname_list for files and subdirectories which are out-of-date
as specified by the -atime, -ctime, and -mtime flags deleting
any so identified.
eof
}
#
# Do command-line processing
#
while [ $# -gt 0 ]; do
case $1 in
-debug)
DEBUG="echo"
shift 1 ;;
-atime | -ctime | -mtime)
if [ $# -lt 2 ]; then
print -u2 "$PROG_NAME: $1 option missing value; exiting ..."
do_exit 1
fi
FIND_OPTIONS="$FIND_OPTIONS $1 $2 "
shift 2 ;;
-h | "-?" | -help)
usage $PROG_NAME;
do_exit 1 ;;
*)
PATHNAME_LIST="$PATHNAME_LIST $1"
shift 1;;
esac
done
#
# Clean up temporary files and exit
#
$DEBUG find $PATHNAME_LIST -depth -name '*' $FIND_OPTIONS -exec gzip -f {} ";" > $OUTFILE 2>&1
do_exit 0

View file

@ -0,0 +1,155 @@
#!/bin/ksh
#
# script_setup.ksh
#
########################################################################
#set -x
##########################################################################
##########################################################################
#
# Common global code
#
##########################################################################
##########################################################################
umask 002
TEMPORARY_FILES=""
trap '/bin/rm -f $TEMPORARY_FILES; exit 1' INT QUIT TERM
do_exit ()
{
do_delete_temporary_files
exit $1
}
do_delete_temporary_files ()
{
if [ -n "$TEMPORARY_FILES" ]; then
/bin/rm -f $TEMPORARY_FILES
TEMPORARY_FILES=""
fi
}
do_register_temporary_file ()
{
if [ -n "$1" ]; then
if [ -z "$TEMPORARY_FILES" ]; then
TEMPORARY_FILES="$1"
else
TEMPORARY_FILES="$TEMPORARY_FILES $1"
fi
fi
}
do_check_file ()
{
# $1 = the file to check
# $2 = file flag (e.g. "x" for -x, "f" for -f, etc.
# #3 = error message
case $2 in
-x) if [ ! -x $1 ]; then
print -u2 "Exiting ... Executable '$1 $3"
do_exit 1
fi ;;
-d) if [ ! -d $1 ]; then
print -u2 "Exiting ... Directory '$1 $3"
do_exit 1
fi ;;
-f) if [ ! -f $1 ]; then
print -u2 "Exiting ... File '$1 $3"
do_exit 1
fi ;;
-L) if [ ! -L $1 ]; then
print -u2 "Exiting ... Sym link '$1 $3"
do_exit 1
fi ;;
*) print -u2 "Exiting ... '$1' NOT found!"
do_exit 1 ;;
esac
}
##########################################################################
##########################################################################
#
# Directory and executable paths.
#
CLEAR_CASE_TOOL=/usr/atria/bin/cleartool
if [ "" = "$PROJECT_NAME" ]; then
LOG_DIR_BASE=/project/dt/logs/build
else
LOG_DIR_BASE=/project/${PROJECT_NAME}/logs/build
fi
##########################################################################
#
# Initialize the scripts and data files
#
BUILD_PROJECT=$SCRIPTS_DIR/build_project
BUILD_SUMMARY=$SCRIPTS_DIR/build_summary
BUILD_WORLD=$SCRIPTS_DIR/build_world
COMPONENT_FILE="-c $SCRIPTS_DIR/cde.components"
COMPRESS_MSG=$SCRIPTS_DIR/compress_msg
EXTRACT_LOG=$SCRIPTS_DIR/extract_log
EXTRACT_MSG=$SCRIPTS_DIR/extract_msg
INITIALIZE_VIEW=$SCRIPTS_DIR/initialize_view
CDE_COMPONENTS=$SCRIPTS_DIR/cde.components
CDEDOC_COMPONENTS=$SCRIPTS_DIR/cdedoc.components
CDETEST_COMPONENTS=$SCRIPTS_DIR/cdetest.components
MOTIF_COMPONENTS=$SCRIPTS_DIR/motif.components
X_COMPONENTS=$SCRIPTS_DIR/x11.components
BUILD_MSGS=$SCRIPTS_DIR/dt_make.msg
ERROR_MSGS=$SCRIPTS_DIR/dt_errors.msg
IGNORE_MSGS=$SCRIPTS_DIR/dt_ignore.msg
WARNING_MSGS=$SCRIPTS_DIR/dt_warnings.msg
##########################################################################
#
# Strings used in the Subject line of mailed reports
#
SUBJECT_BUILD_SUMMARY="CDE: Build Summary"
SUBJECT_SUBMISSIONS="CDE: Submissions"
SUBJECT_CHECKOUTS="CDE: Check-Outs"
SUBJECT_BUILD_COMPLETE="CDE: Build Complete"
SUBJECT_DATE='+%m/%d/%y'
##########################################################################
#
# Build Strings marking information extracted by the build_summary script.
#
BTAG_CMPL="BUILD COMPLETE"
BTAG_CFGS="BUILD CFG SPEC"
BTAG_DATE="BUILD DATE "
BTAG_DFMT="+%a %h %d, %H:%M"
BTAG_LOGD="BUILD LOG DIR "
BTAG_PRJT="BUILD PROJECT "
BTAG_PTFM="BUILD PLATFORM"
BTAG_TYPE="BUILD TYPE "
BTAG_VIEW="BUILD VIEW "
BTAG_ENDD="BUILD ENDED "
BTAG_LOGF="LOG FILE "
BTAG_STRT="BUILD STARTED "
BTAG_SYST="SYSTEM "
##########################################################################
#
# TOP of project development hierarchies
#
X_TOP=/proj/x11/xc
MOTIF_TOP=/proj/motif
CDE_TOP=/proj/cde
CDEDOC_TOP=/proj/cde
CDETEST_TOP=/proj/cde-test
##########################################################################
#
# Mail aliases for the project groups
#
TRW_MAIL_ALIAS="devtrw"
CDE_MAIL_ALIAS="devobj"
X_MAIL_ALIAS="devobj"

View file

@ -0,0 +1,85 @@
config
doc
fonts
lib/FS
lib/ICE
lib/PEX5
lib/SM
lib/X11
lib/XIE
lib/Xa
lib/Xau
lib/Xaw
lib/Xbsd
lib/Xdmcp
lib/Xext
lib/Xi
lib/Xmu
lib/Xp
lib/Xt
lib/Xtst
lib/font
lib/lbxutil
lib/oldX
lib/xkbfile
lib/xtrans
lib/zlib
nls
programs/Xaserver
programs/Xserver
programs/appres
programs/bdftopcf
programs/bitmap
programs/editres
programs/fsinfo
programs/fslsfonts
programs/fstobdf
programs/iceauth
programs/lbxproxy
programs/mkfontdir
programs/oclock
programs/proxymngr
programs/rgb
programs/rstart
programs/scripts
programs/smproxy
programs/twm
programs/x11perf
programs/xauth
programs/xclipboard
programs/xclock
programs/xcmsdb
programs/xconsole
programs/xdm
programs/xdpyinfo
programs/xfd
programs/xfindproxy
programs/xfs
programs/xfwp
programs/xhost
programs/xieperf
programs/xinit
programs/xkbcomp
programs/xkbevd
programs/xkbprint
programs/xkbutils
programs/xkill
programs/xlogo
programs/xlsatoms
programs/xlsclients
programs/xlsfonts
programs/xmag
programs/xmh
programs/xmodmap
programs/xprop
programs/xrdb
programs/xrefresh
programs/xrx
programs/xset
programs/xsetroot
programs/xsm
programs/xstdcmap
programs/xterm
programs/xwd
programs/xwininfo
programs/xwud

8
cde/admin/Imakefile Normal file
View file

@ -0,0 +1,8 @@
XCOMM $XConsortium: Imakefile /main/4 1995/10/30 13:41:46 rswiston $
#define IHaveSubdirs
#define PassCDebugFlags
SUBDIRS = IntegTools
MakeSubdirs($(SUBDIRS))
DependSubdirs($(SUBDIRS))

View file

@ -0,0 +1,44 @@
XCOMM $XConsortium: Imakefile /main/5 1996/04/21 19:06:35 drk $
#define IHaveSubdirs
#define PassCDebugFlags
SUBDIRS = post_install dbTools updateTools
#ifdef RsArchitecture
OVERRIDE=install.dt.ibm
#endif
#ifdef HPArchitecture
OVERRIDE=install.dt.hp
#endif
#ifdef SunArchitecture
LOCAL_CPP_DEFINES=-Usun
OVERRIDE=install.dt.sun
#endif
#ifdef UXPArchitecture
LOCAL_CPP_DEFINES=-Uuxp
OVERRIDE=install.dt.uxp
#endif
#ifdef USLArchitecture
LOCAL_CPP_DEFINES=-Uusl
OVERRIDE=install.dt.usl
#endif
#ifdef AlphaArchitecture
OVERRIDE=install.dt.dec
#endif
MakeSubdirs($(SUBDIRS))
AllTarget(install.dt $(OVERRIDE) dinstall.dt)
CppScriptTarget(install.dt,install.dt.src,$(LOCAL_CPP_DEFINES),)
CppScriptTarget($(OVERRIDE),$(OVERRIDE).src,$(LOCAL_CPP_DEFINES),)
CppScriptTarget(dinstall.dt,dinstall.dt.src,$(LOCAL_CPP_DEFINES),)
depend::

View file

@ -0,0 +1,213 @@
####################################################
### Configuration Instructions for DEC OSF1 Systems ###
####################################################
FIXME FIXME: Need to change this. Discuss /sbin/init.d/xdm script
and its operation.... -mcb
There are two ways to start the desktop:
* You can manually start the desktop Login Manager. The advantage
of using this method is that you will not have to edit
/etc/inittab.
* You can enable the system to automatically start the desktop
when the system is rebooted. This is done by editing
/etc/inittab.
Removing the Developer's Conference CDE Desktop
===============================================
It is imperative that Snapshot 1 and Snapshot 2 desktops do not
co-mingle. Installers and users should ensure that old clients and
configuration files are exited or removed.
Upgrading systems in a networked environment
--------------------------------------------
If CDE is installed in a network environment, it is imperative that
all systems be upgraded at the same time.
Removing the Snapshot 1 desktop
-------------------------------
Installers are advised to remove the Snapshot 1 Desktop files from
their systems. Those clients and files are obsolete.
Stopping Desktop clients before installing Snapshot 2
-----------------------------------------------------
If the Snapshot 1 desktop is not removed, ensure that all desktop
clients are inactive before installing the Snapshot 2 desktop. If the
desktop was started via /etc/inittab, issue the telinit command to
stop dtlogin and any other desktop client.
Removing the users's .dtprofile and .dt directory
-------------------------------------------------
It is strongly advised that all CDE users on the system remove or
rename their .dt directory and their .dtprofile. The Snapshot 2
Desktop is not compatible with the Snapshot 1 Desktop versions of
these files.
If users have customized their .dt/dtwmrc file and want to keep it,
they will need to cut and paste the appropriate pieces into the new
dtwmrc provided.
Before You Start the Desktop (HP-UX)
======================================
Special Configurations
----------------------
If your system has one of these special configurations, you may need to
edit certain Login Manager files before starting the desktop. See
chapter 2 of the Getting Started Guide:
* If the system console is a non-bitmap device.
* If the system is an X terminal or a host for X terminals.
* If the system has more than one display.
The Subprocess Control Daemon
=============================
If you are working in an environment where a CDE Desktop action needs
to start an application on another workstation running CDE, the
Subprocess Control Daemon configuration must be completed on both
workstations.
1. Log in as root.
2. For authentication, the user's home directory on a remote system
must be mounted to the local system.
3. To run an application with a WINDOW_TYPE of NO_STDIO (see Appendix
A, Advanced User's and System Administrator's Guide), you will need
to provide NFS-access by the local (client) system to the remote
(application server) system's /var directory (if /var is a distinct
volume), or / directory (if it is not). The mount point must be
/nfs/<remote_host>/var (again, if /var is a distinct volume) or
/nfs/<remote_host>/ (if it is not). Export the appropriate
directory in /etc/exports on both the local and remote hosts.
To Start And Stop the Desktop Manually
======================================
To Start the Desktop:
--------------------
1. Log in as root.
2. Enter:
/usr/dt/bin/dtlogin -daemon
This starts the Login Manager and displays the Login screen.
Logging in starts a desktop session.
To Stop the Desktop:
--------------------
When you stop the Login Manager, you automatically kill all
X servers and desktop sessions that it started.
1. In a terminal emulator window, log in as root.
2. Obtain the process id of the parent Login Manager by entering:
cat /var/dt/Xpid
3. Kill the Login Manager by entering:
kill -TERM <process_id>
where <process_id> is the value obtained from Xpid.
To Enable and Disable Desktop Auto-Start
========================================
When your system is configured to start the desktop automatically, the
desktop Login Manager runs when the system is booted.
To start the desktop automatically, you must edit /etc/inittab to:
* Add a line that starts the CDE Desktop.
* Set the default run level to the run level assigned to the CDE
Desktop.
NOTE: Edit /etc/inittab very carefully.
Errors in the file can prevent the system from booting
successfully.
To Enable Desktop Auto-Start
----------------------------
1. Log in as root.
2. If you are running HP VUE, shut it down by entering:
/etc/telinit <n>; exit
where <n> is a run level assigned to the console and not
assigned to HP VUE or to halting the system. You can find a
run level by examinining the lines beginning with cons and vue
in /etc/inittab. For example, the following lines indicate
that you can use run levels other than 3, 4, or 6.
halt:6:wait:/usr/lib/X11/ignition/shutdown.ksh
cons:012456:respawn:/etc/getty -h console console
vue :34:respawn:/etc/vuerc
3. Make a backup copy of /etc/inittab.
4. Open /etc/inittab for editing (in a diskless cluster, /etc/inittab
is a context-dependent file).
5. Look for the line that sets the default run level (starting with
init:). Set the default run level to 5.
init:5:initdefault:
6. Add a line that starts the desktop at that run level:
dt :5:respawn:/usr/dt/bin/dtrc
To Disable Desktop Auto-Start
-----------------------------
You can restore a console by changing to a run level assigned to a
console and not assigned to the desktop.
Switching Between CDE and HP VUE
--------------------------------
You can switch back and forth between CDE and HP VUE by executing:
/etc/telinit <n>; exit
where <n>=3 switches to HP VUE and <n>=5 switches to CDE.

View file

@ -0,0 +1,207 @@
####################################################
### Configuration Instructions for HP-UX Systems ###
####################################################
There are two ways to start the desktop:
* You can manually start the desktop Login Manager. The advantage
of using this method is that you will not have to edit
/etc/inittab.
* You can enable the system to automatically start the desktop
when the system is rebooted. This is done by editing
/etc/inittab.
Removing the Developer's Conference CDE Desktop
===============================================
It is imperative that Snapshot 1 and Snapshot 2 desktops do not
co-mingle. Installers and users should ensure that old clients and
configuration files are exited or removed.
Upgrading systems in a networked environment
--------------------------------------------
If CDE is installed in a network environment, it is imperative that
all systems be upgraded at the same time.
Removing the Snapshot 1 desktop
-------------------------------
Installers are advised to remove the Snapshot 1 Desktop files from
their systems. Those clients and files are obsolete.
Stopping Desktop clients before installing Snapshot 2
-----------------------------------------------------
If the Snapshot 1 desktop is not removed, ensure that all desktop
clients are inactive before installing the Snapshot 2 desktop. If the
desktop was started via /etc/inittab, issue the telinit command to
stop dtlogin and any other desktop client.
Removing the users's .dtprofile and .dt directory
-------------------------------------------------
It is strongly advised that all CDE users on the system remove or
rename their .dt directory and their .dtprofile. The Snapshot 2
Desktop is not compatible with the Snapshot 1 Desktop versions of
these files.
If users have customized their .dt/dtwmrc file and want to keep it,
they will need to cut and paste the appropriate pieces into the new
dtwmrc provided.
Before You Start the Desktop (HP-UX)
======================================
Special Configurations
----------------------
If your system has one of these special configurations, you may need to
edit certain Login Manager files before starting the desktop. See
chapter 2 of the Getting Started Guide:
* If the system console is a non-bitmap device.
* If the system is an X terminal or a host for X terminals.
* If the system has more than one display.
The Subprocess Control Daemon
=============================
If you are working in an environment where a CDE Desktop action needs
to start an application on another workstation running CDE, the
Subprocess Control Daemon configuration must be completed on both
workstations.
1. Log in as root.
2. For authentication, the user's home directory on a remote system
must be mounted to the local system.
3. To run an application with a WINDOW_TYPE of NO_STDIO (see Appendix
A, Advanced User's and System Administrator's Guide), you will need
to provide NFS-access by the local (client) system to the remote
(application server) system's /var directory (if /var is a distinct
volume), or / directory (if it is not). The mount point must be
/nfs/<remote_host>/var (again, if /var is a distinct volume) or
/nfs/<remote_host>/ (if it is not). Export the appropriate
directory in /etc/exports on both the local and remote hosts.
To Start And Stop the Desktop Manually
======================================
To Start the Desktop:
--------------------
1. Log in as root.
2. Enter:
/usr/dt/bin/dtlogin -daemon
This starts the Login Manager and displays the Login screen.
Logging in starts a desktop session.
To Stop the Desktop:
--------------------
When you stop the Login Manager, you automatically kill all
X servers and desktop sessions that it started.
1. In a terminal emulator window, log in as root.
2. Obtain the process id of the parent Login Manager by entering:
cat /var/dt/Xpid
3. Kill the Login Manager by entering:
kill -TERM <process_id>
where <process_id> is the value obtained from Xpid.
To Enable and Disable Desktop Auto-Start
========================================
When your system is configured to start the desktop automatically, the
desktop Login Manager runs when the system is booted.
To start the desktop automatically, you must edit /etc/inittab to:
* Add a line that starts the CDE Desktop.
* Set the default run level to the run level assigned to the CDE
Desktop.
NOTE: Edit /etc/inittab very carefully.
Errors in the file can prevent the system from booting
successfully.
To Enable Desktop Auto-Start
----------------------------
1. Log in as root.
2. If you are running HP VUE, shut it down by entering:
/etc/telinit <n>; exit
where <n> is a run level assigned to the console and not
assigned to HP VUE or to halting the system. You can find a
run level by examinining the lines beginning with cons and vue
in /etc/inittab. For example, the following lines indicate
that you can use run levels other than 3, 4, or 6.
halt:6:wait:/usr/lib/X11/ignition/shutdown.ksh
cons:012456:respawn:/etc/getty -h console console
vue :34:respawn:/etc/vuerc
3. Make a backup copy of /etc/inittab.
4. Open /etc/inittab for editing (in a diskless cluster, /etc/inittab
is a context-dependent file).
5. Look for the line that sets the default run level (starting with
init:). Set the default run level to 5.
init:5:initdefault:
6. Add a line that starts the desktop at that run level:
dt :5:respawn:/usr/dt/bin/dtrc
To Disable Desktop Auto-Start
-----------------------------
You can restore a console by changing to a run level assigned to a
console and not assigned to the desktop.
Switching Between CDE and HP VUE
--------------------------------
You can switch back and forth between CDE and HP VUE by executing:
/etc/telinit <n>; exit
where <n>=3 switches to HP VUE and <n>=5 switches to CDE.

View file

@ -0,0 +1,285 @@
=================================
Instructions for IBM AIX Systems 04/11/94
=================================
The following instructions assume you have already installed the Common Desktop
Environment according to the Installation Instructions on the CD jacket. If
CDE is used in a networked environment, all systems should be upgraded at the
same time.
There are two ways to start the desktop:
* You can manually start the desktop Login Manager. This method can be used to
avoid rebooting the system. See the section To Start and Stop the Desktop
Manually .
* You can configure the system to start the desktop automatically upon reboot.
See the section To Enable and Disable Desktop Auto-Start..
Before You Start the Desktop
============================
******************************************************************************
If you have a previous Common Desktop Environment (CDE) version on the system:
******************************************************************************
Advise all CDE users on the system to remove or rename their $HOME/.dt directory
and their $HOME/.dtprofile. The new files are not compatible with the old
ones. If users have customized the $HOME/.dt/dtwmrc file and want to keep
it, they will need to cut and paste the appropriate pieces into the new dtwmrc
file provided.
Become the root user on the system. Make sure all other users on the system
are logged out of CDE. Kill the Login Manager.
cat /etc/opt/dt/Xpid (obtain Login Manager process_id)
kill -TERM <process_id>
Killing the Login Manager process works no matter how the process was started.
An alternate method is to stop the system resource control for the desktop.
This method should only be used if CDE was configured on the system with
/opt/dt/bin/dtconfig -e. If you don't know how CDE was configured on the
system, lssrc -s dtsrc will return the status of dtsrc. If no status
is returned, use the kill method in the previous paragraph.
stopsrc -c -s dtsrc
Completely remove the /etc/opt and /opt directory structures from the system.
The install script mentioned in the README should have already given you the
chance to remove these. Remove the dtsrc subsystem only if CDE was configured
on the system with /opt/dt/bin/dtconfig -e:
rmssys -s dtsrc
Default Configuration
The Instructions for IBM AIX Systems show basic installation information.
We recommend following these instructions before doing any personal
customization work except in the case of the Special Configurations.
Special Configurations
If your system has one of these special configurations, you may need to edit
certain Login Manager files before starting the desktop. More detailed
information is in the CDE Getting Started Guide.
* If the system console is a non-bitmap device (e.g. an ascii
terminal)i, comment out the following line in /usr/dt/config/Xservers that
starts the Xserver on the console.
# :0 Local local@console /path/X [options] :0
* If the system is an X terminal or a host for X terminals,
CDE must be running on the host and X Display Manager Control Protocol
(XDMCP) must be enabled for the X terminal and must direct the Xterminal to
contact the Login Manager on a specified host.
* If the system has more than one display, see Configuring
Multiple Displays in the CDE Getting Started Guide.
To Start and Stop the Desktop Manually
--------------------------------------
There are two manual methods to start the desktop:
* You can manually start the CDE Login Manager. To use this method, you must
have permission to log in as root. This method is preferable, because Login
Manager sets certain environment variables that are needed during desktop
sessions. See the section Manually Starting and Stopping Login Manager.
* You can log in using conventional methods, and then manually run the
CDE Session Manager, which starts a desktop session. See the section
Manually Starting and Stopping Session Manager.
Manually Starting and Stopping Login Manager
--------------------------------------------
To manually start Login Manager:
1. Log in as root.
2. Enter:
/usr/dt/bin/dtlogin -daemon
This starts the Login Manager and displays the Login screen.
Logging in starts a desktop session.
To manually stop Login Manager:
When you stop the Login Manager, you automatically kill all X servers and
desktop sessions that it started.
1. In a terminal emulator window, log in as root.
2. Obtain the process id of the Login Manager by entering:
cat /var/dt/Xpid
3. Kill the Login Manager by entering:
kill -TERM <process_id>
where <process_id> is the value obtained from Xpid.
Manually Starting and Stopping Session Manager
----------------------------------------------
Using this method
* leaves you responsible for setting certain environment variables to values
required by the desktop if suitable values are not already set in your
environment.
* allows you to use CDE while others serving from the same system, including
the console are not.
1. Log in. (You do not need to log in as root).
2. With no window system running, from the command line enter:
/usr/bin/X11/xinit /usr/dt/bin/Xsession
HINT: if a .Xinitrc file is enabled, make sure it is NOT starting another
window manager. Do NOT put the /usr/dt/bin/Xsession in your .profile!
Session Manager stops when you log out.
To Enable and Disable Desktop Auto-Start
----------------------------------------
AIX can be configured to start the CDE Desktop automatically when the system
is booted. This method starts CDE as the Session Manager for all users on
the system.
There are several ways to do this configuration:
* From a command line.
* Using SMIT menus.
* Using SMIT fastpath.
From a Command Line
-------------------
To Enable Desktop Auto-Start:
1. Log in as root.
2. From the command line, enter:
/usr/dt/bin/dtconfig -e
3. Reboot the machine.
When the system is rebooted, a dtlogin screen will appear. If you prefer not
to reboot at this time, this command will start the Login Manager now.
startsrc -s dtsrc
To Disable Desktop Auto-Start:
1. Log in as root.
2. From the command line, enter:
/usr/dt/bin/dtconfig -d
3. Reboot the machine.
When the system is rebooted, CDE is no longer configured. If you prefer not
to reboot at this time, this command will stop the Login Manager now.
stopsrc -c -s dtsrc
Using SMIT Menus
----------------
To Enable Desktop Auto-Start:
1. Log in as root.
2. From the command line, enter:
/usr/bin/smit
3. Go to System Environments.
4. Go to Change System User Interface.
5. Select CDE environment.
6. Press [Enter] when using ASCII SMIT or Click "Do" when using GUI
SMIT interface.
7. Exit SMIT.
8. Reboot the machine.
To Disable Desktop Auto-Start:
1. Log in as root.
2. From the command line, enter
/usr/bin/smit
3. Go to System Environments.
4. Go to Change System User Interface.
5. Select Command-line environment.
6. Press [Enter] when using ASCII SMIT or Click "Do" when
using GUI SMIT interface.
7. Exit out of SMIT.
8. Reboot the machine.
Using SMIT `fastpath'
---------------------
To Enable Desktop Auto-Start:
1. Log in as root.
2. From the command line, enter:
/usr/bin/smit dtconfig
3. Select CDE environment.
4. Press [Enter] when using ASCII SMIT or Click "Do" when using GUI
SMIT interface.
5. Exit SMIT.
6. Reboot the machine.
To Disable Desktop Auto-Start:
1. Log in as root.
2. From the command line, enter:
/usr/bin/smit dtconfig
3. Select Command-line environment.
4. Press [Enter] when using ASCII SMIT or Click "Do" when using GUI
SMIT interface.
5. Exit out of SMIT.
6. Reboot the machine.
Deinstall Instructions
======================
The CD also includes a script for deinstallation. With the CD-ROM mounted
according to the Installation Instructions on the CD jacket, enter:
./dinstall.dt
or
./DINSTALL.DT
Everything installed from the installation scripts will be deinstalled.

View file

@ -0,0 +1,79 @@
####################################
### Instructions for SCO Systems ###
####################################
System Requirements
===================
* SCO Open Desktop or SCO Open Server Version 3.0
* 386-33, 486, or Pentium based processor
* 16MB memory
* 1024x768, 256 color graphics system
* 70MB free disk space
* 30MB Swap Space
Before You Start the Desktop
============================
If your system has one of these special configurations, you may need to
edit certain Login Manager files before starting the desktop. See
chapter 2 of the Getting Started Guide:
* If the system console is a non-bitmap device.
* If the system is an X terminal or a host for X terminals.
* If the system has more than one display.
To Start and Stop the Desktop
============================
1. Log in as the user who will use the desktop and be running the Korn or
Bourne shells (ksh or sh).
2. First, add the following two lines to your .profile:
PATH=$PATH:/opt/dt/bin
. /opt/dt/bin/dtsearchpath
These lines add the desktop search path to your PATH variable.
3. If you have a .startxrc file in your home directory, move it to a
backup location or name by entering:
mv .startxrc old.startxrc
4. Copy /etc/opt/dt/dt.startxrc to your home directory and rename it
to .startxrc by entering:
cp /etc/opt/dt/dt.startxrc .startxrc
5. Do one of the following:
* Log out of your ODT session and log in via Scologin.
* Or, at a shell prompt on a multiscreen not running the X
server, run startx by entering:
startx
Be sure to log out to reinvoke your .profile correctly.

View file

@ -0,0 +1,207 @@
#################################################### 04/08/94
### Instructions for the Sun Solaris Environment ###
####################################################
Removing the October '93 Developer's Conference CDE Desktop
===========================================================
It is imperative that CDE Snapshot 1 and Snapshot 2 desktops do not
co-mingle. Installers and users should ensure that old clients and
configuration files are exited or removed. Use the instructions
in this section if the October '93 Snapshot 1 version of CDE is
installed on your system.
Upgrading systems in a networked environment
--------------------------------------------
If CDE is installed in a network environment, it is imperative that
all systems be upgraded at the same time.
Removing the Snapshot 1 desktop
-------------------------------
Installers are advised to remove the Snapshot 1 Desktop files from
their systems. Those clients and files are obsolete. The dinstall.dt
script which was provided on the Snapshot 1 CD may be used for this
purpose.
Stopping Desktop clients before installing Snapshot 2
-----------------------------------------------------
If the Snapshot 1 desktop is not removed, ensure that all desktop
clients are inactive before installing the Snapshot 2 desktop.
Removing the users's .dtprofile and .dt directory
-------------------------------------------------
It is strongly advised that all CDE users on the system remove or
rename their .dt directory and their .dtprofile. The Snapshot 2
Desktop is not compatible with the Snapshot 1 Desktop versions of
these files.
If users have customized their .dt/dtwmrc file and want to keep it,
they will need to cut and paste the appropriate pieces into the new
dtwmrc provided.
Before You Start the Desktop
============================
You can start the CDE Desktop by:
* Configuring the system to auto-start the CDE Desktop when
the system is booted.
* Or, manually starting the desktop Login Manager.
Special Configurations
----------------------
If your system has one of these special configurations, you may need to
edit certain Login Manager files before starting the desktop. See the
Advanced User's and System Administrator's Guide:
* If the system console is a non-bitmap device.
* If the system is an X terminal or a host for X terminals.
* If the system has more than one display.
To Enable and Disable Desktop Auto-Start
========================================
When auto-start is enabled, the CDE Login Manager runs automatically
each time the system is booted. You then log in using the
CDE Login Screen.
To Enable Desktop Auto-Start
----------------------------
1. Log in as root.
2. From the command line, enter:
/usr/dt/bin/dtconfig -e
A CDE Login screen will appear the next time the system is booted.
To Disable Desktop Auto-Start
-----------------------------
1. Log in as root.
2. From a command line, enter:
/usr/dt/bin/dtconfig -d
A conventional ascii login will appear the next time the system
is booted.
To Start and Stop the Desktop Manually
======================================
There are two ways to start the desktop manually:
* You can manually start the CDE Login Manager, which will display the
desktop Login screen. To use this method, you must have permission
to log in as root.
This method is the preferable manual method, since Login Manager sets
certain environment variables that are needed during desktop sessions.
* You can log in using conventional methods, and then manually run the CDE
Session Manager, which starts a desktop session.
Manually Starting and Stopping Login Manager
--------------------------------------------
When you use this method, you log in using the desktop Login screen.
When you log in, a desktop session starts.
To manually start Login Manager:
1. Log in as root.
2. With no window system running, from the command line enter:
/usr/dt/bin/dtlogin
To manually stop Login Manager:
1. If you are in a desktop session, exit (via front panel button).
2. On the Login screen, choose Options->Command Line
to return to a command line.
3. On the command line, enter [Ctrl]c (hold down [Ctrl] as
you press [c]).
You are now back to your root login with a command line prompt.
Manually Starting and Stopping Session Manager
----------------------------------------------
If you use this method, you are responsible for setting certain environment
variables to values required by the desktop if suitable values are
not already set in your environment. See the Advanced User's and System
Administrator's Guide.
1. Log in. (You do not need to log in as root).
If you set LD_LIBRARY_PATH (its not required for CDE), make sure the
/usr/dt/lib directory is at head of list. In addition, you should
set the environment variable OPENWINHOME to /usr/openwin.
2. With no window system running, from the command line enter:
/usr/openwin/bin/xinit /usr/dt/bin/Xsession
This starts your CDE desktop session. Exit button is on front panel.
To Configure Subprocess Control Daemon remote access
====================================================
If you are working in an environment where a CDE Desktop action needs to
start an application on another workstation running CDE, the Subprocess
Control Daemon must have access to the /tmp directory of the remote
workstation.
The following procedure will provide this.
1. Log in as root.
2. Provide NFS-access by the local (client) system to the remote (application
server) system's /tmp directory. The mount point must be
/nfs/<remote_host>/tmp.
On systems running automount, the following procedure provides this mount:
a. Enter:
mkdir /nfs
b. Add the following lines to /etc/auto_master:
/nfs -hosts -nosuid
c. To allow export of the /tmp directory, add the following line
to /etc/dfs/dfstab:
shared -F nfs -o rw /tmp
3. The subprocess control daemon will have correct access the next time
the workstation is booted.

View file

@ -0,0 +1,207 @@
#########################################################################
# Configuration Instructions for the UnixWare 1.1 or later Environments #
#########################################################################
The following instructions assume you have already installed the Common Desktop
Environment according to the Installation Instructions on the CD jacket.
There are two ways to start the desktop:
* You can manually start the desktop Login Manager. This method can be used to
avoid rebooting the system. See the section To Start and Stop the Desktop
Manually .
* You can configure the system to start the desktop automatically upon reboot.
See the section To Enable and Disable Desktop Auto-Start..
Before You Start the Desktop
============================
******************************************************************************
If you have a previous Common Desktop Environment (CDE) version on the system:
******************************************************************************
*Advise all CDE users on the system to remove or rename their $HOME/.dt directory
and their $HOME/.dtprofile. The new files are not compatible with the old
ones. If users have customized the $HOME/.dt/dtwmrc file and want to keep
it, they will need to cut and paste the appropriate pieces into the new dtwmrc
file provided.
*Become the root user on the system. Make sure all other users on the system
are logged out of CDE. Kill the Login Manager if running.
kill -15 `cat /etc/opt/dt/Xpid`
Killing the Login Manager process works no matter how the process was started.
An alternate method is to stop the system resource control for the desktop.
This method should only be used if CDE was configured on the system by
replacing the /etc/rc2.d/S69xdm script. You can tell if CDE was configured
this way by checking the existence of /etc/S69xdm.old. If this file
exists, then do the following:
mv /etc/S69xdm.old /etc/rc2.d/S69xdm
Special Configurations
----------------------
If your system has one of these special configurations, you may need to
edit certain Login Manager files before starting the desktop. See the
Advanced User's and System Administrator's Guide:
* If the system console is not a UnixWare supported bitmap device.
* If the system is an X terminal or a host for X terminals.
* If the system has more than one display.
To Start and Stop the Desktop Manually
======================================
There are two ways to start the desktop manually:
* You can manually start the CDE Login Manager, which will
display the desktop Login screen. To use this method, you
must have permission to log in as root.
This method is preferable, since Login Manager sets certain
environment variables that are needed during desktop sessions.
* You can log in using conventional methods, and then manually
run the CDE Session Manager, which starts a desktop session.
See the section Manually Starting and Stopping the Session
Manager.
Manually Starting and Stopping Login Manager
--------------------------------------------
When you use this method, you log in using the CDE Login screen.
When you log in, a desktop session starts.
To manually start Login Manager:
1. Log in as root.
2. Type:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/dt/lib:/usr/X/lib export LD_LIBRARY_PATH
3. With no window system running, from the command line enter:
/usr/dt/bin/dtlogin -daemon
The CDE Graphical Login screen will appear.
4. For security reasons, you need to exit the shell that invoked dtlogin.
Type <Alt><SysRq> p
(i.e. Press the <Alt> and <SysRq> keys at the same time,
release both and then hit 'p'. )
You should return to an ASCII terminal session.
5. Type:
<return>
exit
6. You will be asked if you want your virtual terminals closed at once.
Type: n
The CDE Graphical Login screen will reappear.
To manually stop Login Manager:
1. Log out of the CDE Desktop.
2. From the options menu of the CDE Graphical Login choose Command Line.
This will give you the ASCII login screen.
3. Log in as root.
4. Type:
kill -15 `cat /usr/dt/config/Xpid`
Manually Starting and Stopping Session Manager
----------------------------------------------
If you use this method, you are responsible for setting certain
environment variables to values required by the desktop if suitable
values are not already set in your environment. Refer to the Getting
Started Guide for setting the necessary environment variables.
1. Log in. (You do not need to log in as root).
2. With no window system running, from the command line enter:
LD_LIBRARY_PATH=/usr/dt/lib:/usr/X/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
PATH=$PATH:/usr/X/bin
export PATH
/usr/X/bin/olinit /usr/dt/bin/Xsession
The Session Manager stops when you log out.
When auto-start is enabled, the CDE Login Manager runs
automatically each time the system is booted. You then log
in using the CDE Login Screen.
To Enable and Disable Desktop Auto-Start
========================================
UnixWare can be configured to start the CDE Desktop automatically when the system
is booted. This method starts CDE as the Session Manager for all users on
the system.
To Enable Desktop Auto-Start
----------------------------
1. Log in as root.
2. From the command line, enter:
NOTE: Step 'a' is necessay only if the /etc/rc2.d/S69xdm
script has been modified after UnixWare was
installed on your system and if the graphical login
is enabled. A copy of the S69xdm script that
came with the UnixWare installation is located
in /usr/X/adm.
a. cp /etc/rc2.d/S69xdm /etc/S69xdm.preCDE
b. cp /usr/dt/config/S69xdm /etc/rc2.d/S69xdm
A CDE Login screen will appear the next time the system is booted.
To Disable Desktop Auto-Start
-----------------------------
1. Log in as root.
2. From a command line, enter:
rm /etc/rc2.d/S69xdm
If you would like the original UnixWare Desktop Manager Login
to appear upon reboot:
/usr/X/bin/enable_glogin
- OR -
If a copy of S69xdm was saved as outlined in the section
"To Enable Desktop Auto-Start":
mv /etc/S69xdm.preCDE /etc/rc2.d/S69xdm
The UnixWare Desktop Manager Login will appear
the next time the system is rebooted.

View file

@ -0,0 +1,207 @@
#########################################################################
# Configuration Instructions for the Fujitsu UXP/DS Environments #
#########################################################################
The following instructions assume you have already installed the Common Desktop
Environment according to the Installation Instructions on the CD jacket.
There are two ways to start the desktop:
* You can manually start the desktop Login Manager. This method can be used to
avoid rebooting the system. See the section To Start and Stop the Desktop
Manually .
* You can configure the system to start the desktop automatically upon reboot.
See the section To Enable and Disable Desktop Auto-Start..
Before You Start the Desktop
============================
******************************************************************************
If you have a previous Common Desktop Environment (CDE) version on the system:
******************************************************************************
*Advise all CDE users on the system to remove or rename their $HOME/.dt directory
and their $HOME/.dtprofile. The new files are not compatible with the old
ones. If users have customized the $HOME/.dt/dtwmrc file and want to keep
it, they will need to cut and paste the appropriate pieces into the new dtwmrc
file provided.
*Become the root user on the system. Make sure all other users on the system
are logged out of CDE. Kill the Login Manager if running.
kill -15 `cat /etc/opt/dt/Xpid`
Killing the Login Manager process works no matter how the process was started.
An alternate method is to stop the system resource control for the desktop.
This method should only be used if CDE was configured on the system by
replacing the /etc/rc2.d/S69xdm script. You can tell if CDE was configured
this way by checking the existence of /etc/S69xdm.old. If this file
exists, then do the following:
mv /etc/S69xdm.old /etc/rc2.d/S69xdm
Special Configurations
----------------------
If your system has one of these special configurations, you may need to
edit certain Login Manager files before starting the desktop. See the
Advanced User's and System Administrator's Guide:
* If the system console is not a UnixWare supported bitmap device.
* If the system is an X terminal or a host for X terminals.
* If the system has more than one display.
To Start and Stop the Desktop Manually
======================================
There are two ways to start the desktop manually:
* You can manually start the CDE Login Manager, which will
display the desktop Login screen. To use this method, you
must have permission to log in as root.
This method is preferable, since Login Manager sets certain
environment variables that are needed during desktop sessions.
* You can log in using conventional methods, and then manually
run the CDE Session Manager, which starts a desktop session.
See the section Manually Starting and Stopping the Session
Manager.
Manually Starting and Stopping Login Manager
--------------------------------------------
When you use this method, you log in using the CDE Login screen.
When you log in, a desktop session starts.
To manually start Login Manager:
1. Log in as root.
2. Type:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/dt/lib:/usr/X/lib export LD_LIBRARY_PATH
3. With no window system running, from the command line enter:
/usr/dt/bin/dtlogin -daemon
The CDE Graphical Login screen will appear.
4. For security reasons, you need to exit the shell that invoked dtlogin.
Type <Alt><SysRq> p
(i.e. Press the <Alt> and <SysRq> keys at the same time,
release both and then hit 'p'. )
You should return to an ASCII terminal session.
5. Type:
<return>
exit
6. You will be asked if you want your virtual terminals closed at once.
Type: n
The CDE Graphical Login screen will reappear.
To manually stop Login Manager:
1. Log out of the CDE Desktop.
2. From the options menu of the CDE Graphical Login choose Command Line.
This will give you the ASCII login screen.
3. Log in as root.
4. Type:
kill -15 `cat /usr/dt/config/Xpid`
Manually Starting and Stopping Session Manager
----------------------------------------------
If you use this method, you are responsible for setting certain
environment variables to values required by the desktop if suitable
values are not already set in your environment. Refer to the Getting
Started Guide for setting the necessary environment variables.
1. Log in. (You do not need to log in as root).
2. With no window system running, from the command line enter:
LD_LIBRARY_PATH=/usr/dt/lib:/usr/X/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
PATH=$PATH:/usr/X/bin
export PATH
/usr/X/bin/olinit /usr/dt/bin/Xsession
The Session Manager stops when you log out.
When auto-start is enabled, the CDE Login Manager runs
automatically each time the system is booted. You then log
in using the CDE Login Screen.
To Enable and Disable Desktop Auto-Start
========================================
UnixWare can be configured to start the CDE Desktop automatically when the system
is booted. This method starts CDE as the Session Manager for all users on
the system.
To Enable Desktop Auto-Start
----------------------------
1. Log in as root.
2. From the command line, enter:
NOTE: Step 'a' is necessay only if the /etc/rc2.d/S69xdm
script has been modified after UnixWare was
installed on your system and if the graphical login
is enabled. A copy of the S69xdm script that
came with the UnixWare installation is located
in /usr/X/adm.
a. cp /etc/rc2.d/S69xdm /etc/S69xdm.preCDE
b. cp /usr/dt/config/S69xdm /etc/rc2.d/S69xdm
A CDE Login screen will appear the next time the system is booted.
To Disable Desktop Auto-Start
-----------------------------
1. Log in as root.
2. From a command line, enter:
rm /etc/rc2.d/S69xdm
If you would like the original UnixWare Desktop Manager Login
to appear upon reboot:
/usr/X/bin/enable_glogin
- OR -
If a copy of S69xdm was saved as outlined in the section
"To Enable Desktop Auto-Start":
mv /etc/S69xdm.preCDE /etc/rc2.d/S69xdm
The UnixWare Desktop Manager Login will appear
the next time the system is rebooted.

View file

@ -0,0 +1,11 @@
XCOMM $XConsortium: Imakefile /main/5 1996/04/23 21:26:14 drk $
LOCAL_CPP_DEFINES = -DCDE_INSTALLATION_TOP=$(CDE_INSTALLATION_TOP) \
-DCDE_CONFIGURATION_TOP=$(CDE_CONFIGURATION_TOP) \
-DCDE_LOGFILES_TOP=$(CDE_LOGFILES_TOP) \
-Usun -Uusl -Uuxp -Uaix -Udec -UAIX -Uibm -Uhp
AllTarget(installCDE dinstallCDE)
CppScriptTarget(installCDE,installCDE.src,$(LOCAL_CPP_DEFINES),)
CppScriptTarget(dinstallCDE,dinstallCDE.src,$(LOCAL_CPP_DEFINES),)

View file

@ -0,0 +1,216 @@
UDB FILE FORMAT
The udb (universal data base) format attempts to allow product delivery
information for several closely related products to co-exist in the
same database file. This is an HP Corvallis home-grown format which
was originally created to deal with the delivery of similar products
on hp-ux, domain and osf platforms.
The format is meant to be more or less free form without regard to
intervening newlines or whitespace. Comments violate this principle
by being line oriented. Any line whose first non-whitespace character
is a '#' is considered a comment. A semi-colon may be placed between
two identifiers to break them up into separate tokens. If more than
one keyword/value pair is placed on a line, semi-colons can be used
to separate them visually. The semi-colons are ignored by the parser.
The special syntax characters ( "{",":",";","=","}") may be embedded
in an identifier by escaping them with a backslash.
Semantic Note:
The tools associated with the udb databases apply semantic meaning
to seven kinds of information about a file. There are seven Special
Tokens which may be used to identify the keywords with which the
semantic information should be associated.
Special Token description
------------ -----------
<SRC> The path (relative to the top of a
build tree) to the source of a
product deliverable file.
<DEST> The full destination path location of
a deliverable file in the target
machine's file system.
<LNK> The full path name (in the target
machine's file system) of the source
file for a symbolic link. (i.e. The file
pointed to).
<TYPE> The kind of file object being installed.
(i.e. file, sym_link, hard_link,
directory, etc. )
<MODE> The (numeric) permissions assigned to
the new object. This value should be
in the usual octal notation.
<OWNER> The symbolic name of the owner of the
new file.
<GROUP> The symbolic name of the group of the
new file.
The hp-ux fileset databases have traditionally used the
following keywords for these items:
hpux keyword Special Token
------------ -----------
a_out_location : <SRC>
install_target : <DEST>
link_source : <LNK>
type : <TYPE>
mode : <MODE>
owner : <OWNER>
group : <GROUP>
The default for the udb databases is to associate the <SRC> semantics
with the "a_out_location" keyword, the <DEST> semantics with the
"install_target" keyword, etc. This behavior may be modified by
assigning a special token to a keyword in the Release Definition
Section of the database file.
General Format:
A udb file has two sections. First, a Release Definition Section,
which describes the keyword pairs to be maintained for a given
release stream and second, the individual file records for each
file which is to be delivered.
1) Release Definition Section
The Release Definition Section defines the keyword-value
pairs which are to be maintained for each release. The
release_id is an identifier which is used to identify the
set of defaults for a particular release. The special
release_id of "default" is used specify the default set
of keyword/value pairs for an undefined release_id. The
values associated with keywords in this section provide
defaults for those keywords in later File Entries.
The name and number of these pairs need not be the same for
all release streams.
------------------------------
For example:
The following entry in the Release Definition Section
{ hpux : defaults
src = <SRC>
dest = <DEST>
link_source =
type = file
perm = <MODE>
perm = 0555
owner = bin
group = bin
project = xwindows
}
defines the defaults for the "hpux" release stream. It
states that we should maintain information about src, dest, link_source, type, perm, owner, group and project in the database. Furthermore
the semantics of <SRC> are to be associated with the keyword "src",
<DEST> with "dest", link_source is associated with <LNK> by default,
and type is associated with <TYPE> by default. Note that we associate
perm with <MODE> semantics and supply a default value (0555) different
from the automatic 0444 default. Owner and group have their usual
meaning and a field called "project" is defined with a default value
of "xwindows". No semantic information is known about the "project"
field but it's value will be maintained.
-------------------------
2) File Entries
After the Release Definition Section, come the entries for
the deliverable files comprising the release. The build-tree-top
relative path name of a source file is followed by one or more
destination specifications which describe where in the product
this file should go, as well as the ownerships/permissions etc. that
should be associated with it. Any missing keyword/value pairs will
be filled in by the defaults provided in the Release Definition
Section.
Information may differ between release
streams. If there is no destination spec for a given release and
there is no "default" destination spec then that souce file will
not be delivered for that release. The "default" destination spec
(if it exists) should come last and is applied for release streams
that do not have more specific destination specs.
-------------------
For example The following file entry:
cose/unity1/types/coe.vf
{ hp-ux
install_target = /usr/coe/newconfig/coe.vf
}
{ aix
install_target = /usr/coe/types/coe.vf
}
{ default
install_target = /var/coe/types/coe.vf
owner = sys
group = admin
}
states that on hp-ux the file found at
$(TOP)/cose/unity1/types/coe.vf in the build tree, is to be delivered
to "/usr/coe/newconfig/coe.vf" on hp-ux; "/usr/coe/types/coe.vf" on
aix; and "/var/coe/types/coe.vf" on all other release platforms. In
addition, on all platforms other than hp-ux and aix the default
owner and group (usually bin,bin) are replaced by sys,admin for this
file.
------------------
Pseudo-BNF:
Here follows a pseudo-BNF description of the syntax of a
udb file:
---------------------------------------------------------------------
udbFile = release_definition_section file_records
release_definition_section = release_def release_definition_section |
release_def
release_def = "{" release_id ":" "defaults" record_defs "}"
release_id = "hp-ux" | "aix" | "sun" | "usl" | "uxp" | "default"
record_defs = keyword_def "=" special_token |
keyword_def "=" keyword_value
special_token = "<SRC>" | "<DEST>" | "<LNK>" |
"<TYPE>" | "<MODE>" | "<OWNER>" | "<GROUP>"
keyword_def = identifier
keyword_value = identifier
file_records = file_rec file_records |
file_rec
file_rec = src_spec dest_specs
src_spec = a_out_loc | link_path
a_out_loc = < the build tree-top relative path to the source file >
link_path = < the full path to the link source in the product >
dest_specs = dest_spec dest_specs |
dest_spec
dest_spec = "{" release_id value_specs "}"
value_spec = keyword "=" value
keyword = identifier
value = identifier
identifier = < any sequence of non-whitespace characters which
does not contain an unescaped instance of one of
the syntax_chars >
syntax_chars = "{", ":", ";", "=", "}"

View file

@ -0,0 +1,82 @@
UDB TOOLS
---------
The udb tools are located in the shared source tree in:
/x/cdesrc/admin/IntegTools/dbTools
The basic tools for manipulating "udb" databases are:
udbParseLib.awk -- the awk parser for "udb" files.
This awk file contains functions which read the udb
databases into memory and set up awk-style
associative arrays of keyword value pairs
for all the file entries. This "library"
also contains the default set of print
routines that allow the database information
to be printed in a number of different
formats.
Custom print routines can easily
be written by following the conventions used
in the default print routines.
This parser is used by "udbToAny.ksh" and other
scripts which manipulate the ".udb" databases.
udbToAny.ksh -- A ksh front end which allows the contents of the
"udb" file to be transformed into a number of different
formats. It also accepts the name of "custom" awk print
routine which can do new and mysterious things. The
most useful output at present is the "-toLst" option which
produces output suitable for the "mkProd" script.
NOTE: This script accepts more than one "udb" file
as input but only the Release Definitions from the first
udb file will be applied.
mkProd -- a ksh script which will create a product tree from the
files in a build tree based on the contents of its input.
This script takes a one-line format (.lst format) as input.
This one-line format can be generated from a "udb" file by
using the "-toLst" option in "udbToAny.ksh".
This script calls two other ksh scripts "uncomment"
and "linksLast". They do very simple tasks and should
probably be rewritten as simple ksh functions in mkProd.
NOTE: There is shell code to do automatic stripping of
executables and compression of man pages etc. but
most of that is turned off.
There are other more complicated tools that act on "udb" databases,
but they are hp-ux specific.
Example 1
---------
Suppose /x/cde_hpux is a build tree containing a successful hpux build.
Suppose COE-RUN.udb and COE-RUN-ADMIN.udb are databases defining the
COE-RUN product.
To create a product tree at: "/prod/hpux/COE-RUN"
run the following two commands (as root):
1) udbToAny.ksh -ReleaseStream hp-ux -toLst COE-RUN.udb COE-RUN-ADMIN.udb > COE-RUN.lst
2) mkProd -D /prod/hpux/COE-RUN -S /x/cde_hpux COE-RUN.lst
NOTE: mkProd -f COE-RUN -D /prod/hpux -S /x/cde_hpux COE-RUN.lst
would produce essentially the same results as 2) above.
Example 2
---------
Suppose we wanted to install the above bits on a test system. Then
as root:
1) udbToAny.ksh -ReleaseStream hp-ux -toLst COE-RUN.udb COE-RUN-ADMIN.udb
| mkProd -D / -S /x/cde_hpux
will install the bits on your root file system.

View file

@ -0,0 +1,311 @@
XCOMM! /bin/ksh
XCOMM $XConsortium: dinstallCDE.src /main/8 1996/11/25 14:20:36 drk $
XCOMM
XCOMM This script uses the 'CDE' configuration scripts to de-install the Desktop
XCOMM environment.
XCOMM
XCOMM this script accepts the following parameters:
XCOMM
XCOMM Optional parameters:
XCOMM
XCOMM -f <filesets> -- a quoted, space-separated list of
XCOMM filesets to unload. The .udb
XCOMM extension is not required.
XCOMM
XCOMM -clean -- remove the temporaray and configuration directories
XCOMM -cleanVar-- remove the temporary directory but NOT the
XCOMM configuration directory
XCOMM -prog -- load only the development environment
XCOMM -runtime -- load only the runtime environment
XCOMM
XCOMM ##########################################################################
#define HASH #
#define STAR *
REVISION="$(echo "$Revision: /main/8 $" | awk '{print $2}')"
Log()
{
echo "$1" | tee -a /tmp/dinstallCDE.log
}
DoFilesetScript()
{
typeset ScriptName
FilesetName=$1
ScriptName=$2 # use long config file name (configFoo)
test_string=${DATABASE_FILES#*$FilesetName}
if (( ${#DATABASE_FILES} > ${#test_string} ))
then
if [ -x $POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName ]
then
Log "Executing $PLATFORM specific $FilesetName de-customize script"
$POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName -d 2>&1 | \
tee -a /tmp/$ScriptName.dverify
elif [ -x $POST_INSTALL_DIR/$ScriptName ]
then
Log "Executing $FilesetName de-customize script"
$POST_INSTALL_DIR/$ScriptName -d 2>&1 | tee -a /tmp/$ScriptName.dverify
fi
fi
}
DoLangScript()
{
typeset ScriptName
if [ "$BUILD_TREE" = "" ]; then
ScriptName=$2 # use short config file name (foo.cfg)
else
ScriptName=$1 # use long config file name (configFoo)
fi
if [ $CDECONFIGDIR = "CONFIG" ]; then
typeset -u ScriptName
fi
if [ -x $POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName ]
then
Log "Executing $PLATFORM specific $FilesetName de-customize script"
$POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName -d $3 2>&1 | \
tee -a /tmp/$ScriptName.dverify
elif [ -x $POST_INSTALL_DIR/$ScriptName ]
then
Log "Executing $FilesetName de-customize script"
$POST_INSTALL_DIR/$ScriptName -d $3 2>&1 | tee -a /tmp/$ScriptName.dverify
fi
}
DoScripts()
{
Log " "
DoFilesetScript CDE-TT configTT tt.cfg
DoFilesetScript CDE-MIN configMin min.cfg
DoFilesetScript CDE-RUN configRun run.cfg
DoFilesetScript CDE-HELP-C configHelp help.cfg
DoFilesetScript CDE-HELP-PRG configHelpPrg helpprg.cfg
DoFilesetScript CDE-HELP-RUN configHelpRun helprun.cfg
DoFilesetScript CDE-SHLIBS configShlibs shlibs.cfg
DoFilesetScript CDE-DEMOS configDemos demos.cfg
DoFilesetScript CDE-FONTS configFonts fonts.cfg
DoFilesetScript CDE-ICONS configIcons icons.cfg
DoFilesetScript CDE-INC configInc inc.cfg
DoFilesetScript CDE-MAN configMan man.cfg
DoFilesetScript CDE-MAN-DEV configManDev mandev.cfg
DoFilesetScript CDE-MSG-C configMsgCat msgcat.cfg
DoFilesetScript CDE-PRG configPrg prg.cfg
HASH see if a lang has been specified and configure backdrops and
HASH palettes if it has.
if [ "$LangOption" != "" ]
then
DoLangScript configLang lang.cfg $theLang
fi
}
USAGE()
{
echo "Usage: $(basename $0) [options]"
echo ""
echo "\tOptions:"
echo ""
echo "\t[-a <udb directory>]\t\talternate place to get the"
echo "\t\t\t\t\tudb files from."
echo "\t[-f <filesets>]\t\t\tspecify filesets to be unloaded."
echo "\t\t\t\t\tThe list should be double-quoted,"
echo "\t\t\t\t\tspace-separated, with no .udb"
echo "\t\t\t\t\textensions."
echo ""
echo "\t[-clean]\t\t\tremove the temporary and configuration"
echo "\t\t\t\t\tdirectories"
echo "\t[-cleanVar]\t\t\tremove the temporary but NOT the "
echo "\t\t\t\t\tconfiguration directory"
echo "\t[-prog]\t\t\t\tload only the development environment"
echo "\t[-runtime]\t\t\tload only the runtime environment"
echo "\t[-relative]\t\t\trun the relative-located config scripts"
echo "\t[-lang LANG]\t\t\tspecify LANG to use for backdrops and"
echo "\t\t\t\t\tpalettes"
echo ""
}
ORIGINAL_COMMAND_LINE="$*"
XCOMM Set which system we are on
BUILDSYSTEM=$(uname)
PLATFORM=""
PLATFORM_SCRIPT_DIR=""
XCOMM
XCOMM Set system
XCOMM
if [ $BUILDSYSTEM = "AIX" ];
then
PLATFORM=aix
PLATFORM_SCRIPT_DIR=ibm
elif [ $BUILDSYSTEM = "SunOS" ];
then
PLATFORM=sun
PLATFORM_SCRIPT_DIR=sun
elif [ $BUILDSYSTEM = "UNIX_SV" ];
then
PLATFORM=usl
PLATFORM_SCRIPT_DIR=usl
elif [ $BUILDSYSTEM = "UNIX_System_V" ];
then
PLATFORM=uxp
PLATFORM_SCRIPT_DIR=uxp
elif [ $BUILDSYSTEM = "OSF1" ];
then
PLATFORM=dec
PLATFORM_SCRIPT_DIR=dec
else # Build system = HP
PLATFORM=hp-ux
PLATFORM_SCRIPT_DIR=hp
fi
if [ "$PLATFORM" = "aix" ];
then
USER=`/bin/whoami`
elif [ "$PLATFORM" = "sun" -o "$PLATFORM" = "usl" -o "$PLATFORM" = "uxp" ];
then
USER=`/usr/ucb/whoami`
else
USER=`/usr/bin/whoami`
fi
if [ "$USER" != "root" ];
then
USAGE
echo ""
echo "You must be root to run this script"
echo ""
exit 1
fi
PATH=/bin:/usr/bin:/etc:/usr/bin/X11:
export PATH
CLEANING="no"
CLEANING_ETC="no"
USE_ALTERNATE_UDB_DIR="no"
USE_RELATIVE="no"
STARTING_DIR=$PWD
DATABASE_FILES=""
LeaveLinks="no"
REMOVE_LINKS="no"
CLEAN_DAEMONS="yes"
theLang=""
DEVELOP_ENV="yes"
RUNTIME_ENV="yes"
rm -f /tmp/dinstallCDE.log
Log "Options specified..."
while [ $# -ne 0 ]; do
case $1 in
-a) Log " - alternate place to get the udb files from"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
ALTERNATE_UDB_DIR=$1
USE_ALTERNATE_UDB_DIR="yes"
shift;
;;
-f) Log " - load specific filesets"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
DATABASE_FILES=$1
shift;
;;
-clean) Log " - delete all three cde directories"
CLEANING="yes"
CLEANING_ETC="yes"
shift;
;;
-cleanVar) Log " - delete only temporary and installation directories"
CLEANING="yes"
shift;
;;
-relative) Log " - run the relative-located config scripts"
USE_RELATIVE="yes"
shift;
;;
-prog) Log " - remove only the development environment"
RUNTIME_ENV="no"
shift;
;;
-runtime) Log " - remove only the runtime environment"
DEVELOP_ENV="no"
shift;
;;
-lang) Log " - configure backdrops and palettes for LANG"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
theLang=$1
shift;
;;
esac
done
echo ""
TOOL_DIR=$BUILD_TREE/admin/IntegTools/dbTools
if [ "$USE_RELATIVE" = "yes" ]
then
POST_INSTALL_DIR=../post_install
else
POST_INSTALL_DIR=$BUILD_TREE/admin/IntegTools/post_install
fi
if [ "$USE_ALTERNATE_UDB_DIR" = "yes" ]
then
DATABASE_DIR=$ALTERNATE_UDB_DIR/databases
else
DATABASE_DIR=$BUILD_TREE/databases
fi
if [ "$DATABASE_FILES" = "" ]
then
if [ "$DEVELOP_ENV" = "yes" -a "$RUNTIME_ENV" = "yes" ]
then
DATABASE_FILES="CDE-RUN CDE-MIN CDE-TT CDE-MAN CDE-HELP-RUN CDE-C \
CDE-MSG-C CDE-HELP-C CDE-SHLIBS CDE-HELP-PRG \
CDE-PRG CDE-INC CDE-DEMOS CDE-MAN-DEV CDE-ICONS \
CDE-FONTS"
elif [ "$DEVELOP_ENV" = "yes" ]
then
DATABASE_FILES="CDE-HELP-PRG CDE-PRG CDE-INC CDE-DEMOS \
CDE-MAN-DEV CDE-SHLIBS"
elif [ "$RUNTIME_ENV" = "yes" ]
then
DATABASE_FILES="CDE-RUN CDE-MIN CDE-TT CDE-MAN CDE-HELP-RUN CDE-C \
CDE-HELP-C CDE-MSG-C CDE-SHLIBS CDE-ICONS CDE-FONTS"
fi
fi
INSTALL_LOCATION=CDE_INSTALLATION_TOP
CONFIGURE_LOCATION=CDE_CONFIGURATION_TOP
LOGFILES_LOCATION=CDE_LOGFILES_TOP
DoScripts
echo "Done."
echo ""
echo "See /tmp/dinstallCDE.log for a log of this de-install session."
echo ""

View file

@ -0,0 +1,964 @@
XCOMM! /bin/ksh
XCOMM $XConsortium: installCDE.src /main/20 1996/11/25 14:21:13 drk $
XCOMM
XCOMM This script uses the 'CDE' databases to install either the Desktop
XCOMM environment on a specified machine or creates a tar ball to be used
XCOMM in an install process.
XCOMM
XCOMM this script accepts the following parameters:
XCOMM -s <source> -- The top of build tree where the files are
XCOMM gathered from.
XCOMM -z <package> -- The desktop install package
XCOMM
XCOMM Optional parameters:
XCOMM
XCOMM -t <package destination> -- where to store install package
XCOMM -pI <actual install location> -- where CDE_INSTALLATION_TOP will be linked to.
XCOMM -pC <actual config location> -- where CDE_CONFIGURATION_TOP will be linked to.
XCOMM -pV <actual var location> -- where CDE_LOGFILES_TOP will be linked to.
XCOMM -a <alternate udb directory>
XCOMM -f <filesets> -- a quoted, space-separated list of
XCOMM filesets to load. The .udb extension
XCOMM is not required.
XCOMM
XCOMM -clean -- remove the temporary, configuration and installation
XCOMM directories
XCOMM -cleanTwo-- remove the temporary and installation directories
XCOMM but NOT the configuration directory
XCOMM -cleanEtc-- remove the configuration directories
XCOMM -prog -- load only the development environment
XCOMM -runtime -- load only the runtime environment
XCOMM -pack -- create packing list
XCOMM -pseudo -- don't configure the desktop
XCOMM -nocompress -- don't compress the tarball (-t only)
XCOMM
XCOMM -Lang -- load the localized filesets
XCOMM -LinkStepOnly -- set up the -pI, -pC, and -pV links
XCOMM then exit
XCOMM -DontRunScripts -- stop after installation
XCOMM -RunScriptsOnly -- only execute the scripts
XCOMM -configureOnly -- only configure the desktop
XCOMM
XCOMM ##########################################################################
#define HASH #
#define STAR *
REVISION="$(echo "$Revision: /main/20 $" | awk '{print $2}')"
Log()
{
echo "$1" | tee -a /tmp/installCDE.log
}
MakeTarball()
{
Log "\nGenerating UNIX Desktop install package $DATE in $TARBALL_LOCATION"
HASH
HASH create installable tarball
HASH
Log "Creating tarball..."
if [ $PLATFORM = "usl" -o "$PLATFORM" = "uxp" ]
then
ulimit -f unlimited
fi
DIRNAME=build.$DATE
mkdir -p $TARBALL_LOCATION/$DIRNAME
cd /
echo $DATE >$LOGFILES_LOCATION/.build.$DATE
chown bin $LOGFILES_LOCATION/.build.$DATE
if [ "$COMPRESS_TARBALL" = "yes" ]; then
tar -cf - $INSTALL_LOCATION/STAR \
2>$TARBALL_LOCATION/$DIRNAME/extract.err |
compress -c >$TARBALL_LOCATION/$DIRNAME/dttar.Z
else
tar -cf $TARBALL_LOCATION/$DIRNAME/dt.tar \
$INSTALL_LOCATION/STAR \
2>$TARBALL_LOCATION/$DIRNAME/extract.err 2>&1
fi
if [ "$ACTUAL_INSTALLATION_LOC" = "" ]; then
actualInstallDir=$INSTALL_LOCATION
else
actualInstallDir=$ACTUAL_INSTALLATION_LOC
fi
let size=$(du -s $actualInstallDir | awk '{print $1}')*512
HASH load installation fileset *after* tarball generated
LoadFileSet "" "CDE-INSTALL"
HASH create config dir
destPost=$TARBALL_LOCATION/$DIRNAME/config
mkdir $destPost
HASH copy config and platform config scripts
src=$INSTALL_LOCATION/install/$PLATFORM_SCRIPT_DIR
cp $src/config/STAR.cfg $destPost
HASH copy this script and install.dt platform overrides
cp $src/install.dto $TARBALL_LOCATION/$DIRNAME/install.dto
cp $src/install.cde $TARBALL_LOCATION/$DIRNAME/install.cde
chmod 755 $TARBALL_LOCATION/$DIRNAME/install.cde
cd /
Log "done."
cat >$TARBALL_LOCATION/$DIRNAME/dt.pkg <<FIN
PLATFORM: $PLATFORM
VERSION: $REVISION
TS: $DATE
COMPRESSED: $COMPRESS_TARBALL
SIZE: $size
CL: $ORIGINAL_COMMAND_LINE
FILESETS: $DATABASE_FILES
FIN
cat >$TARBALL_LOCATION/$DIRNAME/build.status <<FIN
The UNIX Desktop
BUILD: $DATE
OVERALL STATUS: <not yet tested>
OVERALL PERFORMANCE: <not yet tested>
MAJOR PROBLEMS: <not yet tested>
FIN
chmod g+w $TARBALL_LOCATION/$DIRNAME/build.status
}
DoFilesetScript()
{
typeset ScriptName
FilesetName=$1
if [ "$BUILD_TREE" = "" ]; then
ScriptName=$3 # use short config file name (foo.cfg)
else
ScriptName=$2 # use long config file name (configFoo)
fi
if [ $CDECONFIGDIR = "CONFIG" ]; then
typeset -u ScriptName
fi
test_string=${DATABASE_FILES#*$FilesetName}
if (( ${#DATABASE_FILES} > ${#test_string} ))
then
if [ -x $POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName ]
then
Log "Executing $PLATFORM specific $FilesetName customize script"
$POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName -e 2>&1 | \
tee -a /tmp/installCDE.log
elif [ -x $POST_INSTALL_DIR/$ScriptName ]
then
Log "Executing $FilesetName customize script"
$POST_INSTALL_DIR/$ScriptName -e 2>&1 | tee -a /tmp/installCDE.log
fi
fi
}
DoScripts()
{
Log " "
DoFilesetScript CDE-TT configTT tt.cfg
DoFilesetScript CDE-MIN configMin min.cfg
DoFilesetScript CDE-SHLIBS configShlibs shlibs.cfg
DoFilesetScript CDE-RUN configRun run.cfg
}
CreatePackingList()
{
Log " "
Log "Creating packing list."
touch $INSTALL_LOCATION/Packing_list
for i in `echo $DATABASE_FILES`
do
Log " for $i"
$TOOL_DIR/udbToAny.ksh -toDB -ReleaseStream $PLATFORM $DATABASE_DIR/${i}.udb > /tmp/${i}.db
if [ -r /tmp/${i}.db ]
then
for file in `fgrep install_target /tmp/${i}.db | cut -sf 2 -d \: `
do
echo "$file" >>$INSTALL_LOCATION/Packing_list
done
fi
done
}
CleanDaemons()
{
HASH kill these processes so that they can be removed and new ones
HASH installed
for i in inetd rpc.ttdbserver rpc.cmsd
do
if [ "$PLATFORM" = "aix" -a $i = "inetd" ]
then
lssrc -s inetd >/dev/null 2>&1
if [ $? = "0" ]
then
stopsrc -s inetd >>/tmp/installCDE.log 2>&1
fi
else
ps -ef | grep $i | grep -v grep >/tmp/tmppsout
if [ -s /tmp/tmppsout ]
then
awk '{print "kill " $2}' /tmp/tmppsout | /bin/csh -f
sleep 2
fi
fi
done
rm -f /tmp/tmppsout
}
RestartInetd()
{
HASH now restart inetd
OLDPWD=`pwd`
cd /
if [ "$PLATFORM" = "sun" -o "$PLATFORM" = "usl" -o "$PLATFORM" = "uxp" ]
then
/usr/sbin/inetd -s
elif [ "$PLATFORM" = "aix" ]
then
startsrc -s inetd >>/tmp/installCDE.log 2>&1
elif [ "$PLATFORM" = "dec" ]
then
/usr/sbin/inetd
else
#ifdef hpV4
/usr/sbin/inetd
#else
/etc/inetd
#endif
fi
cd $OLDPWD
}
CheckForActualLocations()
{
XCOMM
XCOMM if different actual locations specified, set up the links
XCOMM
if [ "$CLEAN_DAEMONS" = "yes" ]
then
CleanDaemons
fi
HASH remove the contents of the installation directory then the directory
HASH itself
if [ "$CLEANING" = "yes" ]
then
Log "Removing $INSTALL_LOCATION contents... "
if [ -d $INSTALL_LOCATION ]
then
rm -rf $INSTALL_LOCATION/STAR
if [ "$LeaveLinks" = "yes" ]
then
if [ ! -L $INSTALL_LOCATION ]
then
rm -rf $INSTALL_LOCATION
fi
else
if [ -L $INSTALL_LOCATION ]
then
rm -f $INSTALL_LOCATION
else
rm -rf $INSTALL_LOCATION
fi
fi
fi
fi
if [ "$CONFIGURE_ONLY" = "no" ]
then
if [ "$ACTUAL_INSTALLATION_LOC" != "" ]
then
HASH
HASH first create the actual directory - if not there
HASH
if [ ! -d $ACTUAL_INSTALLATION_LOC ]
then
mkdir -p $ACTUAL_INSTALLATION_LOC
if [ ! -d $ACTUAL_INSTALLATION_LOC ]
then
Log "cannot create $ACTUAL_INSTALLATION_LOC directory"
exit 1
fi
fi
ln -s $ACTUAL_INSTALLATION_LOC $INSTALL_LOCATION
else
if [ ! -d $INSTALL_LOCATION -a ! -L $INSTALL_LOCATION ];
then
mkdir -p $INSTALL_LOCATION
fi
fi
fi
if [ "$CLEAN_DAEMONS" = "yes" ]
then
RestartInetd
fi
HASH remove the contents of the configuration directory
if [ "$CLEANING_ETC" = "yes" ]
then
Log "Removing $CONFIGURE_LOCATION contents... "
if [ -d $CONFIGURE_LOCATION ]
then
rm -rf $CONFIGURE_LOCATION/STAR
if [ "$LeaveLinks" = "yes" ]
then
if [ ! -L $CONFIGURE_LOCATION ]
then
rm -rf $CONFIGURE_LOCATION
fi
else
if [ -L $CONFIGURE_LOCATION ]
then
rm -f $CONFIGURE_LOCATION
else
rm -rf $CONFIGURE_LOCATION
fi
fi
fi
fi
if [ "$ACTUAL_CONFIGURATION_LOC" != "" ]
then
if [ ! -d $ACTUAL_CONFIGURATION_LOC ]
then
mkdir -p $ACTUAL_CONFIGURATION_LOC
if [ ! -d $ACTUAL_CONFIGURATION_LOC ]
then
Log "cannot create $ACTUAL_CONFIGURATION_LOC directory"
exit 1
fi
fi
ln -s $ACTUAL_CONFIGURATION_LOC $CONFIGURE_LOCATION
else
if [ ! -d $CONFIGURE_LOCATION -a ! -L $CONFIGURE_LOCATION ];
then
mkdir -p $CONFIGURE_LOCATION
fi
fi
if [ "$CLEANING" = "yes" ]
then
Log "Removing $LOGFILES_LOCATION contents... "
if [ -d $LOGFILES_LOCATION ]
then
rm -rf $LOGFILES_LOCATION/STAR
if [ "$LeaveLinks" = "yes" ]
then
if [ ! -L $LOGFILES_LOCATION ]
then
rm -rf $LOGFILES_LOCATION
fi
else
if [ -L $LOGFILES_LOCATION ]
then
rm -f $LOGFILES_LOCATION
else
rm -rf $LOGFILES_LOCATION
fi
fi
fi
fi
if [ "$ACTUAL_VAR_LOC" != "" ]
then
if [ ! -d $ACTUAL_VAR_LOC ]
then
mkdir -p $ACTUAL_VAR_LOC
if [ ! -d $ACTUAL_VAR_LOC ]
then
Log "cannot create $ACTUAL_VAR_LOC directory"
exit 1
fi
fi
ln -s $ACTUAL_VAR_LOC $LOGFILES_LOCATION
else
if [ ! -d $LOGFILES_LOCATION -a ! -L $LOGFILES_LOCATION ];
then
mkdir -p $LOGFILES_LOCATION
fi
fi
Log " "
}
USAGE()
{
echo "Usage: $(basename $0) {-s <source>|-z <package>} [options]"
echo ""
echo "\t-s <source>\t\t\tthe top of the build tree"
echo "\t-z <package>\t\tthe desktop install package"
echo ""
echo "\tOptions:"
echo ""
echo "\t[-t <package_destination>]\tif specified create an"
echo "\t\t\t\t\tinstall package and store it in the"
echo "\t\t\t\t\tdestination."
echo "\t[-pI <actual install location>]\twhere" CDE_INSTALLATION_TOP "will be linked to."
echo "\t[-pC <actual config location>]\twhere" CDE_CONFIGURATION_TOP "will be linked to."
echo "\t[-pV <actual var location>]\twhere" CDE_LOGFILES_TOP "will be linked to."
echo ""
echo "\t[-a <udb directory>]\t\talternate place to get the"
echo "\t\t\t\t\tudb files from."
echo "\t[-f <filesets>]\t\t\tspecify filesets to be loaded."
echo "\t\t\t\t\tThe list should be double-quoted,"
echo "\t\t\t\t\tspace-separated, with no .udb"
echo "\t\t\t\t\textensions."
echo ""
echo "\t[-clean]\t\t\tremove the temporary, configuration, and"
echo "\t\t\t\t\tinstallation directory"
echo "\t[-cleanTwo]\t\t\tremove the temporary and installation "
echo "\t\t\t\t\tdirectory, but NOT the configuration directory"
echo "\t[-cleanEtc]\t\t\tremove the configuration directory, but "
echo "\t\t\t\t\NOT the temporary and installation directories"
echo "\t[-prog]\t\t\t\tload only the development environment"
echo "\t[-runtime]\t\t\tload only the runtime environment"
echo "\t[-relative]\t\t\trun the relative-located config scripts"
echo "\t[-pack]\t\t\t\tcreate a packing list"
echo "\t[-pseudo]\t\t\tdo not configure desktop when installing"
echo "\t[-nocompress]\t\t\tdo not compress tarball when creating package"
echo "\t[-lang LANG]\t\t\tspecify LANG to load appropriate localized"
echo "\t\t\t\t\tfilesets"
echo "\t[-LeaveLinks]\t\t\t\tdo not delete the links after cleaning"
echo ""
echo "\t[-LinkStepOnly]\t\t\tset up the -pI, -pC, and -pV links"
echo "\t\t\t\t\tthen exit"
echo "\t[-DontRunScripts]\t\tstop after installation"
echo "\t[-RunScriptsOnly]\t\tonly execute the scripts"
echo "\t[-configureOnly]\t\tonly configure the desktop"
echo ""
echo "\tExamples:"
echo ""
echo "\tinstallCDE -s /x/cde_hp700_90"
echo "\tinstallCDE -s /x/cde_aix_32 -f \"CDE_MIN CDE-SHLIBS\""
echo "\tinstallCDE -s /x/cde_sun_52 -pI /bigdisk/opt/dt -clean"
echo "\tinstallCDE -s /x/cde_sun_52 -pI /dtinstall -clean\\"
echo "\t\t-pseudo -t /dtpackages -nocompress"
}
XCOMM
XCOMM LoadFileSet() - load a UDB file
XCOMM $1 - fileset number
XCOMM $2 - fileset name
XCOMM
LoadFileSet()
{
if [ "$1" = "" ]; then
num=""
else
num="$1."
fi
Log " $num installing database $2"
Log " - creating ${2}.lst file"
$TOOL_DIR/udbToAny.ksh -toLst -ReleaseStream $PLATFORM \
$DATABASE_DIR/${2}.udb > /tmp/${2}.lst
Log " - installing ... \c"
$TOOL_DIR/mkProd -D / -S $BUILD_TREE /tmp/${2}.lst \
2>/tmp/${2}.err 1>/tmp/${2}.good
Log "done."
Log " - checking for errors ..."
rm -f /tmp/${2}.missing
awk '{if ($1 == "ERROR:") print " " $4}' \
/tmp/${2}.err >> /tmp/${2}.missing
if [ -s /tmp/${2}.missing ]
then
Log " - missing files:"
cat /tmp/${2}.missing | tee -a /tmp/installCDE.log
fi
}
ORIGINAL_COMMAND_LINE="$*"
XCOMM Set which system we are on
BUILDSYSTEM=$(uname)
PLATFORM=""
PLATFORM_SCRIPT_DIR=""
XCOMM
XCOMM Set system
XCOMM
if [ $BUILDSYSTEM = "AIX" ];
then
PLATFORM=aix
PLATFORM_SCRIPT_DIR=ibm
elif [ $BUILDSYSTEM = "SunOS" ];
then
PLATFORM=sun
PLATFORM_SCRIPT_DIR=sun
elif [ $BUILDSYSTEM = "UNIX_SV" ];
then
PLATFORM=usl
PLATFORM_SCRIPT_DIR=usl
elif [ $BUILDSYSTEM = "UNIX_System_V" ];
then
PLATFORM=uxp
PLATFORM_SCRIPT_DIR=uxp
elif [ $BUILDSYSTEM = "OSF1" ];
then
PLATFORM=dec
PLATFORM_SCRIPT_DIR=dec
else # Build system = HP
PLATFORM=hp-ux
PLATFORM_SCRIPT_DIR=hp
fi
if [ "$PLATFORM" = "aix" ];
then
USER=`/bin/whoami`
elif [ "$PLATFORM" = "sun" -o "$PLATFORM" = "usl" -o "$PLATFORM" = "uxp" ];
then
USER=`/usr/ucb/whoami`
else
USER=`/usr/bin/whoami`
fi
if [ "$USER" != "root" ];
then
USAGE
echo ""
echo "You must be root to run this script"
echo ""
exit 1
fi
if [ "$PLATFORM" = "usl" -o "$PLATFORM" = "uxp" ]
then
umask 000
fi
unset TMPDIR
PATH=/bin:/usr/bin:/etc:/usr/bin/X11:
export PATH
CLEANING="no"
CLEANING_ETC="no"
TARBALL="no"
COMPRESS_TARBALL="yes"
USE_ALTERNATE_UDB_DIR="no"
DEVELOP_ENV="no"
RUNTIME_ENV="no"
USE_RELATIVE="no"
STARTING_DIR=$PWD
ACTUAL_INSTALLATION_LOC=""
ACTUAL_CONFIGURATION_LOC=""
ACTUAL_VAR_LOC=""
CREATE_PACKING_LIST="no"
DO_LINK_STEP_ONLY="no"
DO_INSTALL_ONLY="no"
RUN_SCRIPTS="yes"
RUN_SCRIPTS_ONLY="no"
DATABASE_FILES=""
BUILD_TREE=""
TAR_DIR=""
LeaveLinks="no"
REMOVE_LINKS="no"
CLEAN_DAEMONS="yes"
theLang=""
CONFIGURE_ONLY="no"
rm -f /tmp/installCDE.log
Log "Options specified..."
while [ $# -ne 0 ]; do
case $1 in
-s) Log " - get the build tree to extract from"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
BUILD_TREE=$1
shift;
;;
-z) Log " - get the install package to extract from"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
TAR_TREE=$1
shift;
;;
-t) Log " - where to put the install package"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
if [ "$SOURCE_TAR_FILE" = "" ]
then
TARBALL="yes"
TARBALL_LOCATION=$1
fi
shift;
;;
-a) Log " - alternate place to get the udb files from"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
ALTERNATE_UDB_DIR=$1
USE_ALTERNATE_UDB_DIR="yes"
shift;
;;
-f) Log " - load specific filesets"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
DATABASE_FILES=$1
shift;
;;
-p) Log " - get all locations"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
ACTUAL_INSTALLATION_LOC=$1
ACTUAL_CONFIGURATION_LOC=$1
ACTUAL_VAR_LOC=$1
shift;
;;
-pI) Log " - get actual installation location"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
ACTUAL_INSTALLATION_LOC=$1
shift;
;;
-pC) Log " - get actual configuration location"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
ACTUAL_CONFIGURATION_LOC=$1
shift;
;;
-pV) Log " - get actual var location"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
ACTUAL_VAR_LOC=$1
shift;
;;
-clean) Log " - delete all three cde directories"
CLEANING="yes"
CLEANING_ETC="yes"
shift;
;;
-cleanTwo) Log " - delete only temporary and installation directories"
CLEANING="yes"
shift;
;;
-cleanEtc) Log " - delete only the configuration directory"
CLEANING_ETC="yes"
shift;
;;
-prog) Log " - load only the development environment"
DEVELOP_ENV="yes"
RUNTIME_ENV="no"
shift;
;;
-runtime) Log " - load only the runtime environment"
RUNTIME_ENV="yes"
DEVELOP_ENV="no"
shift;
;;
-relative) Log " - run the relative-located config scripts"
USE_RELATIVE="yes"
shift;
;;
-pack) Log " - create a packing list"
CREATE_PACKING_LIST="yes"
shift;
;;
-LeaveLinks) Log " - do not remove the links"
LeaveLinks="yes"
shift;
;;
-LinkStepOnly) Log " - do link step only"
DO_LINK_STEP_ONLY="yes"
shift;
;;
-DontRunScripts) Log " - stop after installation"
DO_INSTALL_ONLY="yes"
shift;
;;
-RunScriptsOnly) Log " - only run scripts"
RUN_SCRIPTS_ONLY="yes"
shift;
;;
-pseudo) Log " - pseudo install"
RUN_SCRIPTS="no"
REMOVE_LINKS="yes"
CLEAN_DAEMONS="no"
shift;
;;
-nocompress) Log " - do not compress tarball"
COMPRESS_TARBALL="no"
shift;
;;
-lang) Log " - load localized filesets"
shift;
[ $# -ne 0 ] || {
USAGE
exit 1;
}
theLang=$1
shift;
;;
-configureOnly) Log " - Configure only"
CONFIGURE_ONLY="yes"
CLEAN_DAEMONS="yes"
shift;
;;
*) Log " - unknown option"
USAGE
exit 1;
;;
esac
done
echo ""
if [ -z "$BUILD_TREE" -a -z "$TAR_TREE" ]
then
USAGE
exit 1
fi
if [ "$BUILD_TREE" != "" -a ! -d "$BUILD_TREE" ]
then
Log "Build tree does not exist."
exit 1
fi
if [ "$TAR_TREE" != "" -a ! -d "$TAR_TREE" ]
then
Log "Tar tree does not exist."
exit 1
fi
CDEPACKAGE=dt.pkg
CDETARFILE=dt.tar
CDETARFILEZ=dttar.Z
CDECONFIGDIR=config
XCOMM
XCOMM get the current time stamp if going to create a tarball
XCOMM
if [ $TARBALL = "yes" ];
then
set -- `/bin/date`
DATE=$2_$3_$4_$6
fi
if [ -z "$BUILD_TREE" -a ${0##STAR/} = INSTALL.CDE ]; then
typeset -u CDEPACKAGE
typeset -u CDETARFILE
typeset -u CDETARFILEZ
typeset -u CDECONFIGDIR
fi
TOOL_DIR=$BUILD_TREE/admin/IntegTools/dbTools
if [ "$USE_RELATIVE" = "yes" ]
then
POST_INSTALL_DIR=../post_install
else
if [ -z "$BUILD_TREE" ]
then
POST_INSTALL_DIR=$TAR_TREE/$CDECONFIGDIR
else
POST_INSTALL_DIR=$BUILD_TREE/admin/IntegTools/post_install
fi
fi
if [ "$USE_ALTERNATE_UDB_DIR" = "yes" ]
then
DATABASE_DIR=$ALTERNATE_UDB_DIR/databases
else
DATABASE_DIR=$BUILD_TREE/databases
fi
if [ "$DATABASE_FILES" = "" ]
then
if [ "$DEVELOP_ENV" = "yes" ]
then
DATABASE_FILES="CDE-HELP-PRG CDE-PRG CDE-INC CDE-DEMOS \
CDE-MAN-DEV CDE-SHLIBS"
elif [ "$RUNTIME_ENV" = "yes" ]
then
DATABASE_FILES="CDE-RUN CDE-MIN CDE-TT CDE-MAN CDE-HELP-RUN CDE-C \
CDE-HELP-C CDE-MSG-C CDE-SHLIBS CDE-ICONS CDE-FONTS \
CDE-INFO CDE-INFOLIB-C"
else
DATABASE_FILES="CDE-RUN CDE-MIN CDE-TT CDE-MAN CDE-HELP-RUN CDE-C \
CDE-MSG-C CDE-HELP-C CDE-SHLIBS CDE-HELP-PRG \
CDE-PRG CDE-INC CDE-DEMOS CDE-MAN-DEV CDE-ICONS \
CDE-FONTS CDE-INFO CDE-INFOLIB-C"
fi
HASH now load any localized filesets
if [ "$DEVELOP_ENV" != "yes" ]
then
if [ "$theLang" != "" ]
then
DATABASE_FILES="$DATABASE_FILES CDE-$theLang CDE-MSG-$theLang \
CDE-HELP-$theLang"
fi
fi
fi
INSTALL_LOCATION=CDE_INSTALLATION_TOP
CONFIGURE_LOCATION=CDE_CONFIGURATION_TOP
LOGFILES_LOCATION=CDE_LOGFILES_TOP
if [ -L $INSTALL_LOCATION -a "$CONFIGURE_ONLY" != "yes" ]
then
touch $INSTALL_LOCATION/foo >/dev/null 2>/dev/null
if [ ! -f $INSTALL_LOCATION/foo ]
then
Log "Insufficient permissions to install CDE files in $INSTALL_LOCATION"
exit 1
fi
if [ ! -O $INSTALL_LOCATION/foo ]
then
Log "Root access to $INSTALL_LOCATION is required for CDE installation."
exit 1
fi
rm $INSTALL_LOCATION/foo
fi
if [ -d $INSTALL_LOCATION ]
then
if [ -x $INSTALL_LOCATION/bin -a ! -d $INSTALL_LOCATION/bin ]
then
rm -f $INSTALL_LOCATION/bin
fi
fi
if [ "$CONFIGURE_ONLY" = "yes" ]
then
CheckForActualLocations
DoScripts
Log "Configuration completed."
exit 0
fi
if [ "$RUN_SCRIPTS_ONLY" = "yes" ]
then
DoScripts
exit 0
fi
CheckForActualLocations
if [ "$DO_LINK_STEP_ONLY" = "yes" ]
then
exit 0
fi
if [ "$CREATE_PACKING_LIST" = "yes" ]
then
CreatePackingList
exit 0
fi
XCOMM
XCOMM we are ready to load the environment ...
XCOMM
if [ "$BUILD_TREE" != "" ]
then
Log "Load the Desktop from $BUILD_TREE"
cd $STARTING_DIR
let j=1
for i in `echo $DATABASE_FILES`
do
LoadFileSet "$j" "$i"
let j=j+1
done
else
Log "Load the Desktop from $TAR_TREE"
compressed=$(awk '/COMPRESSED: /{print $2}' $TAR_TREE/$CDEPACKAGE)
if [ "$compressed" = "yes" ]; then
uncompress <$TAR_TREE/$CDETARFILEZ | tar xvf - $INSTALL_LOCATION
else
tar -xvf $TAR_TREE/$CDETARFILE $INSTALL_LOCATION
fi
DATABASE_FILES=$(awk 'BEGIN {FS=":"} /FILESETS: /{print $2}' $TAR_TREE/$CDEPACKAGE)
fi
Log " "
Log "Desktop installed in $INSTALL_LOCATION"
if [ "$DO_INSTALL_ONLY" = "yes" ]
then
exit 0
fi
if [ $TARBALL = "yes" ];
then
MakeTarball
fi
cd $STARTING_DIR
if [ "$RUN_SCRIPTS" = "yes" ]
then
DoScripts
fi
if [ "$REMOVE_LINKS" = "yes" ]
then
[ -L /usr/dt ] && rm /usr/dt
[ -L /etc/dt ] && rm /etc/dt
[ -L /var/dt ] && rm /var/dt
fi
echo "Done."
echo ""
echo "See /tmp/installCDE.log for a log of this install session."
echo ""

View file

@ -0,0 +1,23 @@
#! /bin/ksh
#
# Script to move all link refereces in a ".lst" file
# to the end of the file.
#
USAGE="Usage: $0 file.lst"
case $# in
0) echo $USAGE;;
1);;
*) echo $USAGE;;
esac
awk '
/hard_link|sym_link/ { links[i++] = $0 ; next; }
{ print $0 }
END {
if ( i > 0 )
for ( i in links) print links[i];
}
' $@

View file

@ -0,0 +1,650 @@
#! /bin/ksh
export SYSTYPE=bsd4.3
# This script is aimed at producing Apollo product tree but
# it should work as well on hp-ux systems. There is at least
# one special rule "-n" which should not be generated on hp-ux systems
# where it is not necessary to run nroff on the man page sources.
# Put "/etc" in the path
# because this is where "chown" appears on bsd4.3 systems (i.e. apollo).
# Put "/usr/apollo/bin" on the path to access "chacl" on apollo systems.
export PATH=":/etc:$PATH:/usr/apollo/bin:"
typeset STRIP=""
# this alias makes for more "beautiful" output.
alias echo=print
#
# Shell script to read a file full of destination/perm/source triples and
# create data base entries in a format suitable for 8.0 release. All other
# information defaults to the default values for now -- this should be correct
# in most cases but may require editing of the result for those cases
# needing special handling.
#
# Lst file syntax:
# [<install-flags>] <destination_path> <perm> <src> [ <type> <owner> <group> <status> <processor> <resp_proj> ]
#
# <install-rule> ==> [optional] 2 character field encoding special actions to be invoked when
# creating the product tree. In the absence of this field the file is subject
# to defaults based on its name,destination directory and permissions.
# valid values:
# -- Do nothing special
# c- compress the file
# -n run it through an nroff pipeline
# -s strip the file (should be a binary executable)
#
# <destination_path> ===> full path name on target system
# <perm> ===> numeric permission (with leading 0)
# <src> ===> build tree path name (relative to build tree root)
# | full path name of link source
# | "-" to ignore this field (source for directory not required)
# <type> ===> "file" | "empty_dir" | "directory" | "hard_link" | NULL
# <owner> ===> file owner name -- defaults to bin
# <group> ===> file group ownership --- defaults to bin
# <status> ===> "di----" default
# <processor> ===> valid processor "3-" | "-8" | "38" -- defaults to "38"
# <resp_proj> ===> responsible project --- defaults to "xwindows"
#
Usage="Usage: $0 [-f filesetName] -D <desttree> -S <srctree> <file> ...\n
\tfilesetName \t==> (optional) used to create subdirectory in desttree\n
\tdesttree \t==> destination directory\n
\tsrctree \t==> usually a build tree containing the source\n
\tfile \t\t==> data base file in \".lst\" format"
FILE='file'
STATUS='di----'
PROCESSOR='378'
DESTTREE='.'
if [ -f /com/ctnode ]; then
# Apollo systems
OWNER='root'
GROUP='staff'
# set flag used to test for soft links
LNKTST="L"
else
# hp-ux systems (and all other systems)
OWNER='bin'
GROUP='bin'
# set flag used to test for soft links
LNKTST="h"
fi
BUILD_TARGET='/'
INSTALL_RULE='--'
INSTALL_FLAGS=''
ORDER='0'
RESP_PROJ='xwindows'
# Set which system we are on
BUILDSYSTEM=$(uname)
# Set system
if [ $BUILDSYSTEM = "AIX" ];
then
PLATFORM=aix
elif [ $BUILDSYSTEM = "SunOS" ];
then
PLATFORM=sun
elif [ $BUILDSYSTEM = "UNIX_SV" ];
then
PLATFORM=usl
elif [ $BUILDSYSTEM = "UNIX_System_V" ];
then
PLATFORM=uxp
elif [ $BUILDSYSTEM = "OSF1" ];
then
PLATFORM=dec
else # Build system = HP
PLATFORM=hp-ux
fi
if [ $PLATFORM = "aix" ];
then
USER=`/bin/whoami`
elif [ $PLATFORM = "sun" -o $PLATFORM = "usl" -o $PLATFORM = "uxp" ];
then
USER=`/usr/ucb/whoami`
else
USER=`/usr/bin/whoami`
fi
awkit() {
awk '
BEGIN {
print "#"
print "# TYPE RULE SRC DEST MODE OWNER GROUP LINKSRC"
print ""
}
/^[ ]*#/ { next }
{
# initialize install_rule to NULL
install_rule=""
# skip blank lines
if ( NF == 0 )
next
# do a little syntax checking
if ( $1 !~ /\// ) {
# check for special install_rule values
if ( $1 ~ /[-c][-ns]/ ) {
# set the special install rule
install_rule=$1
# shift the rest of the fields left
for ( i = 1; i < NF; i++) {
$i = $(i+1)
}
NF=NF-1
}
else {
print "Syntax Error (line " NR ") destination path: " $1
print "text: " $0
next
}
}
if ( NF > 9 ) {
print "Syntax Error (line " NR ") number of fields"
print "text: " $0
exit
}
if ( $2 !~ /0[0-7][0-7]*/ ) {
print "Syntax Error (line " NR ") perm : " $2
print "text: " $0
next
}
# if ( $4 ~ /link/ && $3 !~ /^\// && $3 !~ /`node_data/) {
# changed to allow local link (using ./file syntax) -- Should this be
# domain only?
#
if ( $4 ~ /link/ && $3 !~ /^\// && $3 !~ /`node_data/ && \
$3 !~ /^\.\// && $3 !~ /^\.\.\// ) {
print "Syntax Error (line " NR ") source: " $3
print "text: " $0
next
}
# Check for special install rules
# man pages are compressed use rule "c-"
# font files are compressed use rule "c-"
# directories have no source i.e. src = "-"
src = $3;
link_src = "";
type = "'$FILE'";
owner = "'$OWNER'";
group = "'$GROUP'";
status = "'$STATUS'";
processor = "'$PROCESSOR'";
resp_proj = "'$RESP_PROJ'";
if ( $4 != "" )
{
type = $4;
if ( $4 ~ /link/ ) {
src = "";
if ( $3 ~ /^\// || $3 ~ /`node_data/ || \
$3 ~ /^\.\// || $3 ~ /^\.\.\// )
link_src = $3;
else {
print "Syntax Error (line " NR ") link_src: " $3
print "text: " $0
next;
};
}
else if ( $4 == "directory" )
if ( $3 != "-" )
{
print "Syntax Error (line " NR ") directory: " $3;
print "text: " $0;
next;
}
else
src="";
else if ( $4 == "empty_dir" )
{
resp_proj = "common";
status = "------";
if ( $3 != "-" )
{
print "Syntax Error (line " NR ") empty_dir: " $3;
print "text: " $0;
next;
}
else
src="";
}
else if ( $4 == "file" && $3 == "-" )
if ( $7 == "---cu-")
src = "";
}
#
# If owner an/or group are specified all previous fields (including
# type) must be specified.
#
if ( $5 != "" )
owner = $5;
if ( $6 != "" )
group = $6;
if ( $7 != "" )
status = $7
if ( $8 != "" )
processor = $8;
if ($9 != "" )
resp_proj= $9;
if ( install_rule != "" ) {
; # install rule has been explicitly set -- do nothing
}
else if ( $1 ~ /\/usr\/man\/man.*\.Z\// )
{
install_rule = "c-";
}
else if ( $1 ~ /\/usr\/X11\/man\/cat[1-9]\/.*[1-9]/ )
{
install_rule = "-n";
}
else if ( $1 ~ /\/bsd4.3\/usr\/man\/cat[1-9]\/.*[1-9]/ )
{
install_rule = "-n";
}
else if ( $1 ~ /\/sys5.3\/usr\/catman\/.*man[1-9]\/.*[1-9]/ )
{
install_rule = "-n";
}
else if ( $1 ~ /.*\/fonts\/.*.scf$/ && $3 ~ /.*.snf$/ )
{
install_rule = "c-";
}
else if ( $1 ~ /.*\/fonts\/.*.snf\.Z$/ && $3 ~ /.*.snf$/ )
{
install_rule = "c-";
}
else if ( $1 ~ /^\/integration\// && $3 ~ /^doc\/upinfo\// )
{
install_rule = "";
}
else if ( $2 ~ /[1357]/ && $4 == "file" )
{ # executable files may be stripped
install_rule = "-s";
}
else
install_rule = "'$INSTALL_RULE'";
# print "install_target : " $1
# print "fileset : " "'$FILESET'"
# print "type : " type
# print "status : " status
# print "processor : " processor
# print "mode : " $2
# print "owner : " owner
# print "group : " group
# print "link_source : " link_src
# print "build_target : " "'$BUILD_TARGET'"
# print "install_rule_name : " install_rule
# print "install_flags : " "'$INSTALL_FLAGS'"
# print "a_out_location : " src
# print "order : " "'$ORDER'"
# print "responsible_project : " resp_proj
# print "#"
if ( type ~ /.*link/ )
src= link_src
else if ( type ~ /.*directory/ )
src="-"
print type, install_rule, src, $1, $2, owner ,group
}
' $1
}
#
# createPath
# function to create a directory path. (mkdir -p replacement on bsd4.3)
#
createPath()
{
if [ $# -ne 1 ]; then
echo "ERROR: \"$0\" invalid argument count" >&2
echo " ARGS=$@"
return 1
fi
# Since we are SYSTYPE bsd4.3 "-x" won't work.
if [ -r /sys5.3/bin/mkdir ]; then
/sys5.3/bin/mkdir -p $1
return
fi
if hp9000s300 > /dev/null 2>&1 || hp9000s800 > /dev/null 2>&1; then
mkdir -p $1
return
fi
#
# We can't use mkdir -p so do the hard way.
# starting at the root check/create all the directories
# in the given path
#
typeset xdirs=""
typeset nextdir=""
typeset fulldirs
# provide extra slash for apollo systems (//hp* syntax)?
if [ "$1" = "${1##/}" ]; then
# not a full path name so attach path to current directory
fulldirs=`/bin/pwd`/$1
xdirs="/" # added to support apollo "//host" syntax
elif [ "$1" != "${1##//}" ]; then
# using "//host" syntax
fulldirs=$1
xdirs="/"
else
fulldirs=$1
xdirs=""
fi
echo creating path: $1
while nextdir=`expr /$fulldirs/ : '/*\([^/]*\)/.*'`; do
xdirs=$xdirs/$nextdir
if [ ! -d $xdirs ]; then
mkdir $xdirs
fi
fulldirs=`expr $fulldirs : '/*[^/]*/\(.*\)'`
done
return 0
}
# doit
# function to put the source file into the product tree. This function
# reads its stdin for file movement rules.
#
doit()
{
if [ $# -ne 0 ]; then
echo "ERROR: \"$0\" incorrect arg count" >&2
echo "ARGS: $@" >&2
fi
typeset TYPE
typeset RULE
typeset SRC
typeset DEST
typeset MODE
typeset OWNER
typeset GROUP
while read TYPE RULE SRC DEST MODE OWNER GROUP; do
# ignore blank lines
if [ -z "$TYPE" ]; then
continue;
fi
# ignore comment lines (match longest string starting with '#')
if [ "${TYPE###}" != "$TYPE" ]; then
continue
fi
DEST=$DESTTREE/$FILESET${DEST}
CMD=""
case $TYPE in
directory)
if [ ! -d "$DEST" ]; then
CMD="createPath $DEST"
fi
;;
file)
SRC=$SRCTREE/$SRC
if [ "$CHECK_BEFORE" = "yes" ]
then
if [ ! -f $SRC ]
then
echo "Missing: $SRC"
echo "Missing: $SRC" >>/tmp/mkprod.missing
continue
fi
fi
if [ ! -f $SRC ]; then
echo "ERROR: Cannot read \"$SRC\"." >&2
echo " LINE=$TYPE $RULE $SRC $DEST $MODE $OWNER $GROUP " >&2
continue
fi
case $RULE in
c-) # compress rule
CMD="compress -c $SRC > $DEST"
;;
-n) # nroff rule (for apollo man pages)
if egrep -c '^\.TH[ ]|^\.ds[ ]' $SRC > /dev/null ; then
CMD="tbl $SRC|eqn|nroff -man|col -b> $DEST"
else
CMD="cp $SRC $DEST"
fi
;;
-s) # strip rule
# Domain Only
# if [ "$(find $SRC -typeuid coff -print)" = "$SRC" ]; then
# hp-ux
if [ -z "$STRIP" ]; then
CMD="cp $SRC $DEST"
else if file $SRC | grep -q "not stripped"; then
CMD="cp $SRC $DEST; strip $DEST"
else
CMD="cp $SRC $DEST"
fi
fi
;;
--) # default (no special processing)
CMD="cp $SRC $DEST"
;;
*) # huh?
echo "ERROR: Unrecognized rule: \"$RULE\"" >&2
echo " LINE=$TYPE $RULE $SRC $DEST $MODE $OWNER $GROUP " >&2
continue;
;;
esac
;;
sym_link)
if [ -z "$SRC" ]; then
echo "ERROR: No link source for \"$DEST\"" >&2
echo " LINE=$TYPE $RULE $SRC $DEST $MODE $OWNER $GROUP " >&2
continue;
fi
if [ "${SRC#\`node_data}" != "$SRC" ]; then
# apollo-style special link
echo "WARNING: encountered special link: $SRC" >&2
# try to make link to this SRC by adding a
# backslash to protect the tic mark.
SRC=\\$SRC
elif [ "${SRC#/}" = "$SRC" ]; then
# echo "ERROR: Relative link \"$SRC\"" >&2
# echo "WARNING: Relative link \"$SRC\"" >&2
# echo " LINE=$TYPE $RULE $SRC $DEST $MODE $OWNER $GROUP " >&2
# Protect the potential variant link variable
# (eg lnk_$(LNK))
SRC=\'$SRC\'
# continue;
fi
CMD="ln -s $SRC $DEST"
# Remove existing link if one already exists
[ -${LNKTST} "$DEST" ] && rm $DEST
;;
hard_link)
# Hard links are assumed to be made only to other
# files in the submittal -- not to existing system
# files.
SRC="$DESTTREE/$FILESET${SRC}"
if [ -z "$SRC" ]; then
echo "ERROR: No link source for \"$DEST\"" >&2
echo " LINE=$TYPE $RULE $SRC $DEST $MODE $OWNER $GROUP" >&2
continue;
fi
CMD="ln $SRC $DEST"
;;
*) echo "ERROR: Unrecognized type: \"$TYPE\"" >&2
echo " LINE=$TYPE $RULE $SRC $DEST $MODE $OWNER $GROUP" >&2
continue;
;;
esac
# createPath issues its own error messages
if [ ! -d ${DEST%/*} ]; then
createPath ${DEST%/*} || continue
fi
[ -z "$CMD" ] && continue
eval "$CMD" || {
echo "ERROR: \"$CMD\" failed" >&2
echo " LINE=$TYPE $RULE $SRC $DEST $MODE $OWNER $GROUP" >&2;
continue;
}
# set permissions for non-links
if [ "${TYPE%link}" = "$TYPE" ]; then
if [ "$USER" = "root" ]; then
chmod $MODE $DEST ||
echo "ERROR: \"chmod $MODE $DEST\" failed" >&2
chgrp $GROUP $DEST ||
echo "ERROR: \"chgrp $GROUP $DEST\" failed" >&2
chown $OWNER $DEST ||
echo "ERROR: \"chown $OWNER $DEST\" failed" >&2
fi
fi
echo $TYPE $RULE $SRC $DEST $MODE $OWNER $GROUP
done
}
###################################################
# MAIN BODY
###################################################
#
# Check Path for chmod, chown, and chgrp
#
whence chmod > /dev/null || {
echo "ERROR: \"chmod\" not in PATH." >&2
exit 1
}
whence chown > /dev/null || {
echo "ERROR: \"chown\" not in PATH." >&2
exit 1
}
whence chgrp > /dev/null || {
echo "ERROR: \"chgrp\" not in PATH." >&2
exit 1
}
CHECK_BEFORE="no"
while [ $# -ne 0 ] ; do
case $1 in
-f*)
FILESET=${1#-f}
if [ -z "$FILESET" ]; then
if [ $# -ge 1 ]; then
shift;
FILESET=$1
else
echo $Usage
exit 1;
fi
fi;;
-S*) SRCTREE=${1#-S}
if [ -z "$SRCTREE" ]; then
if [ $# -ge 1 ]; then
shift;
SRCTREE=$1
else
echo $Usage
exit 1;
fi
fi
;;
-D*) DESTTREE=${1#-D}
if [ -z "$DESTTREE" ]; then
if [ $# -ge 1 ]; then
shift;
DESTTREE=$1
else
echo $Usage
exit 1;
fi
fi
;;
-P*) CHECK_BEFORE="yes"
;;
*) files="$files $1";;
esac
if [ $# -ge 1 ]; then
shift;
fi
done
if [ -z "$files" -o -z "$SRCTREE" ]; then
echo $Usage >&2
exit 1;
fi
if [ ! -d "$SRCTREE" ]; then
echo "ERROR: Cannot access \"$SRCTREE\"." >&2
exit 1
fi
if [ ! -d "$DESTTREE" ]; then
echo "ERROR: Cannot access \"$DESTTREE\"." >&2
exit 1
fi
umask 022
if [ -f /com/ctnode ]; then
#
# Make sure berkely style permissions are applied to the product tree
# This should cause directories to be created with permissions based
# on the umask (which is otherwise ignored on "open security model"
# file systems).
#
chacl -RB $DESTTREE
fi
# Debug Stmts
echo FILESET=$FILESET
echo files=$files
echo SRCTREE=$SRCTREE
echo DESTTREE=$DESTTREE
echo "#-------------- $(date) --------------"
echo ""
TOOL_DIR=$SRCTREE/admin/IntegTools/dbTools
#
# Avoid making duplicate entries
# make sure links are referred to AFTER the files to which they point.
#
if [ $PLATFORM = "uxp" ]; then
$TOOL_DIR/uncomment $files | sort | uniq | $TOOL_DIR/linksLast - > /tmp/awk.in
cat /tmp/awk.in | awkit > /tmp/awk.out
cat /tmp/awk.out | doit
else
$TOOL_DIR/uncomment $files | sort | uniq | $TOOL_DIR/linksLast - | awkit | doit
fi
echo ""
echo "#-------------- $(date) --------------"

View file

@ -0,0 +1,765 @@
# Awk Library file for parsing UDB files
#
function parseUdb() {
# nawk has already read the initial line.
# Tokenize it before doing anything else.
tokenize()
readDefaults(defaults)
# assign hp-ux ".db" file src and link defaults
# if none were designated.
if ( SrcDefault == "" )
SrcDefault = "a_out_location"
if ( LnkDefault == "" )
LnkDefault = "link_source"
if ( TypDefault == "" )
TypDefault = "type"
if ( DestDefault == "" )
DestDefault = "install_target"
if ( ModeDefault == "" )
ModeDefault = "mode"
if ( OwnerDefault == "" )
OwnerDefault = "owner"
if ( GroupDefault == "" )
GroupDefault = "group"
readData()
}
# -------------------------------------------------------------
# readDefaults
# This routine reads the defaults at the front section
# of the universal database and salts the defaults away.
#
# -------------------------------------------------------------
function readDefaults(dflts)
{
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function readDefaults" > DeBugFile
}
do {
os = getOS()
if ( osQual != "defaults" )
syntaxError("No defaults for: " BlockToken)
if ( os == BlockToken || os == "default" )
break
skipToToken("}")
} while ( 1 )
fillDefaults()
if ( DeBug > 1 )
print "Skipping remaining defaults" > DeBugFile
# skip remaining default specs
while ( lookAhead() == "{" ) {
# This should be another default spec
# skip it. (watch out for syntax errors)
os = getOS()
if ( osQual != "defaults" )
syntaxError("Expected os:defaults found: \"" os ":" osQual "\"")
if ( os == BlockToken && fileName == FILENAME )
syntaxError("Only one \"defaults\" record allowed per os" )
skipToToken("}");
}
if ( DeBug > 0 ) Depth--
}
# -------------------------------------------------------------
# syntaxError
# bail out
#
# (optionally) mail a message to an administrator if a syntax
# error occurs in a database.
#
# -------------------------------------------------------------
function syntaxError(reason) {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function syntaxError:" > DeBugFile
}
print "Syntax ERROR line: " NR " of file: " FILENAME
if (reason)
print " " reason
system( "rm -f /tmp/SyntaxError" )
system( "touch /tmp/SyntaxError" )
print "Syntax ERROR line: " NR " of file: " FILENAME > "/tmp/SyntaxError"
if (reason)
print " " reason >> "/tmp/SyntaxError"
close( "/tmp/SyntaxError" )
if ( mailTo != "" ) {
system( "mailx -s \"database syntax error\" "mailTo" < /tmp/SyntaxError" )
}
system( "rm -f /tmp/SyntaxError" )
exit 1
}
# -------------------------------------------------------------
# fillDefaults
# This routine reads the defaults in the OS
# defaults section of the database. It saves the defaults
# in the "defaults" awk-style string array.
#
# -------------------------------------------------------------
function fillDefaults() {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function fillDefaults:" > DeBugFile
}
tempDflt = ""
NumEntries = 1
do {
if ( tempDflt != "" ) {
keyword = tempDflt
tempDflt = ""
}
else
keyword = nextToken()
if ( keyword == "}" )
break;
if ( "=" != nextToken())
syntaxError("Keyword: " keyword " not followed by \"=\" ");
tempDflt = nextToken();
if ( lookAhead() == "=" )
defaults[keyword]=""
else {
if ( tempDflt == "<SRC>" ) {
SrcDefault = keyword;
tempDflt = ""
}
if ( tempDflt == "<LNK>" ) {
LnkDefault = keyword;
tempDflt = ""
}
if ( tempDflt == "<TYPE>" ) {
TypDefault = keyword;
tempDflt = "file"
}
if ( tempDflt == "<DEST>" ) {
DestDefault = keyword;
tempDflt = ""
}
if ( tempDflt == "<MODE>" ) {
ModeDefault = keyword;
tempDflt = "0444"
}
if ( tempDflt == "<OWNER>" ) {
OwnerDefault = keyword;
tempDflt = "bin"
}
if ( tempDflt == "<GROUP>" ) {
GroupDefault = keyword;
tempDflt = "bin"
}
defaults[keyword]= tempDflt
tempDflt = ""
}
defOrder[NumEntries++] = keyword;
} while ( 1 )
if ( DeBug > 3 ) {
DBGprintArray(defaults,"defaults")
print "SrcDefault =" SrcDefault > DeBugFile
print "LnkDefault =" LnkDefault > DeBugFile
print "TypDefault =" TypDefault > DeBugFile
}
if ( DeBug > 0 ) Depth--
}
# -------------------------------------------------------------
# getOS
# This routine scans the database for an
# open brace, then a token, then a ":" indicating
# the start of an OS defaults section.
#
# -------------------------------------------------------------
function getOS()
{
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function getOS:" > DeBugFile
}
osQual = ""
gotOS = 0
if ( "{" != nextToken() )
syntaxError("Missing initial {")
os = nextToken();
if ( lookAhead() == ":" ) {
nextToken();
osQual= nextToken();
} else
osQual= ""
if ( DeBug > 0 ) Depth--
return os
}
# -------------------------------------------------------------
# nextToken
# parse the incoming data stream into tokens.
#
# -------------------------------------------------------------
function nextToken() {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function nextToken:" > DeBugFile
}
if ( EOF_Reached == 1 )
syntaxError("Premature EOF");
tmpToken=tokens[TK++]
while ( TK > Ntokens || tokens[TK] == ";" ) {
TK++
if ( TK > Ntokens )
if ( newLine() <= 0 ) {
EOF_Reached = 1;
break;
}
}
if ( DeBug > 2 )
print "Returning token: " tmpToken > DeBugFile
if ( DeBug > 0 ) Depth--
return tmpToken
}
# -------------------------------------------------------------
# lookAhead
# return the token at the head of the current list of
# tokens, but do not bump the token count in TK
#
# -------------------------------------------------------------
function lookAhead() {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function lookAhead" > DeBugFile
}
if ( DeBug > 0 ) Depth--
return tokens[TK];
}
# -------------------------------------------------------------
# newLine, tokenize
# read a new line of input and tokenize it.
#
# -------------------------------------------------------------
function newLine() {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function newLine:" > DeBugFile
}
if ( (retval = getline) <= 0 ) {
if ( DeBug > 0 ) Depth--
return retval
}
retval = tokenize()
if ( DeBug > 0 ) Depth--
return retval
}
function tokenize() {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function tokenize:" > DeBugFile
}
# Skip blank/comment lines
while ( NF == 0 || $0 ~ /^[ ]*#/ ) {
if ( (getline) <= 0 ) {
if ( DeBug > 0 ) Depth--
return 0
}
}
#
# Make sure syntactically meaningful characters are surrounded by
# white space. (I gave up on gsub for this purpose).
#
last=1
Str="" # temp string for modified input line
tstStr=$0 # part of input line being tested
newStr=$0 # current input line image with modifications
##########################################################################
# REPLACE THE FOLLOWING LINE WITH A WORK_AROUND FOR A PROBLEM WITH
# THE MATCH FUNCTION FOR THE SUN VERSION OF "nawk"
#
# while ( match(tstStr,"[^\\\][:=}{;]") ) {
#
while ( match(tstStr,"[:=}{;]") ) {
if ( RSTART-1 > 0 && substr(tstStr,RSTART-1,1) != "\\") {
RSTART=RSTART-1
LENGTH=LENGTH+1
} else {
#
# The character was escaped with a backslash.
# Patch things up -- continue testing the rest
# of the line.
#
Str=Str substr($0,last,RSTART+1)
last = last + RSTART + 1
tstStr =substr($0,last)
newStr = Str tstStr
continue;
}
####################### end of workaround ################################
############################################################################
if ( DeBug > 1 ) {
print "Tokenize: Match found in: " tstStr
print "RSTART= " RSTART " ; RLENGTH = " RLENGTH
}
# match found --
# the temp string is now modified to contain:
# 1) all characters up to the match and the first char of match
# 2) blank before the syntactically significant char
# 3) the significant character
# 4) blank following the significant character
Str=Str substr($0,last,RSTART) " " substr($0,last+RSTART,1) " "
last = last + RSTART + 1;
#
# Test remaining part of input line for additional occurances
# of syntactically significant characters.
#
tstStr=substr($0,last)
#
# Our best guess for the new string is the part of the
# input line already tested plus the part yet to be tested.
#
newStr=Str tstStr
}
#
# Check for any instances of syntax chars at the start of the line
#
sub("^[:=}{;]","& ",newStr);
$0 = newStr
#
# allow escaping of significant syntax characters
#
gsub("[\\\][{]","{")
gsub("\\\:",":")
gsub("\\\;",";")
gsub("\\\=","=")
gsub("[\\\][}]","}")
#
# Having insured that interesting chars are surrounded by blanks
# now tokenize the input line.
#
Ntokens = split($0,tokens)
TK = 1
if ( DeBug > 3 )
DBGprintTokens()
if ( DeBug > 0 ) Depth--
return Ntokens
}
function DBGprintTokens()
{
for ( i = 1; i <= Ntokens ; i++ )
print "tokens[" i "] = " tokens[i] > DeBugFile
return 0
}
function DBGprintArray(array,name) {
for ( i in array) {
print name "[" i "] = " array[i] > DeBugFile
}
}
# -------------------------------------------------------------
# skipToToken
# read until the passed in token is encountered
#
# -------------------------------------------------------------
function skipToToken(tok)
{
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function skipToToken:" > DeBugFile
}
while ( nextToken() != tok )
;
if ( DeBug > 0 ) Depth--
}
# -------------------------------------------------------------
# readData
#
# -------------------------------------------------------------
function readData() {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function readData" > DeBugFile
}
while ( EOF_Reached == 0 ) {
if ( fileName != FILENAME ) {
if ( DeBug > 1 ) {
print "====>Files Changed" > DeBugFile
print "fileName= " fileName > DeBugFile
print "FILENAME= " FILENAME > DeBugFile
}
fileName = FILENAME
# skip over defaults section of the new file
while ( lookAhead() == "{" ) {
# This should be another default spec
# skip it. (watch out for syntax errors)
os = getOS()
if ( osQual != "defaults" )
syntaxError("Expected os:defaults found: \"" os ":" osQual "\"")
#
# Relax this restriction since we are
# ignoring this defaults record
#if ( os == BlockToken )
# syntaxError("Only one \"defaults\" record allowed per os" )
skipToToken("}");
}
}
if ( getNextRecord(record) > 0 )
PRTREC(record);
# skip remaining os entries for this source
# sorry no error checking.
while ( EOF_Reached == 0 && lookAhead() == "{" )
skipToToken("}")
if ( DeBug > 1 )
print "EOF_Reached = " EOF_Reached > DeBugFile
}
if ( DeBug > 0 ) Depth--
}
# -------------------------------------------------------------
# getNextRecord
#
# this function fills the rec[] array with defaults
#
# then it scans for a block that has a token maching
# BlockToken, or accepts a block with the "default"
# token. The "default" token is not accepted if
# defaults are disallowed.
#
# finally fillRecord is called to read in the lines
# in the block and override the entries in the rec[] array.
#
# -------------------------------------------------------------
function getNextRecord(rec) {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering function getNextRecord:" > DeBugFile
}
# fill with defaults
for ( i in defaults )
rec[i] = defaults[i];
do {
src = nextToken()
if ( DeBug > 2 )
print "src=" src > DeBugFile
# Allow special characters to appear in src names if they have been backslashed
# if ( src ~ /[{:=}]/ )
# syntaxError("Invalid source: \"" src "\"");
do {
os = getOS()
if ( DeBug > 1 ) {
print "Got os " os " and qual= " osQual > DeBugFile
print "NR= " NR " : " $0 > DeBugFile
}
if (( os != BlockToken || osQual == "not" ) \
&& ( os != "default" || UseDefaultBlocks != "Y" ) ) {
if ( DeBug > 2)
print "Skipping to end of os rec" > DeBugFile
skipToToken("}");
}
if ( EOF_Reached == 1 || fileName != FILENAME ){
if ( DeBug > 0 ) Depth--
return 0
}
if ( DeBug > 2 )
print "Look Ahead is: " tokens[TK] > DeBugFile
} while ( lookAhead() == "{" )
} while (( os != BlockToken ) && ( os != "default" || UseDefaultBlocks != "Y"))
if ( DeBug > 2)
print "About to call fillRecord" > DeBugFile
fillRecord(rec)
if ( DeBug > 0 ) Depth--
return 1
}
function fillRecord(rec) {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering fillRecord:" > DeBugFile
}
tempEntry = ""
do {
if ( tempEntry != "" ) {
keyword = tempEntry;
tempEntry = ""
} else
keyword = nextToken();
if ( keyword == "}" )
break;
if ( "=" != nextToken())
syntaxError("Keyword: " keyword " not followed by \"=\"");
tempEntry = nextToken();
if ( lookAhead() == "=" )
rec[keyword] = ""
else {
rec[keyword] = tempEntry
tempEntry = ""
}
} while (1)
#
# check for source entry
# THIS IMPLIES KNOWLEDGE OF .db FILE ENTRIES!!
if ( DeBug > 2)
print "TYPE= " rec[TypDefault] > DeBugFile
if ( src == "-" )
if ( rec[TypDefault]=="directory" || rec[TypDefault]=="empty_dir")
{
# no source required for a directory
if ( rec[SrcDefault] != "" )
syntaxError(SrcDefault " \"" rec[SrcDefault] "\" specified for a directory.")
if ( rec[LnkDefault] != "" )
syntaxError(LnkDefault " \"" rec[LnkDefault] "\" specfied for a directory.")
rec[SrcDefault] = src;
} else if ( rec["status"] == "---cu-" ) {
# This is used for some reason (X11-SERV.db)
if ( rec[SrcDefault] != "" )
syntaxError( "File: \"" rec["install_target"] "\" with special status: \"---cu-\" should have no source.");
} else
syntaxError("Invalid source: \"" src "\" for type: \"" rec[TypDefault] )
else if ( rec[TypDefault] ~ /link/ )
if ( src ~ /^\// || src ~ /^\./ ) {
if ( rec[SrcDefault] != "")
syntaxError( SrcDefault ": \"" rec[SrcDefault] "\" specified for link: \"" src "\"")
if ( rec[LnkDefault] == "" )
rec[LnkDefault]=src;
} else
syntaxError("Invalid source: \"" src "\" for type: \"" rec[TypDefault] "\"")
else if ( rec[TypDefault] == "file" || rec[TypDefault] == "control" )
rec[SrcDefault] = src;
else
syntaxError("Unrecognized type:\"" rec[TypDefault] "\"")
if ( DeBug > 0 ) Depth--
}
# -------------------------------------------------------------
# printDB
# Print records in ".db" format
# -------------------------------------------------------------
function printDb(rec) {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering printDb:" > DeBugFile
}
# NumEntries should be one greater than the number of defaults
# read in.
for ( i = 1; i< NumEntries; i++ ) {
printf("%-40s %s %s\n",defOrder[i], ":",rec[defOrder[i]])
}
print "#"
if ( DeBug > 0 ) Depth--
}
# -------------------------------------------------------------
# printLst
# Print records in ".lst" format
# -------------------------------------------------------------
function printLst(rec) {
if ( DeBug > 0 ) {
Depth++
for ( i=1; i < Depth; i++ )
printf(" ") > DeBugFile
print "Entering printLst:" > DeBugFile
}
if ( rec[TypDefault] ~ /link/ )
Source = LnkDefault
else
Source = SrcDefault
printf("%s %s %s %s %s %s %s %s %s\n",
rec[ DestDefault],
rec[ ModeDefault ],
rec[ Source ],
rec[ TypDefault ],
rec[ OwnerDefault ],
rec[ GroupDefault ],
rec[ "status" ],
rec[ "processor" ],
rec[ "responsible_project" ] )
if ( DeBug > 0 ) Depth--
}
# -------------------------------------------------------------
# printGather
# print records in one of the formats expected by Gather.ksh
# (Jim Andreas print routine).
# -------------------------------------------------------------
function printGather(rec) {
# print "Entering printRecord: "
if (( BlockToken == "hp-ux" ) && ( rec[ "processor" ] != "378" ))
{
if ( index( rec[ "processor" ], Machine ) == 0 )
{
#printf( "skipping %s, Machine %s machines %s\n", src, Machine, rec[ "processor" ] );
return
}
}
if ( action == "toSDD" )
{
if ( rec[ "type" ] == "file" )
{
printf("%s:F:%s:%s:%s:*::\n",
rec[ "install_target" ], rec[ "owner" ],
rec[ "group" ], rec[ "mode" ])
}
}
else if ( action == "toReleaseTree" )
{
if ( ( rec[ "type" ] == "hard_link" ) ||
( rec[ "type" ] == "sym_link" ) ||
( rec[ "type" ] == "file" ) )
{
#
# if this is a link, then fudge a source file for Gather.ksh
# to check on. Really we are linking two dest files together
# so the hack is to get around the check in Gather.ksh
#
if ( ( rec[ "type" ] == "hard_link" ) ||
( rec[ "type" ] == "sym_link" ) )
{
printf( " {s}%s {d}%s\n", "-", rec[ "install_target" ] );
}
else if ( length( src ) > 34 )
printf( " {s}%s {d}%s\n", src, rec[ "install_target" ] );
else
printf( " {s}%-34s {d}%s\n", src, rec[ "install_target" ] );
if ( rec[ "install_rule_name" ] == "c-" )
{
printf( "compress -c < {s}%s > {d}%s\n", src,
rec[ "install_target" ] );
}
else if ( rec[ "type" ] == "sym_link" )
{
printf( "ln -s %s {d}%s\n", src,
rec[ "install_target" ] );
}
else if ( rec[ "type" ] == "hard_link" )
{
printf( "ln {d}%s {d}%s\n", src,
rec[ "install_target" ] );
}
else if ( rec[ "uncompress" ] == "true" )
{
printf( "uncompress -c < {s}%s > {d}%s\n", src,
rec[ "install_target" ] );
}
else if ( length( src ) > 34 )
{
printf( "cp {s}%s {d}%s\n", src,
rec[ "install_target" ] );
}
else
{
printf( "cp {s}%-34s {d}%s\n", src,
rec[ "install_target" ] );
}
printf( "%s %s %s\n", rec[ "owner" ], rec[ "group" ], rec[ "mode" ])
rec[ "install_rule_name" ] = "";
rec[ "uncompress" ] = "";
}
}
else if ( action == "toDeliverArgs" )
{
temp = rec[ "install_target" ];
m = n = index( temp, "/" );
while ( n != 0 )
{
temp = substr( temp, n+1 );
n = index( temp, "/" );
m += n;
}
dirnametarget = substr( rec[ "install_target" ], 1, m-1 );
if ( length( rec[ "install_target" ] ) > 40 )
{
printf("%s -d .%s\n", rec[ "install_target" ], dirnametarget );
}
else
{
printf("%-40s -d .%s\n", rec[ "install_target" ], dirnametarget );
}
}
else if ( action == "toCheckBuild" )
{
# print "Entering printRecord - toCheckBuild: "
#
# skip any link info
#
if ( rec[ "type" ] == "file" )
{
#
# just print the source path for the checker tool
#
printf("%s\n", src );
}
}
else if ( action == "toFileList" )
{
#
# skip any link info
#
if ( rec[ "type" ] == "file" )
{
#
# print the source and install_target for the human person
#
if ( length( src ) > 40 || length( rec[ "install_target" ] ) > 40 )
{
printf("%s -> %s %s\n", src,
rec[ "install_target" ], rec[ "mode" ] );
}
else
{
printf("%-40s -> %-40s %s\n", src,
rec[ "install_target" ], rec[ "mode" ] );
}
}
}
else if ( action == "toTargetList" )
{
#
# skip any link info
#
if ( rec[ "type" ] == "file" )
{
#
# just print the install_target
#
printf("%s\n", rec[ "install_target" ] );
}
}
}

View file

@ -0,0 +1,437 @@
#!/bin/ksh
# -------------------------------------------------------------
# udbToAny.ksh
#
# This script was leveraged from "databaseConversionTool.ksh"
# it should provide a superset of the functionality of that script;
# however the primary motivation was to get away from the use of
# multiple divergent parsers for the ".udb" style database. The
# parser has been moved into an awk "library" file: udbParseLib.awk.
# this parser can and should be used by all scripts wishing to parse
# the ".udb" data bases.
#
# ----------------------------
# new features:
#
# -toDB to convert to old mksubmit-style ".db" format
# -toLst to convert to old domain-port-style ".lst" files
# -toCustom <prt> to specify a print routine for a custom format
# -custom <awklib> to specify a library containing custom print routines.
# -udbParseLib <awkLib> to specify a library containing an alternate parser.
# -mailTo <user> to specify an administrator who will receive mail
# concerning parsing errors.
#
# -Database is now obsolete (although it will still work)
# <udbfile> ... ... The script can now take multiple udb files (Only the
# defaults specified in the first udb file will apply).
#
# ----------------------------
#
# This script converts a universal database to an
# HP OSF style System Definition Database (SDD) file,
# or a set of args suitable to supply to the Chelmsford deliver
# tool, or a set of commands to build a delivery tree.
# For more details, please refer to the "X11 and VUE for HP_OSF/1.0"
# document.
#
# This script was leveraged (read hacked extensively) from
# the "udbToDb" script by Jim Andreas. Ron Voll authored the
# original "udbToDb" script.
#
# -------------------------------------------------------------
# usage: databaseToSDD.ksh Option udbFile
#
# where Option is one of the following:
#
# -toDB convert a .udb to ".db" format
# -toLst convert a .udb to ".lst" format
# -toSDD convert a .udb to SDD format
# -toDeliverArgs convert a .udb to args that the deliver tool likes
# -toReleaseTree convert a .udb to a script to build a delivery tree
# -toCheckBuild convert a .udb to a script to check the items in a build
# -toFileList convert a .udb to a list of files for carbon units
# -Machine specifies 3,7,8 for hp-ux releases
# -ReleaseStream {hp-ux, osf, whatever}
# -NoDefaults do not convert any records labeled default
# -toTargetList convert a .udb to a list of target files in product tree
# the leading path is stripped and just the target
# file is left - for easy diffing with some other
# version of a release
# -custom <awkFile> Supply a custom "awk" print library
# -toCustom <prt routine>
# -udbParseLib <awkFile> Supply an alternate "awk" parser library
# -------------------------------------------------------------
# ConvertRoutine
#
# This ksh function invokes awk to do all of the dirty
# work. The DoAction variable is consulted only in the
# final stages of printing the desired info after the
# .udb "phrases" are parsed.
#
# -------------------------------------------------------------
ConvertRoutine()
{
#
# set what we are going to do
#
typeset DoAction=$1
#
# set the "release stream" or token in a block in the .udb
# file for which we will scan.
#
typeset BlockToken=$2
#
# and for HP-UX releases, the particular machine 68k/Snake/S800 3/7/8
#
typeset machine=$3
#
# set flag if default blocks are to be processed
#
typeset UseDefaultBlocks=$4
shift
shift
shift
shift
AWK=/usr/bin/awk
if [ -x /usr/bin/nawk ]; then
AWK=/usr/bin/nawk
fi
#
# Custom print routines may use the following parser variables:
# defOrder[] --- An array containing the names of the fields in
# a data base record (in the correct order).
# NumEntries --- One MORE than the number of entries in the
# "defOrder" array. This is the number of fields
# in a data base record.
# rec[] --- An associative array indexed by data base record
# field name containing the value of the field.
#
# Assign custom print routines to be used for output. The default is to
# use the "printDb" function associated with the library.
#
typeset PRT=printDb
case "$DoAction" in
toDB)
PRT=printDb
;;
toLst)
PRT=printLst
;;
toFileList|toTargetList|toCheckBuild|toReleaseTree|toDeliverArgs|toSDD)
PRT=printGather;
;;
toCustom)
CUSTOM_PRINT="-f $CUSTOM_PRINT_LIB"
PRT=$CUS_PRT
;;
*) # Unknown Action
echo "$0: Unknown Action>> \"$doAction\""
exit 1;
;;
esac
cat > /tmp/awk$$ <<EOF
#
# The function name "PRTREC" is used by the parsing routines
# to do the output. By providing a custom output function you
# can print the database any way you want. The default is to
# use the "printRecord" function built defined in the awk file
# containing the awk parser.
#
function PRTREC(rec) {
$PRT(rec)
}
BEGIN {
parseUdb()
}
{
print "Getting New Line AWK style -- Problem?"
exit 1
}
EOF
#
# Create a single awk file for use with the "-f" parameter.
# IBM's awk only allows one "-f"
#
cat "$UDB_PARSE_LIB" >> /tmp/awk$$
[ -z "$CUSTOM_PRINT" ] || cat "$CUSTOM_PRINT_LIB" >> /tmp/awk$$
$AWK -v mailTo="$Administrator" \
-v action="$DoAction" \
-v BlockToken="$BlockToken" \
-v Machine="$machine" \
-v UseDefaultBlocks="$UseDefaultBlocks" \
-v DeBugFile="$DEBUGFILE" \
-v DeBug="$DEBUGLEVEL" \
-f /tmp/awk$$ $*
#
# Removed from parameter list because IBM's awk only allows one "-f"
# $CUSTOM_PRINT \
# -f "$UDB_PARSE_LIB" \
#
rm /tmp/awk$$
}
#
# print a handy usage message to stderr (file descriptor 2 )
#
#
usage()
{
exec >&2
echo "$ScriptName: usage:"
echo ""
echo " $ScriptName [Options] <UdbFile> ..."
echo ""
echo " -toDB convert a .udb to \".db\" format"
echo " -toLst convert a .udb to \".lst\" format"
echo " -toSDD convert a .udb to SDD format"
echo " -toDeliverArgs convert a .udb to args that the deliver tool likes"
echo " -toReleaseTree convert a .udb to a script to build a delivery tree"
echo " -toCheckBuild convert a .udb to a script to check a build"
echo " -toFileList convert a .udb to a list of files"
echo " -toTargetList convert a .udb to a list of product files"
echo " -ReleaseStream {hp-ux, osf, whatever}"
echo " -Machine specifies machine 3,7,8 for hp-ux"
echo " -NoDefaults do not convert any records labeled \"default\""
echo " -Database path (obsolete) specifies full path to the .udb file to convert"
echo " -mailTo <user> Specify a user to receive mail on errors."
echo " -toCustom <prt> Specify the name of a custom print routine."
echo " -custom <awkFile> Supply a custom "awk" print library."
echo " -udbParseLib <awkFile> Supply an alternate 'awk' parser library"
exit 1
}
# OK, here is where we really start execution.
# Check that the first argument defines what this script is
# supposed to do:
# Obscurity footprint-in-the-sand: "${1##*/}" is equivalent
# to basename(1)
#
ScriptName=${0##*/}
# -toSDD convert a .udb to SDD format
# -toDeliverArgs convert a .udb to args that the deliver tool likes
# -toReleaseTree convert a .udb to a script to build a delivery tree
# -toCheckBuild convert a .udb to a script to check the items in a build
if [ $# -le 3 ]; then
usage $0
fi
typeset TakeDefaultBlocks="Y"
typeset Administrator=""
#typeset DBTOOLSRC=/x/toolsrc/dbTools
typeset DBTOOLSRC=`dirname $0`
typeset UDB_PARSE_LIB="$DBTOOLSRC/udbParseLib.awk"
typeset CUSTOM_PRINT_LIB=""
typeset DEBUGFILE="/dev/tty"
typeset DEBUGLEVEL=0
if [ $# -gt 2 ]; then
while [ $# -gt 0 ]
do
case $1 in
-NoDefaults)
TakeDefaultBlocks=N
shift
continue
;;
-toDB)
Action=toDB
shift;
continue;
;;
-toLst)
Action=toLst
shift;
continue;
;;
-toSDD)
Action=toSDD
shift
continue
;;
-toDeliverArgs)
Action=toDeliverArgs
shift
continue
;;
-toReleaseTree)
Action=toReleaseTree
shift
continue
;;
-toCheckBuild)
Action=toCheckBuild
shift
continue
;;
-toTargetList)
Action=toTargetList
shift
continue
;;
-toFileList)
Action=toFileList
shift
continue
;;
-Machine)
if [ "x$2" = "x" ]; then
usage
fi
Machine=$2
shift
shift
continue
;;
-ReleaseStream)
if [ "x$2" = "x" ]; then
usage
fi
ReleaseStream=$2
shift
shift
continue
;;
-Database)
if [ "x$2" = "x" ]; then
usage
fi
if [ ! -r "$2" ]; then
usage
fi
Database="$Database $2"
shift
shift
continue
;;
-udbParseLib) # specify alternate "awk" parser location
if [ "x$2" = "x" ]; then
usage
fi
if [ ! -r "$2" ]; then
usage
fi
UDB_PARSE_LIB=$2
shift
shift
continue
;;
-toCustom) # specify custom "awk" print routines
if [ "x$2" = "x" ]; then
usage
fi
Action=toCustom
CUS_PRT=$2
shift
shift
continue
;;
-custom) # specify custom "awk" print routines
if [ "x$2" = "x" ]; then
usage
fi
if [ ! -r "$2" ]; then
usage
fi
CUSTOM_PRINT_LIB=$2
shift
shift
continue
;;
-mailTo) # specify an administrator who receives mail about errors.
if [ "x$2" = "x" ]; then
usage
fi
Administrator=$2
shift
shift
continue
;;
-DeBugFile) # specify a debug file and debug level for parser debug info
if [ "x$2" = "x" ]; then
usage
fi
if [ "x$3" = "x" ]; then
usage
fi
DEBUGFILE=$2
shift 2
continue
;;
-DeBugLevel) # specify a debug level for parser debug info
if [ "x$2" = "x" ]; then
usage
fi
if [ "x$3" = "x" ]; then
usage
fi
DEBUGLEVEL=$2
shift 2
continue
;;
-*)
echo "unknown option: $1"
echo ""
usage
exit 1;
;;
*) if [ ! -r $1 ]; then
usage
fi
Database="$Database $1"
shift;
;;
esac
done
fi
if [ "$Action" = "toCustom" ]; then
if [ -z "$CUSTOM_PRINT_LIB" ]; then
echo "You Must specify an awk file containing the custom print routine \"$CUS_PRT\""
exit 1;
fi
fi
if [ "$Machine" = "" ]; then
Machine=NA
elif [ "$Machine" = "300" ]; then
Machine="3"
elif [ "$Machine" = "700" ]; then
Machine="7"
elif [ "$Machine" = "800" ]; then
Machine="8"
fi
if [ "$ReleaseStream" = "" ]; then
echo "$ScriptName: need to specify a -ReleaseStream" >&2
exit 1
fi
if [ "$Database" = "" ]; then
echo "$ScriptName: need to specify a -Database" >&2
exit 1
fi
ConvertRoutine $Action $ReleaseStream $Machine $TakeDefaultBlocks $Database

View file

@ -0,0 +1,9 @@
#! /bin/ksh
#
# Script to remove comments and blank lines from ".lst" files
# and coalesce multiple blanks/tabs into a single blank
#
cat $@ | egrep -v '^[ ]*#|^[ ]*$' | sed 's/[ ][ ]*/ /g'|\
sed 's/ $//'

View file

@ -0,0 +1,8 @@
#=============================================================================
#=============================================================================
# deinstall.dt
#
# This script has been replaced with dinstall.dt.src.
#
#=============================================================================
#=============================================================================

View file

@ -0,0 +1,783 @@
XCOMM!/bin/ksh
XCOMM $XConsortium: dinstall.dt.src /main/6 1996/04/23 11:18:22 drk $
XCOMM ==========================================================================
XCOMM ==========================================================================
XCOMM deinstall.dt
XCOMM
XCOMM Script to deinstall the April 1994 Snapshot Desktop on
XCOMM HP, IBM, Sun, Fujitsu, or Novell Unix systems from a CDROM
XCOMM
XCOMM ==========================================================================
XCOMM ==========================================================================
XCOMM ==========================================================================
XCOMM
XCOMM DtiClearScreen - clears the screen
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM Return -none
XCOMM ==========================================================================
#define HASH #
#define STAR *
DtiClearScreen() {
clear 1>&2
HASH DtiPrint "clear"
}
XCOMM ==========================================================================
XCOMM
XCOMM Log - echo to log
XCOMM
XCOMM Input
XCOMM $1 - data to echo to log
XCOMM Output - none
XCOMM Return -none
XCOMM ==========================================================================
Log()
{
printf "$1" $2 $3 $4 $5 >> $LOG_FILE
}
XCOMM ==========================================================================
XCOMM
XCOMM DtiPrint - echo to stderr and log
XCOMM
XCOMM Input
XCOMM $1 - data to echo to stdout
XCOMM Output - none
XCOMM Return -none
XCOMM ==========================================================================
DtiPrint()
{
printf "$1" $2 $3 $4 $5 $6 $7 $8 $9 >&2
Log "$1" $2 $3 $4 $5 $6 $7 $8 $9
}
XCOMM ==========================================================================
XCOMM
XCOMM DtiShow - echo to stdout
XCOMM
XCOMM Input
XCOMM $1 - data to echo to stdout
XCOMM Output - none
XCOMM Return -none
XCOMM ==========================================================================
DtiShow()
{
printf "$1" $2 $3 $4 $5 $6 $7 $8 $9 >&2
}
XCOMM ==========================================================================
XCOMM
XCOMM DtiReturn - return a string to stdout
XCOMM
XCOMM Input
XCOMM $1 - data to return
XCOMM Output - none
XCOMM Return -none
XCOMM ==========================================================================
DtiReturn()
{
echo "$1"
}
XCOMM ==========================================================================
XCOMM
XCOMM DtiWhoami
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM Return
XCOMM result of system 'whoami' command
XCOMM
XCOMM ==========================================================================
DtiWhoami()
{
$WHOAMI_PATH/whoami
}
XCOMM ==========================================================================
XCOMM
XCOMM Exit - log and exit
XCOMM
XCOMM Input
XCOMM $1 - data to echo to log
XCOMM Output - none
XCOMM Return -none
XCOMM ==========================================================================
Exit()
{
Log "\n==================================================================\n"
Log "* $(date) $($WHOAMI_PATH/whoami)@$(hostname)*"
Log "* $1*"
Log "\n*exit_code = $2*"
Log "\n==================================================================\n"
exit $2
}
XCOMM ==========================================================================
XCOMM
XCOMM GetPlatform
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM Return
XCOMM "hpux"
XCOMM "aix"
XCOMM "sun"
XCOMM "uxp"
XCOMM "usl"
XCOMM "dec"
XCOMM ==========================================================================
GetPlatform()
{
if [ -z "$getPlatform" ]; then
os=`uname -s`
case $os in
*HP-UX*) getPlatform=hp;;
*AIX*) getPlatform=ibm;;
*SunOS*) getPlatform=sun;;
*UNIX_System_V*) getPlatform=uxp;;
*UNIX_SV*) getPlatform=usl;;
*OSF1*) getPlatform=dec;;
esac
fi
DtiReturn $getPlatform
}
XCOMM ==========================================================================
XCOMM
XCOMM ValidOS - Verify OS is valid to deinstall on
XCOMM
XCOMM Input - none
XCOMM Output - Error message if invalid platform, will exit.
XCOMM Return
XCOMM "hpux"
XCOMM "aix"
XCOMM "sun"
XCOMM "uxp"
XCOMM "usl"
XCOMM "dec"
XCOMM ==========================================================================
ValidOS()
{
platform=$(GetPlatform)
case "$platform" in
hp|ibm|sun|uxp|usl|dec)
DtiReturn $platform
;;
*) Exit $INVALID_OS_MSG 1
;;
esac
}
XCOMM ==========================================================================
XCOMM
XCOMM ResolvePathName
XCOMM
XCOMM Input - File Name to be resolved to actual file
XCOMM Output - none
XCOMM Return
XCOMM Actual File Name resolved down to through all links
XCOMM
XCOMM ==========================================================================
ResolvePathName() {
if [ "/" = "$1" ]; then
echo $1$2
elif [ -L $1 ]; then
ResolvePathName `/bin/ls -l $1 | awk '{print $NF}'` $2
else
ResolvePathName `dirname $1` `basename $1`${2+/}$2
fi
}
XCOMM ==========================================================================
XCOMM
XCOMM FileIsLink
XCOMM
XCOMM Input - File Name
XCOMM Output - none
XCOMM Return
XCOMM TRUE, if file is a link
XCOMM FALSE, if file is not a link
XCOMM ==========================================================================
FileIsLink() {
if [[ -L $1 ]] && [[ -a $1 ]]
then
DtiReturn "TRUE"
else
DtiReturn "FALSE"
fi
}
XCOMM ==========================================================================
XCOMM
XCOMM StateObjective - States the objective of the Script to the user
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM
XCOMM ==========================================================================
StateObjective() {
XCOMM Display information to the user, ask if user wishes to continue
while :
do
DtiClearScreen
DtiShow "$HERALD_MSG"
DtiPrint "$OBJECTIVE_MSG"
DtiPrint "$YESNO_MSG"
read response
Log "$RESPONSE_MSG"
Log "$response"
Log "\n"
case $response in
[yY]*) return 0
;;
[nN]*) exit 0
;;
*) continue
esac
done
}
XCOMM ==========================================================================
XCOMM
XCOMM DoFilesetScript - Runs a unconfiguration script in the post_install dirs
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM
XCOMM ==========================================================================
DoFilesetScript()
{
FilesetName=$1
HASH
HASH Check for the lowercase PLATFORM dir. If doesn't exist then
HASH the tree is in uppercase.
HASH
if [ ! -f $TAR_TREE/dt.pkg ];
then
typeset -u ScriptName
fi
if [ "$BUILD_TREE" = "" ]
then
ScriptName=$3
else
ScriptName=$2
fi
test_string=${DATABASE_FILES#*$FilesetName}
if (( ${#DATABASE_FILES} > ${#test_string} ))
then
if [ -x $POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName ]
then
DtiPrint "\n\nExecuting $PLATFORM specific $FilesetName unconfigure script...\n"
$POST_INSTALL_DIR/$PLATFORM_SCRIPT_DIR/$ScriptName -d 2>&1 | \
tee -a $LOG_FILE
elif [ -x $POST_INSTALL_DIR/$ScriptName ]
then
DtiPrint "\n\nExecuting $FilesetName unconfigure script...\n"
$POST_INSTALL_DIR/$ScriptName -d 2>&1 | tee -a $LOG_FILE
fi
fi
}
XCOMM ==========================================================================
XCOMM
XCOMM RunUnconfigScripts - Runs relevant unconfiguration scripts, based on
XCOMM fileset installed, calls DoFilesetScript
XCOMM Input - none
XCOMM Output - none
XCOMM
XCOMM ==========================================================================
RunUnconfigScripts()
{
DtiPrint "\n\nRunning unconfigure scripts...\n"
DoFilesetScript CDE-TT configTT tt.cfg
DoFilesetScript CDE-MIN configMin min.cfg
DoFilesetScript CDE-RUN configRun run.cfg
DoFilesetScript CDE-HELP configHelp help.cfg
DoFilesetScript CDE-HELP-PRG configHelpPrg helpprg.cfg
DoFilesetScript CDE-HELP-RUN configHelpRun helprun.cfg
DoFilesetScript CDE-SHLIBS configShlibs shlibs.cfg
DoFilesetScript CDE-AB configAb ab.cfg
DoFilesetScript CDE-DEMOS configDemos demos.cfg
DoFilesetScript CDE-ICONS configIcons icons.cfg
DoFilesetScript CDE-INC configInc inc.cfg
DoFilesetScript CDE-MAN configMan man.cfg
DoFilesetScript CDE-MAN-DEV configManDev mandev.cvg
DoFilesetScript CDE-MSG-CAT configMsgCat msgcat.cfg
DoFilesetScript CDE-PRG configPrg prg.cfg
}
XCOMM ==========================================================================
XCOMM
XCOMM ValidConfiguration - Checks to see if the desktop was installed or
XCOMM partially installed on your system
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM Return - TRUE, if valid configuration
XCOMM FALSE, for no desktop was found on the system
XCOMM
XCOMM ==========================================================================
ValidConfiguration() {
if (( [[ -a $ABSOLUTE_USR_LOCATION ]] || [[ -a $DEFAULT_USR_LOCATION ]] ) &&
( [[ -a $ABSOLUTE_ETC_LOCATION ]] || [[ -a $DEFAULT_ETC_LOCATION ]] ) &&
( [[ -a $ABSOLUTE_VAR_LOCATION ]] || [[ -a $DEFAULT_VAR_LOCATION ]] ))
then
DtiReturn "TRUE"
else
STATUS="FALSE"
for i in $ABSOLUTE_USR_LOCATION $ABSOLUTE_ETC_LOCATION \
$ABSLOUTE_VAR_LOCATION $DEFAULT_USR_LOCATION \
$DEFAULT_ETC_LOCATION $DEFAULT_VAR_LOCATION
do
if [ -a $i ]
then
STATUS="TRUE"
break
fi
done
DtiReturn "$STATUS"
fi
}
XCOMM ==========================================================================
XCOMM
XCOMM DisplayDirs - Determines if directories should be presented
XCOMM to the user to determin if they will be deleted or not.
XCOMM
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM Return - TRUE, if some directories will be deleted
XCOMM FALSE, if NO directories will be deleted
XCOMM
XCOMM ==========================================================================
DisplayDirs() {
if [[ -d $ABSOLUTE_USR_LOCATION ]] && [[ -a $ABSOLUTE_USR_LOCATION ]]
then
DtiReturn "TRUE"
elif [[ -d $ABSOLUTE_ETC_LOCATION ]] && [[ -a $ABSOLUTE_ETC_LOCATION ]]
then
DtiReturn "TRUE"
elif
[[ -d $ABSOLUTE_VAR_LOCATION ]] && [[ -a $ABSOLUTE_VAR_LOCATION ]]
then
DtiReturn "TRUE"
else
DtiReturn "FALSE"
fi
}
XCOMM ==========================================================================
XCOMM
XCOMM DisplayDirs - Determines if links should be presented
XCOMM to the user to determine if they will be deleted or not.
XCOMM
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM Return - TRUE, if some links will be deleted
XCOMM FALSE, if NO links will be deleted
XCOMM
XCOMM ==========================================================================
DisplayLinks() {
if [[ -L $DEFAULT_USR_LOCATION ]] && [[ -a $DEFAULT_USR_LOCATION ]]
then
DtiReturn "TRUE"
elif [[ -L $DEFAULT_ETC_LOCATION ]] && [[ -a $DEFAULT_ETC_LOCATION ]]
then
DtiReturn "TRUE"
elif
[[ -L $DEFAULT_VAR_LOCATION ]] && [[ -a $DEFAULT_VAR_LOCATION ]]
then
DtiReturn "TRUE"
else
DtiReturn "FALSE"
fi
}
XCOMM ==========================================================================
XCOMM
XCOMM ShowDirsToBeDeleted - Shows what dirs and links will be deleted to the user
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM
XCOMM ==========================================================================
ShowDirsToBeDeleted() {
XCOMM Display information to the user, ask if user wishes to continue
while :
do
DtiClearScreen
DtiShow "$HERALD_MSG"
if [ $(DisplayDirs) = "TRUE" ]
then
DtiPrint "$DELETE_DIRS_MSG"
if [ -a $ABSOLUTE_USR_LOCATION ]
then
DtiPrint "$DIR_MSG" "$ABSOLUTE_USR_LOCATION"
fi
if [ -a $ABSOLUTE_ETC_LOCATION ]
then
DtiPrint "$DIR_MSG" "$ABSOLUTE_ETC_LOCATION"
fi
if [ -a $ABSOLUTE_VAR_LOCATION ]
then
DtiPrint "$DIR_MSG" "$ABSOLUTE_VAR_LOCATION"
fi
fi
if [ $(DisplayLinks) = "TRUE" ]
then
DtiPrint "\n\n$DELETE_LINKS_MSG"
if [ $(FileIsLink $DEFAULT_USR_LOCATION) = "TRUE" ]
then
DtiPrint "$LINK_DIR_MSG" "$DEFAULT_USR_LOCATION"
fi
if [ $(FileIsLink $DEFAULT_ETC_LOCATION) = "TRUE" ]
then
DtiPrint "$LINK_DIR_MSG" "$DEFAULT_ETC_LOCATION"
fi
if [ $(FileIsLink $DEFAULT_VAR_LOCATION) = "TRUE" ]
then
DtiPrint "$LINK_DIR_MSG" "$DEFAULT_VAR_LOCATION"
fi
fi
DtiPrint "\n\n$WARNING_MSG"
DtiPrint "\n\n\n$YESNO_MSG"
read response
Log "$RESPONSE_MSG"
Log "$response"
Log "\n"
case $response in
[yY]*) return 0
;;
[nN]*) exit 0
;;
*) continue
esac
done
}
XCOMM ==========================================================================
XCOMM
XCOMM StopDesktop - Stops the desktop if it was running
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM
XCOMM ==========================================================================
StopDesktop() {
if [ -f $ABSOLUTE_VAR_LOCATION/Xpid ]
then
DtiPrint "\n\nStopping Desktop... \n"
kill -TERM `cat $ABSOLUTE_VAR_LOCATION/Xpid` 2> /dev/null
fi
}
XCOMM ==========================================================================
XCOMM
XCOMM RemoveDesktop - Deletes Desktop files from the system
XCOMM
XCOMM Input - none
XCOMM Output - none
XCOMM
XCOMM ==========================================================================
RemoveDesktop () {
DtiPrint "Removing files from Desktop Directories...\n"
rm -rf $ABSOLUTE_USR_LOCATION
rm -rf $ABSOLUTE_ETC_LOCATION
rm -rf $ABSOLUTE_VAR_LOCATION
rm -rf $DEFAULT_USR_LOCATION
rm -rf $DEFAULT_ETC_LOCATION
rm -rf $DEFAULT_VAR_LOCATION
DtiPrint "The Desktop was successfully removed from your system.\n"
}
XCOMM ==========================================================================
XCOMM
XCOMM
XCOMM This is the MAIN of the script
XCOMM
XCOMM
XCOMM ==========================================================================
XCOMM Set up Messages
USAGE_MSG="\
Usage: deinstall.dt [-noprompt]\n"
PERMISSION_MSG="\
You must be ROOT to run this command\n"
RESPONSE_MSG="\n
response is: "
HERALD_MSG="\
The Common Open Systems Environment Desktop\n\
April 1994 Snapshot Deinstallation Procedure\n\n"
OBJECTIVE_MSG="\
This procedure will REMOVE the Desktop from your system.\n\n\n"
YESNO_MSG="\
Do you wish to continue? [y/n] "
DELETE_DIRS_MSG="\
The deinstallation will remove files from the following\n\
directories listed below:\n\n"
DIR_MSG="\
'%s'\n"
DELETE_LINKS_MSG="\
The deinstallation will remove the following symbolic \n\
link(s) listed below:\n\n"
LINK_DIR_MSG="\
'%s'\n"
WARNING_MSG="\
Any customizations made will be LOST!\n"
INVALID_OS_MSG="\
The Desktop does not support this system configuration.\n\
The deinstallation procedure will terminate.\n"
INVALID_CONFIGURATION_MSG="\
The deinstallation procedure could not locate any Desktop files\n\
on your system. The deinstallation will terminate. Please check\n\
that you are running the deinstallation script on a system that\n\
has the Desktop already installed.\n"
XCOMM Set up variables
NO_PROMPT="FALSE"
DEFAULT_USR_LOCATION="/usr/dt"
DEFAULT_ETC_LOCATION="/etc/dt"
DEFAULT_VAR_LOCATION="/var/dt"
ABSOLUTE_USR_LOCATION=$(ResolvePathName $DEFAULT_USR_LOCATION)
ABSOLUTE_ETC_LOCATION=$(ResolvePathName $DEFAULT_ETC_LOCATION)
ABSOLUTE_VAR_LOCATION=$(ResolvePathName $DEFAULT_VAR_LOCATION)
XCOMM Set up the log file
LOG_FILE="/tmp/dinstall.dt.log"
if [ -f $LOG_FILE ]
then
rm -rf $LOG_FILE 2>/dev/null
fi
touch $LOG_FILE 2>/dev/null
chmod 777 $LOG_FILE 2>/dev/null
XCOMM change directories to deinstall.dt location as all
XCOMM installation packages are relative to this
XCOMM
if [ ${0%/STAR} != "dinstall.dt" ]; then
cd ${0%/STAR}
fi
XCOMM set up the TOP directory of where the CD is mounted
TOP=`pwd`
XCOMM set up the path for whoami command
WHOAMI_PATH=/bin
platform=$(GetPlatform)
case "$platform" in
hp) WHOAMI_PATH=/usr/bin
;;
ibm) WHOAMI_PATH=/bin
;;
sun) WHOAMI_PATH=/usr/ucb
;;
uxp) WHOAMI_PATH=/usr/ucb
;;
usl) WHOAMI_PATH=/usr/ucb
;;
dec) WHOAMI_PATH=/usr/bin
;;
esac
DTIDINSTALLDT=dinstall.dt
DTICONFIGDIR=config
dtiPlatform=$(GetPlatform)
DTIPLATFORMDIR=$dtiPlatform
DTIREADME=config/config.$dtiPlatform
if [ ${0##STAR/} != $DTIDINSTALLDT ]; then
HASH
HASH CDROM driver folds filenames to uppercase
HASH
typeset -u DTIDINSTALLDT
typeset -u DTICONFIGDIR
typeset -u DTIPLATFORMDIR
typeset -u DTIREADME
fi
XCOMM Parse the command line
while [ $# -ne 0 ];
do
case $1 in
-noprompt) NO_PROMPT=TRUE
print "NO_PROMPT is set"
shift
;;
*) print "$USAGE_MSG"
DtiPrint $USAGE
exit 1;;
esac
done
XCOMM Verify that we have the Root User
if [ $(DtiWhoami) != "root" ]
then
DtiShow "$PERMISSION_MSG"
Exit "$PERMISSION_MSG" 1
fi
XCOMM Check to see if the Desktop is actually installed on the system
if [ $(ValidConfiguration ) != "TRUE" ]
then
DtiPrint "$INVALID_CONFIGURATION_MSG"
exit 1
fi
XCOMM Determine if the OS is supported
PLATFORM=$(ValidOS)
XCOMM
XCOMM Initially PLATFORM is in lower case.
XCOMM Check if the $PLATFORM directory exists.
XCOMM if doesn't exist translate all to upper case.
XCOMM
if [ -d $PLATFORM ]
then
TAR_TREE=$TOP/$PLATFORM
POST_INSTALL_DIR=$TAR_TREE/config
DATABASE_FILES=$(awk 'BEGIN {FS=":"} /FILESETS: /{print $2}' $TAR_TREE/dt.pkg 2>/dev/null)
else
PLATFORM=`echo "$PLATFORM" | /usr/bin/tr "[a-z]" "[A-Z]"`
TAR_TREE=$TOP/$PLATFORM
POST_INSTALL_DIR=$TAR_TREE/CONFIG
DATABASE_FILES=$(awk 'BEGIN {FS=":"} /FILESETS: /{print $2}' $TAR_TREE/DT.PKG 2>/dev/null)
fi
XCOMM Tell the user what is going to happen
if [ $NO_PROMPT = FALSE ]
then
StateObjective
fi
XCOMM Show the user what directories are going to be deleted
if [ $NO_PROMPT = FALSE ]
then
ShowDirsToBeDeleted
fi
XCOMM Stop the Desktop
StopDesktop
XCOMM Run the Unconfigure Scripts
RunUnconfigScripts
XCOMM Remove the Desktop Files
RemoveDesktop

View file

@ -0,0 +1,91 @@
#!/bin/ksh
echo ""
echo "ezinstall.hp is a very plain, very vanilla, very simple installation"
echo "script that installs the CDE Desktop and executes a set of config-"
echo "uration scripts. It assumes that you have set aside ample space - "
echo "about 46 Mb - for installation."
echo ""
echo "The Desktop is installed into the directory /usr/dt. This is the"
echo "logical top of CDE. If you wish to change the physical location"
echo "of the files, set up a symbolic link between /usr/dt and the actual"
echo "location. E.g., if you wish to physically locate the CDE files in"
echo "/bigdisk/opt, do a 'ln -s /bigdisk/opt /usr/dt' before executing the"
echo "ezinstall.hp script."
echo ""
echo "Okay?"
echo ""
read response
if [ `/usr/bin/whoami` != "root" ]
then
echo ""
echo "You must be root to run this script"
echo ""
exit 1
fi
if [ "$1" = "" -o "$2" = "" ]
then
echo "Usage: ezinstall <the compressed tar of dt> <the tar of the scripts>"
echo " [ -clean ]"
exit 1
fi
ztar=$1
star=$2
#
# have to install in /usr/dt
#
# clean it first
#
if [ "$3" = "-clean" ]
then
rm -rf /usr/dt/*
rm -rf /var/dt/*
fi
if [ "$1" != "skip" ]
then
compress -d <$ztar | tar xvf -
fi
#
# place the scripts in /tmp/ez
#
mkdir /tmp/ez
echo "$PWD: copying $star to /tmp/ez"
cp $star /tmp/ez
cd /tmp/ez
tarfile=${star##*/}
tar xvf $tarfile
#
# execute each of the scripts
#
for i in config* hp/config*
do
if [ -f $i ]
then
if [ ! -x $i ]
then
chmod 555 $i
fi
echo "executing $i script"
./$i
fi
done
cd /tmp
rm -rf /tmp/ez
echo ""
echo "All done!"
echo "type /usr/dt/bin/dtlogin to start CDE"
echo ""

Some files were not shown because too many files have changed in this diff Show more