annotate packages/ecosadmin.tcl @ 2711:eacd6295a6aa

* ecosadmin.tcl, pkgconf/fixhtml.tcl, devs/framebuf/synth/current/src/gen_synthfb.tcl, fs/rom/current/support/file2c.tcl, hal/mips/ref4955/current/misc/slow_cat.tcl, hal/mips/ref4955/current/misc/swap4.tcl, hal/arm/e7t/current/src/flash_cksum.tcl, hal/arm/aeb/current/src/flash_cksum.tcl, io/framebuf/current/src/gen_framebufs.tcl, services/memalloc/common/current/src/heapgen.tcl: Invoke using "/usr/bin/env tclsh". * services/memalloc/common/current/cdl/memalloc.cdl: Simplify heaps.cxx make rule.
author jld
date Thu, 08 Jan 2009 17:13:20 +0000
parents 9c68cbb6424d
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2711
eacd6295a6aa * ecosadmin.tcl, pkgconf/fixhtml.tcl,
jld
parents: 2593
diff changeset
1 #!/usr/bin/env tclsh
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 76
diff changeset
2
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
3 # {{{ Banner
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
4
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
5 #===============================================================================
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
6 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
7 # ecosadmin.tcl
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
8 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
9 # A package install/uninstall tool.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
10 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
11 #===============================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
12 #####ECOSGPLCOPYRIGHTBEGIN####
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
13 ## -------------------------------------------
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
14 ## This file is part of eCos, the Embedded Configurable Operating System.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
15 ## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
16 ## Copyright (C) 2003 John Dallaway
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
17 ## Copyright (C) 2004, 2005 eCosCentric Limited
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
18 ##
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
19 ## eCos is free software; you can redistribute it and/or modify it under
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
20 ## the terms of the GNU General Public License as published by the Free
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
21 ## Software Foundation; either version 2 or (at your option) any later version.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
22 ##
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
23 ## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
24 ## WARRANTY; without even the implied warranty of MERCHANTABILITY or
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
25 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
26 ## for more details.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
27 ##
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
28 ## You should have received a copy of the GNU General Public License along
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
29 ## with eCos; if not, write to the Free Software Foundation, Inc.,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
30 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
31 ##
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
32 ## As a special exception, if other files instantiate templates or use macros
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
33 ## or inline functions from this file, or you compile this file and link it
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
34 ## with other works to produce a work based on this file, this file does not
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
35 ## by itself cause the resulting work to be covered by the GNU General Public
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
36 ## License. However the source code for this file must still be made available
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
37 ## in accordance with section (3) of the GNU General Public License.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
38 ##
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
39 ## This exception does not invalidate any other reasons why a work based on
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
40 ## this file might be covered by the GNU General Public License.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
41 ##
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
42 ## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
43 ## at http://sources.redhat.com/ecos/ecos-license/
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
44 ## -------------------------------------------
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
45 #####ECOSGPLCOPYRIGHTEND####
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
46 #===============================================================================
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
47 ######DESCRIPTIONBEGIN####
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
48 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
49 # Author(s): jld
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
50 # Contributors: bartv
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
51 # Date: 1999-06-18
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
52 # Purpose: To install and uninstall packages from an eCos component
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
53 # repository
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
54 # Description:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
55 # Usage:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
56 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
57 #####DESCRIPTIONEND####
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
58 #===============================================================================
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
59 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
60
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
61 # }}}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
62 # {{{ Version check
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
63
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
64 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
65 # ecosadmin.tcl requires at least version 8.0 of Tcl, since it makes use of
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
66 # namespaces. It is possible that some users still have older versions.
80
2085233a121a Merge from eCos master repository on 2000-04-07-07:52:29-BST
jlarmour
parents: 78
diff changeset
67
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
68 if { [info tclversion] < 8.0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
69 puts "This script requires Tcl 8.0 or later. You are running Tcl [info patchlevel]."
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
70 return
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
71 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
72
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
73 # }}}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
74 # {{{ Namespace definition
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
75
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
76 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
77 # Namespaces. All code and variables in this script are kept in the namespace
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
78 # "ecosadmin". This is not really necessary for stand-alone operation, but if it
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
79 # ever becomes desirable to embed this script in a larger application then
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
80 # using a namespace is a lot easier.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
81 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
82 # As a fringe benefit, all global variables can be declared inside this
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
83 # namespace and initialised.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
84 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
85
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
86 namespace eval ecosadmin {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
87
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
88 # Is this program running under Windows ?
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
89 variable windows_host [expr {$tcl_platform(platform) == "windows"}]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
90 variable null_device ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
91 if { $windows_host != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
92 set ecosadmin::null_device "nul"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
93 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
94 set ecosadmin::null_device "/dev/null"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
95 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
96
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
97
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
98 # Where is the component repository ? The following input sources
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
99 # are available:
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
100 # 1) the environment variable ECOS_REPOSITORY.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
101 # 2) $argv0 should correspond to the location of the ecosadmin.tcl
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
102 # script.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
103 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
104 variable component_repository ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
105 if { [info exists ::env(ECOS_REPOSITORY)] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
106 # override the calculation of the repository location using the
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
107 # (undocumented) ECOS_REPOSITORY environment variable
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
108 set component_repository $::env(ECOS_REPOSITORY)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
109 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
110 set component_repository [pwd]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
111 if { [file dirname $argv0] != "." } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
112 set component_repository [file join $component_repository [file dirname $argv0]]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
113 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
114 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
115
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
116 # Details of the command line arguments, if any.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
117 variable list_packages_arg 0; # list
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
118 variable clean_database_arg 0; # clean
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
119 variable check_database_arg 0; # check
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
120 variable accept_license_arg 0; # --accept_license
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
121 variable extract_license_arg 0; # --extract_license
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
122 variable add_package ""; # add FILE
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
123 variable remove_package ""; # remove PACKAGE
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
124 variable keep_targets_arg ""; # --keep_targets
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
125 variable merge_repository ""; # merge REPOSITORY
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
126 variable version_arg ""; # --version VER
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
127
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
128 # Details of all known packages, targets and templates
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
129 # read from the ecos.db file
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
130 variable known_packages ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
131 variable known_targets ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
132 variable known_templates ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
133 array set package_data {};
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
134 array set target_data {};
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
135 array set template_data {};
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
136
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
137 # List of packages merged from another repository
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
138 variable merge_packages ""
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
139
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
140 # What routines should be invoked for outputting fatal errors and
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
141 # for warning messages ?
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
142 variable fatal_error_handler ecosadmin::cli_fatal_error
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
143 variable warning_handler ecosadmin::cli_warning
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
144 variable report_handler ecosadmin::cli_report
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
145
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
146 # Keep or remove the CVS directories?
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
147 variable keep_cvs 0
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
148 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
149
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
150 # }}}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
151 # {{{ Infrastructure
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
152
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
153 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
154 # Minimal infrastructure support.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
155 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
156 # There must be some way of reporting fatal errors, of outputting warnings,
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
157 # and of generating report messages. The implementation of these things
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
158 # obviously depends on whether or not TK is present. In addition, if this
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
159 # script is being run inside a larger application then that larger
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
160 # application must be able to install its own versions of the routines.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
161 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
162 # Once it is possible to report fatal errors, an assertion facility becomes
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
163 # feasible.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
164 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
165 # These routines output fatal errors, warnings or miscellaneous messages.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
166 # Their implementations depend on the mode in which this script is operating.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
167 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
168 proc ecosadmin::fatal_error { msg } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
169 $ecosadmin::fatal_error_handler "$msg"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
170 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
171
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
172 proc ecosadmin::warning { msg } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
173 $ecosadmin::warning_handler "$msg"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
174 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
175
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
176 proc ecosadmin::report { msg } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
177 $ecosadmin::report_handler "$msg"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
178 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
179
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
180 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
181 # Command line versions.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
182 # NOTE: some formatting so that there are linebreaks at ~72 columns would be
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
183 # a good idea.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
184 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
185 proc ecosadmin::cli_fatal_error_handler { msg } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
186 error "$msg"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
187 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
188
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
189 proc ecosadmin::cli_warning_handler { msg } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
190 puts "ecosadmin warning: $msg"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
191 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
192
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
193 proc ecosadmin::cli_report_handler { msg } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
194 puts "$msg"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
195 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
196
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
197 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
198 # Determine the default destination for warnings and for fatal errors.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
199 # After the first call to this function it is possible to use assertions.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
200 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
201 proc ecosadmin::initialise_error_handling { } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
202 set ecosadmin::fatal_error_handler ecosadmin::cli_fatal_error_handler
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
203 set ecosadmin::warning_handler ecosadmin::cli_warning_handler
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
204 set ecosadmin::report_handler ecosadmin::cli_report_handler
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
205 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
206
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
207 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
208 # These routines can be used by containing programs to provide their
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
209 # own error handling.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
210 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
211 proc ecosadmin::set_fatal_error_handler { fn } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
212 ASSERT { $fn != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
213 set ecosadmin::fatal_error_handler $fn
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
214 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
215
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
216 proc ecosadmin::set_warning_handler { fn } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
217 ASSERT { $fn != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
218 set ecosadmin::warning_handler $fn
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
219 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
220
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
221 proc ecosadmin::set_report_handler { fn } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
222 ASSERT { $fn != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
223 set ecosadmin::report_handler $fn
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
224 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
225
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
226 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
227 # A very simple assertion facility. It takes a single argument, an expression
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
228 # that should be evaluated in the calling function's scope, and on failure it
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
229 # should generate a fatal error.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
230 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
231 proc ecosadmin::ASSERT { condition } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
232 set result [uplevel 1 [list expr $condition]]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
233
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
234 if { $result == 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
235 fatal_error "assertion predicate \"$condition\"\nin \"[info level -1]\""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
236 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
237 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
238
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
239 # }}}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
240 # {{{ Utilities
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
241
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
242 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
243 # cdl_compare_version. This is a partial implementation of the full
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
244 # cdl_compare_version facility defined in the product specification. Its
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
245 # purpose is to order the various versions of a given package with
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
246 # the most recent version first. As a special case, "current" is
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
247 # always considered the most recent.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
248 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
249 # There are similarities between cdl_compare_version and with Tcl's
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
250 # package vcompare, but cdl_compare_version is more general.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
251 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
252
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
253 proc ecosadmin::cdl_compare_version { arg1 arg2 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
254
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
255 if { $arg1 == $arg2 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
256 return 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
257 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
258 if { $arg1 == "current"} {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
259 return -1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
260 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
261 if { $arg2 == "current" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
262 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
263 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
264
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
265 set index1 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
266 set index2 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
267 set ch1 ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
268 set ch2 ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
269 set num1 ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
270 set num2 ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
271
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
272 while { 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
273
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
274 set ch1 [string index $arg1 $index1]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
275 set ch2 [string index $arg2 $index2]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
276 set num1 ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
277 set num2 ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
278
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
279 if { ($ch1 == "") && ($ch2 == "") } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
280
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
281 # Both strings have terminated at the same time. There may have
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
282 # been some spurious leading zeroes in numbers.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
283 return 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
284
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
285 } elseif { $ch1 == "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
286
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
287 # The first string has ended first. If ch2 is a separator then
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
288 # arg2 is a derived version, e.g. v0.3.p1 and hence newer. Otherwise ch2
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
289 # is an experimental version v0.3beta and hence older.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
290 if { [string match \[-._\] $ch2] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
291 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
292 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
293 return -1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
294 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
295 } elseif { $ch2 == "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
296
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
297 # Equivalent to the above.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
298 if { [string match \[-._\] $ch1] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
299 return -1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
300 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
301 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
302 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
303 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
304
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
305 # There is still data to be processed.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
306 # Check for both strings containing numbers at the current index.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
307 if { ( [string match \[0-9\] $ch1] ) && ( [string match \[0-9\] $ch2] ) } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
308
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
309 # Extract the entire numbers from the version string.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
310 while { [string match \[0-9\] $ch1] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
311 set num1 "$num1$ch1"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
312 incr index1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
313 set ch1 [string index $arg1 $index1]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
314 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
315 while { [string match \[0-9\] $ch2] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
316 set num2 "$num2$ch2"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
317 incr index2
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
318 set ch2 [string index $arg2 $index2]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
319 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
320
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
321 if { $num1 < $num2 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
322 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
323 } elseif { $num1 > $num2 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
324 return -1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
325 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
326 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
327 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
328
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
329 # This is not numerical data. If the two characters are the same then
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
330 # move on.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
331 if { $ch1 == $ch2 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
332 incr index1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
333 incr index2
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
334 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
335 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
336
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
337 # Next check if both strings are at a separator. All separators can be
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
338 # used interchangeably.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
339 if { ( [string match \[-._\] $ch1] ) && ( [string match \[-._\] $ch2] ) } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
340 incr index1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
341 incr index2
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
342 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
343 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
344
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
345 # There are differences in the characters and they are not interchangeable.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
346 # Just return a standard string comparison.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
347 return [string compare $ch1 $ch2]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
348 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
349 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
350
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
351 # }}}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
352 # {{{ Argument parsing
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
353
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
354 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
355 # The argv0 argument should be the name of this script. It can be used
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
356 # to get at the component repository location. If this script has been
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
357 # run incorrectly then currently it will fail: in future it may be
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
358 # desirable to check an environment variable instead.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
359 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
360 # The argv argument is a string containing the rest of the arguments.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
361 # If any of the arguments contain spaces then this argument will be
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
362 # surrounded by braces. If any of the arguments contain braces then
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
363 # things will break.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
364 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
365
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
366 proc ecosadmin::parse_arguments { argv0 argv } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
367
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
368 if { $argv != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
369
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
370 # There are arguments. If any of the arguments contained
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
371 # spaces then these arguments will have been surrounded
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
372 # by braces, which is a nuisance. So start by turning the
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
373 # arguments into a numerically indexed array.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
374
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
375 set argc 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
376 array set args { }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
377 foreach arg $argv {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
378 set args([incr argc]) $arg
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
379 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
380
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
381 # Now examine each argument with regular expressions. It is
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
382 # useful to have some variables filled in by the regexp
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
383 # matching.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
384 set dummy ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
385 set match1 ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
386 set match2 ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
387 for { set i 1 } { $i <= $argc } { incr i } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
388
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
389 # Check for --list and the other simple ones.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
390 if { [regexp -- {^-?-?list$} $args($i)] == 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
391 set ecosadmin::list_packages_arg 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
392 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
393 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
394
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
395 # check for the clean command
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
396 if { [regexp -- {^-?-?clean$} $args($i)] == 1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
397 set ecosadmin::clean_database_arg 1
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
398 continue
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
399 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
400
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
401 # check for the check command
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
402 if { [regexp -- {^-?-?check$} $args($i)] == 1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
403 set ecosadmin::check_database_arg 1
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
404 continue
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
405 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
406
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
407 # check for --version
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
408 if { [regexp -- {^-?-version=?(.*)$} $args($i) dummy match1] == 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
409 if { $match1 != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
410 set ecosadmin::version_arg $match1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
411 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
412 if { $i == $argc } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
413 fatal_error "missing argument after --version"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
414 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
415 set ecosadmin::version_arg $args([incr i])
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
416 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
417 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
418 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
419 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
420
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
421 # check for --accept_license
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
422 if { [regexp -- {^-?-accept_license$} $args($i)] == 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
423 set ecosadmin::accept_license_arg 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
424 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
425 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
426
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
427 # check for --extract_license
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
428 if { [regexp -- {^-?-extract_license$} $args($i)] == 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
429 set ecosadmin::extract_license_arg 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
430 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
431 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
432
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
433 # check for --keep_targets
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
434 if { [regexp -- {^-?-keep_targets$} $args($i)] == 1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
435 set ecosadmin::keep_targets_arg 1
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
436 continue
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
437 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
438
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
439 # check for the add command
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
440 if { [regexp -- {^-?-?add=?(.*)$} $args($i) dummy match1] == 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
441 if { $match1 != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
442 set ecosadmin::add_package $match1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
443 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
444 if { $i == $argc } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
445 fatal_error "missing argument after add"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
446 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
447 set ecosadmin::add_package $args([incr i])
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
448 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
449 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
450 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
451 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
452
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
453 # check for the merge command
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
454 if { [regexp -- {^-?-?merge=?(.*)$} $args($i) dummy match1] == 1 } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
455 if { $match1 != "" } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
456 set ecosadmin::merge_repository $match1
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
457 } else {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
458 if { $i == $argc } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
459 fatal_error "missing argument after merge"
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
460 } else {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
461 set ecosadmin::merge_repository $args([incr i])
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
462 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
463 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
464 continue
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
465 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
466
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
467 # check for the remove command
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
468 if { [regexp -- {^-?-?remove=?(.*)$} $args($i) dummy match1] == 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
469 if { $match1 != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
470 set ecosadmin::remove_package $match1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
471 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
472 if { $i == $argc } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
473 fatal_error "missing argument after remove"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
474 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
475 set ecosadmin::remove_package $args([incr i])
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
476 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
477 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
478 continue
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
479 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
480
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
481 # Check for --srcdir
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
482 if { [regexp -- {^-?-srcdir=?([ \.\\/:_a-zA-Z0-9-]*)$} $args($i) dummy match1] == 1 } {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
483 if { $match1 == "" } {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
484 if { $i == $argc } {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
485 puts "ecosrelease: missing argument after --srcdir"
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
486 exit 1
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
487 } else {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
488 set match1 $args([incr i])
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
489 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
490 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
491 set ecosadmin::component_repository $match1
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
492 continue
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
493 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
494
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
495 # An unrecognised argument.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
496 fatal_error "invalid argument $args($i)"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
497 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
498 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
499
547
181928a65a25 * ecosadmin.tcl,
jld
parents: 536
diff changeset
500 # Convert user-specified UNIX-style Cygwin pathnames to Windows Tcl-style as necessary
181928a65a25 * ecosadmin.tcl,
jld
parents: 536
diff changeset
501 set ecosadmin::component_repository [get_pathname_for_tcl $ecosadmin::component_repository]
181928a65a25 * ecosadmin.tcl,
jld
parents: 536
diff changeset
502 set ecosadmin::add_package [get_pathname_for_tcl $ecosadmin::add_package]
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
503 set ecosadmin::merge_repository [get_pathname_for_tcl $ecosadmin::merge_repository]
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
504 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
505
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
506 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
507 # Display help information if the user has typed --help, -H, --H, or -help.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
508 # The help text uses two hyphens for consistency with configure.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
509 # Arguably this should change.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
510
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
511 proc ecosadmin::argument_help { } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
512
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
513 puts "Usage: ecosadmin \[ command \]"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
514 puts " commands are:"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
515 puts " list : list packages"
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
516 puts " check : check database"
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
517 puts " add FILE : add packages"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
518 puts " remove PACKAGE \[ --version VER \] : remove a package"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
519 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
520
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
521 # }}}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
522 # {{{ Packages file
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
523
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
524 proc ecosadmin::read_data { silentflag } {
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
525
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
526 ASSERT { $ecosadmin::component_repository != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
527
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
528 set ecosadmin::known_packages ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
529 set ecosadmin::known_targets ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
530 set ecosadmin::known_templates ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
531
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
532 # A safe interpreter is used to process the packages file.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
533 # This is somewhat overcautious, but it is also harmless.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
534 # The following two commands are made accessible to the slave
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
535 # interpreter and are responsible for updating the actual data.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
536 proc add_known_package { name } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
537 lappend ::ecosadmin::known_packages $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
538 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
539 proc add_known_target { name } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
540 lappend ::ecosadmin::known_targets $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
541 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
542 proc add_known_template { name } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
543 lappend ::ecosadmin::known_templates $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
544 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
545 proc set_package_data { name value } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
546 set ::ecosadmin::package_data($name) $value
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
547 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
548 proc set_target_data { name value } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
549 set ::ecosadmin::target_data($name) $value
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
550 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
551 proc set_template_data { name value } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
552 set ::ecosadmin::template_data($name) $value
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
553 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
554
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
555 # Create the parser, add the aliased commands, and then define
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
556 # the routines that do the real work.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
557 set parser [interp create -safe]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
558 $parser alias add_known_package ecosadmin::add_known_package
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
559 $parser alias add_known_target ecosadmin::add_known_target
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
560 $parser alias add_known_template ecosadmin::add_known_template
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
561 $parser alias set_package_data ecosadmin::set_package_data
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
562 $parser alias set_target_data ecosadmin::set_target_data
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
563 $parser alias set_template_data ecosadmin::set_template_data
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
564
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
565 $parser eval {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
566
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
567 set current_package ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
568 set current_target ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
569 set current_template ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
570
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
571 proc package { name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
572 add_known_package $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
573 set_package_data "$name,alias" ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
574 set_package_data "$name,versions" ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
575 set_package_data "$name,dir" ""
1482
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
576 set_package_data "$name,hardware" 0
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
577 set ::current_package $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
578 eval $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
579 set ::current_package ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
580 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
581
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
582 proc target { name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
583 add_known_target $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
584 set_target_data "$name,packages" ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
585 set ::current_target $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
586 eval $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
587 set ::current_target ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
588 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
589
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
590 #if 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
591 # templates are no longer specified in the package database
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
592 proc template { name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
593 add_known_template $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
594 set_template_data "$name,packages" ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
595 set ::current_template $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
596 eval $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
597 set ::current_template ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
598 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
599 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
600
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
601 proc packages { str } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
602 if { $::current_template != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
603 set_template_data "$::current_template,packages" $str
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
604 } elseif { $::current_target != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
605 set_target_data "$::current_target,packages" $str
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
606 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
607 ASSERT 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
608 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
609 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
610
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
611 proc directory { dir } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
612 set_package_data "$::current_package,dir" $dir
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
613 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
614
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
615 proc alias { str } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
616 if { $::current_package != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
617 set_package_data "$::current_package,alias" $str
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
618 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
619 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
620
1482
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
621 proc hardware { } {
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
622 set_package_data "$::current_package,hardware" 1
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
623 }
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
624
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
625 proc description { str } { }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
626 proc disable { str } { }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
627 proc enable { str } { }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
628 proc script { str } { }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
629 proc set_value { str1 str2 } { }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
630 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
631
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
632 # The parser is ready to evaluate the script. To avoid having to give the
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
633 # safe interpreter file I/O capabilities, the file is actually read in
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
634 # here and then evaluated.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
635 set filename [file join $ecosadmin::component_repository "ecos.db"]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
636 set status [ catch {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
637 set fd [open $filename r]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
638 set script [read $fd]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
639 close $fd
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
640 $parser eval $script
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
641 } message ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
642
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
643 if { $status != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
644 ecosadmin::fatal_error "parsing $filename:\n$message"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
645 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
646
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
647 # The interpreter and the aliased commands are no longer required.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
648 rename set_package_data {}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
649 rename set_target_data {}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
650 rename set_template_data {}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
651 rename add_known_package {}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
652 interp delete $parser
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
653
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
654 # At this stage the packages file has been read in. It is a good idea to
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
655 # check that all of these packages are present and correct, and incidentally
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
656 # figure out which versions are present.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
657 foreach pkg $ecosadmin::known_packages {
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
658
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
659 set pkgdir [file join $ecosadmin::component_repository $ecosadmin::package_data($pkg,dir)]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
660 if { ![file exists $pkgdir] || ![file isdir $pkgdir] } {
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
661 if { "" == $silentflag } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
662 warning "package $pkg at $pkgdir missing"
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
663 }
160
0d0f03f76f6a Merge from eCos master repository on 2001-06-01-18:52:13-BST
jlarmour
parents: 156
diff changeset
664 } else {
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
665 # Each subdirectory should correspond to a release. A utility routine
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
666 # is available for this.
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
667 set ecosadmin::package_data($pkg,versions) [locate_subdirs $pkgdir]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
668 if { $ecosadmin::package_data($pkg,versions) == "" } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
669 fatal_error "package $pkg has no version directories"
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
670 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
671 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
672 # Sort all the versions using a version-aware comparison version
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
673 set ecosadmin::package_data($pkg,versions) [
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
674 lsort -command ecosadmin::cdl_compare_version $ecosadmin::package_data($pkg,versions)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
675 ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
676 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
677 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
678
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
679 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
680 # Given a package name as supplied by the user, return the internal package name.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
681 # This involves searching through the list of aliases.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
682 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
683 proc ecosadmin::find_package { name } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
684
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
685 foreach pkg $ecosadmin::known_packages {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
686 if { [string toupper $pkg] == [string toupper $name] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
687 return $pkg
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
688 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
689
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
690 foreach alias $ecosadmin::package_data($pkg,alias) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
691 if { [string toupper $alias] == [string toupper $name] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
692 return $pkg
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
693 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
694 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
695 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
696
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
697 return ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
698 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
699
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
700 # }}}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
701 # {{{ Directory and file utilities
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
702
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
703 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
704 # Start with a number of utility routines to access all files in
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
705 # a directory, stripping out well-known files such as makefile.am.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
706 # The routines take an optional pattern argument if only certain
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
707 # files are of interest.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
708 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
709 # Note that symbolic links are returned as well as files.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
710 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
711 proc ecosadmin::locate_files { dir { pattern "*"} } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
712
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
713 ASSERT { $dir != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
714
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
715 # Start by getting a list of all the files.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
716 set filelist [glob -nocomplain -- [file join $dir $pattern]]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
717
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
718 if { $pattern == "*" } {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
719 # For "everything", include ".*" files, but excluding .
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
720 # and .. directories
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
721 lappend filelist [glob -nocomplain -- [file join $dir ".\[a-zA-Z0-9\]*"]]
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
722 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
723
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
724 # Eliminate the pathnames from all of these files
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
725 set filenames ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
726 foreach file $filelist {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
727 if { [string range $file end end] != "~" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
728 lappend filenames [file tail $file]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
729 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
730 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
731
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
732 # Eliminate any subdirectories.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
733 set subdirs ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
734 foreach name $filenames {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
735 if { [file isdir [file join $dir $name]] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
736 lappend subdirs $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
737 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
738 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
739 foreach subdir $subdirs {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
740 set index [lsearch -exact $filenames $subdir]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
741 set filenames [lreplace $filenames $index $index]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
742 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
743
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
744 return $filenames
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
745 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
746
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
747 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
748 # This utility returns all sub-directories, as opposed to all files.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
749 # A variant glob pattern is used here. This version is not recursive.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
750 proc ecosadmin::locate_subdirs { dir { pattern "*" }} {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
751
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
752 ASSERT { $dir != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
753
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
754 set dirlist [glob -nocomplain -- [file join $dir $pattern]]
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
755
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
756 # Eliminate the pathnames and the regular (non-directory) files
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
757 set dirnames ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
758 foreach dir $dirlist {
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
759 if { [file isdirectory $dir] } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
760 lappend dirnames [file tail $dir]
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
761 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
762 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
763
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
764 # Get rid of the CVS directory, if any
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
765 if { $ecosadmin::keep_cvs == 0 } {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
766 set index [lsearch -exact $dirnames "CVS"]
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
767 if { $index != -1 } {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
768 set dirnames [lreplace $dirnames $index $index]
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
769 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 160
diff changeset
770 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
771
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
772 # That should be it.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
773 return $dirnames
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
774 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
775
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
776 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
777 # A variant which is recursive. This one does not support a pattern.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
778 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
779 proc ecosadmin::locate_all_subdirs { dir } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
780
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
781 ASSERT { $dir != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
782
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
783 set result ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
784 foreach subdir [locate_subdirs $dir] {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
785 lappend result $subdir
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
786 foreach x [locate_all_subdirs [file join $dir $subdir]] {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
787 lappend result [file join $subdir $x]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
788 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
789 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
790 return $result
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
791 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
792
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
793 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
794 # This routine returns a list of all the files in a given directory and in
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
795 # all subdirectories, preserving the subdirectory name.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
796 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
797 proc ecosadmin::locate_all_files { dir { pattern "*" } } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
798
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
799 ASSERT { $dir != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
800
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
801 set files [locate_files $dir $pattern]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
802 set subdirs [locate_subdirs $dir]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
803
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
804 foreach subdir $subdirs {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
805 set subfiles [locate_all_files [file join $dir $subdir] $pattern]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
806 foreach file $subfiles {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
807 lappend files [file join $subdir $file]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
808 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
809 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
810
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
811 return $files
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
812 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
813
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
814 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
815 # Sometimes a directory may be empty, or contain just a CVS subdirectory,
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
816 # in which case there is no point in copying it across.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
817 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
818 proc ecosadmin::is_empty_directory { dir } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
819
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
820 ASSERT { $dir != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
821
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
822 set contents [glob -nocomplain -- [file join $dir "*"]]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
823 if { [llength $contents] == 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
824 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
825 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
826 if { ([llength $contents] == 1) && [string match {*CVS} $contents] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
827 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
828 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
829 return 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
830 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
831
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
832 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
833 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
834 # Take a cygwin32 filename such as //d/tmp/pkgobj and turn it into something
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
835 # acceptable to Tcl, i.e. d:/tmp/pkgobj. There are a few other complications...
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
836
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
837 proc ecosadmin::get_pathname_for_tcl { name } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
838
802
88ef969518a1 * ecosadmin.tcl: Prevent calls to 'cygpath' with an empty path argument.
jld
parents: 547
diff changeset
839 if { ( $ecosadmin::windows_host ) && ( $name != "" ) } {
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
840
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
841 # If there is no logical drive letter specified
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
842 if { [ string match "?:*" $name ] == 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
843
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
844 # Invoke cygpath to resolve the POSIX-style path
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
845 if { [ catch { exec cygpath -w $name } result ] != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
846 fatal_error "processing filepath $name:\n$result"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
847 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
848 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
849 set result $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
850 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
851
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
852 # Convert backslashes to forward slashes
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
853 regsub -all -- {\\} $result "/" name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
854 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
855
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
856 return $name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
857 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
858
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
859 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
860 # Make sure that a newly created or copied file is writable. This operation
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
861 # is platform-specific. Under Unix at most the current user is given
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
862 # permission, since there does not seem to be any easy way to get hold
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
863 # of the real umask.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
864
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
865 proc ecosadmin::make_writable { name } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
866
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
867 ASSERT { $name != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
868 ASSERT { [file isfile $name] }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
869
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
870 if { [file writable $name] == 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
871 if { $ecosadmin::windows_host != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
872 file attributes $name -readonly 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
873 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
874 set mask [file attributes $name -permissions]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
875 set mask [expr $mask | 0200]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
876 file attributes $name -permissions $mask
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
877 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
878 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
879 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
880
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
881 # }}}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
882 # {{{ main()
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
883
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
884 #-----------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
885 # Procedure target_requires_missing_package determines whether a
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
886 # target entry is dependent on missing packages. It is called when
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
887 # filtering templates out of the database
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
888
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
889 proc ecosadmin::target_requires_missing_package { target } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
890 foreach package $ecosadmin::target_data($target,packages) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
891 if { [ lsearch $ecosadmin::known_packages $package ] == -1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
892 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
893 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
894 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
895 return 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
896 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
897
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
898 #-----------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
899 # Procedure template_requires_missing_package determines whether a
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
900 # template entry is dependent on missing packages. It is called when
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
901 # filtering templates out of the database
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
902
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
903 proc ecosadmin::template_requires_missing_package { template } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
904 foreach package $ecosadmin::template_data($template,packages) {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
905 if { [ lsearch $ecosadmin::known_packages $package ] == -1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
906 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
907 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
908 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
909 return 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
910 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
911
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
912 #-----------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
913 # Procedure target_requires_any_package determines whether a target entry
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
914 # is dependent on specified packages. It is called when removing packages
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
915 # to determine whether a target should also be removed
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
916
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
917 proc ecosadmin::target_requires_any_package { target packages } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
918 foreach package $packages {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
919 if { [ lsearch $ecosadmin::target_data($target,packages) $package ] != -1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
920 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
921 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
922 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
923 return 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
924 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
925
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
926 #-----------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
927 # Procedure template_requires_any_package determines whether a template entry
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
928 # is dependent on specified packages. It is called when removing packages
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
929 # to determine whether a template should also be removed
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
930
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
931 proc ecosadmin::template_requires_any_package { template packages } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
932 foreach package $packages {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
933 if { [ lsearch $ecosadmin::template_data($template,packages) $package ] != -1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
934 return 1
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
935 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
936 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
937 return 0
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
938 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
939
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
940 #-----------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
941 # Procedure merge_new_packages adds any entries in the specified data
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
942 # file to the eCos repository database iff they are not already present
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
943
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
944 proc ecosadmin::merge_new_packages { datafile } {
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
945 # array of targets which require merging of package list
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
946 array set ::ecosadmin::merge_target_packages {}
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
947 variable ::ecosadmin::merge_targets ""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
948 variable ::ecosadmin::target_packages ""
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
949
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
950 # open the eCos database file for appending
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
951 set ecosfile [ file join $ecosadmin::component_repository "ecos.db" ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
952 variable outfile [ open $ecosfile a+ ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
953
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
954 # initialize the list of merged packages
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
955 set ecosadmin::merge_packages ""
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
956
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
957 # this procedure is called when the interpreter encounters a
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
958 # package command in the datafile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
959 proc merge { command name body } {
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
960 ecosadmin::report "processing $command $name"
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
961 # append the new package/target/template only if it is not already known
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
962 if { ( ( $command == "package" ) && ( [ lsearch -exact $ecosadmin::known_packages $name ] == -1 ) ) ||
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
963 ( ( $command == "target" ) && ( [ lsearch -exact $ecosadmin::known_targets $name ] == -1 ) ) ||
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
964 ( ( $command == "template" ) && ( [ lsearch -exact $ecosadmin::known_templates $name ] == -1 ) ) } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
965 puts $ecosadmin::outfile "$command $name {$body}\n"
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
966 } elseif { ($command == "target") } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
967 # target is already defined so store any new package names for a possible merge
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
968 set merge_required 0
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
969 foreach pkg $ecosadmin::target_packages {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
970 # for each package name in the target record
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
971 if { [ lsearch $ecosadmin::target_data($name,packages) $pkg ] == -1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
972 # package name is not in the existing target record
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
973 lappend ecosadmin::merge_target_packages($name) $pkg
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
974 set merge_required 1
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
975 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
976 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
977 if { $merge_required == 1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
978 # at least one package name is not in the existing target record
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
979 lappend ecosadmin::merge_targets $name
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
980 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
981 }
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
982
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
983 # add new packages to the list of merged packages
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
984 if { ( "package" == $command ) } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
985 lappend ecosadmin::merge_packages $name
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
986 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
987 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
988
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
989 proc set_target_packages { packages } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
990 set ecosadmin::target_packages $packages
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
991 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
992
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
993 # Create the parser, add the aliased commands, and then define
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
994 # the routines that do the real work.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
995 set parser [ interp create -safe ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
996 $parser alias merge ecosadmin::merge
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
997 $parser alias set_target_packages ecosadmin::set_target_packages
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
998 $parser eval {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
999 proc package { name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1000 merge "package" $name $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1001 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1002
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1003 proc template { name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1004 merge "template" $name $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1005 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1006
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1007 proc target { name body } {
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1008 eval $body
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1009 merge "target" $name $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1010 }
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1011
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1012 proc packages { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1013 set_target_packages $str
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1014 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1015
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1016 proc alias { str } { }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1017 proc description { str } { }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1018 proc disable { str } { }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1019 proc enable { str } { }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1020 proc set_value { str1 str2 } { }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1021 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1022
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1023 # The parser is ready to evaluate the script. To avoid having to give the
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1024 # safe interpreter file I/O capabilities, the file is actually read in
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1025 # here and then evaluated.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1026 set status [ catch {
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1027 set fd [ open $datafile r ]
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1028 set script [ read $fd ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1029 close $fd
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1030 $parser eval $script
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1031 } message ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1032
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1033 # The interpreter and the aliased commands are no longer required.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1034 rename merge {}
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1035 rename set_target_packages {}
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1036 interp delete $parser
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1037
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1038 # close the eCos database file
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1039 close $outfile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1040
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1041 # report errors
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1042 if { $status != 0 } {
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1043 ecosadmin::fatal_error "parsing $datafile:\n$message"
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1044 }
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1045
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1046 # having appended any new records to ecos.db we can now merge extra
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1047 # packages into target records as necessary
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1048
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1049 # open the new eCos database file for writing
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1050 set ecosfile [ file join $ecosadmin::component_repository "ecos.db.new" ]
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1051 variable outfile [ open $ecosfile w ]
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1052 variable target_packages ""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1053 variable target_attributes ""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1054
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1055 # this procedure is called when the interpreter encounters a command in ecos.db when
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1056 # merging extra packages into target records
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1057 proc merge_target { command name body } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1058 if { ( $command == "target" ) && ( [ lsearch $ecosadmin::merge_targets $name ] != -1 ) } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1059 # add new package(s) to the target definition
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1060 puts $ecosadmin::outfile "$command $name \{\n$ecosadmin::target_attributes \tpackages \{"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1061 foreach pkg $ecosadmin::target_packages {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1062 puts $ecosadmin::outfile "\t\t$pkg"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1063 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1064 foreach pkg $ecosadmin::merge_target_packages($name) {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1065 ecosadmin::report "adding $pkg to target $name"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1066 puts $ecosadmin::outfile "\t\t$pkg"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1067 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1068 puts $ecosadmin::outfile "\t\}\n\}\n"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1069 } else {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1070 # copy the data record to the new database
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1071 puts $ecosadmin::outfile "$command $name {$body}\n"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1072 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1073 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1074
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1075 proc add_target_attribute { attribute value } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1076 set ecosadmin::target_attributes "$ecosadmin::target_attributes \t$attribute $value\n"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1077 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1078
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1079 proc clear_target_attributes { } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1080 set ecosadmin::target_attributes ""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1081 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1082
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1083 proc set_target_packages { packages } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1084 set ecosadmin::target_packages $packages
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1085 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1086
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1087 # Create the parser, add the aliased commands, and then define
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1088 # the routines that do the real work.
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1089 set parser [ interp create -safe ]
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1090 $parser alias add_target_attribute ecosadmin::add_target_attribute
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1091 $parser alias set_target_packages ecosadmin::set_target_packages
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1092 $parser alias clear_target_attributes ecosadmin::clear_target_attributes
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1093 $parser eval {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1094 proc package { name body } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1095 filter "package" $name $body
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1096 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1097
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1098 proc template { name body } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1099 filter "template" $name $body
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1100 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1101
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1102 proc target { name body } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1103 clear_target_attributes
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1104 eval $body
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1105 filter "target" $name $body
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1106 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1107
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1108 proc packages { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1109 set_target_packages $str
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1110 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1111
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1112 proc alias { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1113 add_target_attribute "alias" \{$str\}
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1114 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1115
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1116 proc description { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1117 add_target_attribute "description" \"$str\"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1118 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1119
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1120 proc disable { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1121 add_target_attribute "disable" \{$str\}
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1122 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1123
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1124 proc enable { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1125 add_target_attribute "enable" \{$str\}
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1126 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1127
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1128 proc set_value { str1 str2 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1129 add_target_attribute "set_value" "$str1 \"$str2\""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1130 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1131 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1132
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1133 # The parser is ready to evaluate the script. To avoid having to give the
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1134 # safe interpreter file I/O capabilities, the file is actually read in
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1135 # here and then evaluated.
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1136 set filename [ file join $ecosadmin::component_repository "ecos.db" ]
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1137 set status [ catch {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1138 set fd [ open $filename r ]
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1139 set script [ read $fd ]
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1140 close $fd
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1141
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1142 $parser alias filter ecosadmin::merge_target
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1143 $parser eval $script
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1144 } message ]
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1145
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1146 # The interpreter and the aliased commands are no longer required.
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1147 rename merge_target {}
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1148 interp delete $parser
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1149
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1150 # close the new eCos database file
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1151 close $outfile
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1152
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1153 # report errors
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1154 if { $status != 0 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1155 ecosadmin::fatal_error "parsing $filename:\n$message"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1156 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1157
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1158 # replace the old eCos database file with the new one
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1159 file rename -force $ecosfile $filename
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1160 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1161
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1162 #-----------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1163 # Procedure filter_old_packages removes the specified packages/versions
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1164 # from the eCos repository database. Any targets and templates dependent
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1165 # on the removed packages are also removed.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1166
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1167 proc ecosadmin::filter_old_packages { old_packages } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1168
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1169 # open the new eCos database file for writing
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1170 set ecosfile [ file join $ecosadmin::component_repository "ecos.db.new" ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1171 variable outfile [ open $ecosfile w ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1172 variable filter_list $old_packages
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1173 variable removed_packages ""
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1174 variable target_packages ""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1175 variable target_attributes ""
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1176
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1177 # this procedure is called when the interpreter encounters a command in the datafile on the first pass
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1178 # it generates a list of packages which will be removed on the second pass
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1179 proc removelist { command name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1180 if { [ lsearch $ecosadmin::filter_list $name ] != -1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1181 # the package is in the filter list
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1182 if { ( $ecosadmin::version_arg == "" ) || ( [ llength $ecosadmin::package_data($name,versions) ] == 1 ) } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1183 # there is no version argument or only one version so add the package to the remove list
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1184 set ::ecosadmin::removed_packages [ lappend ::ecosadmin::removed_packages $name ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1185 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1186 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1187 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1188
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1189 # this procedure is called when the interpreter encounters a command in the datafile on the second pass
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1190 proc filter { command name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1191 if { ( $command == "target" ) && ( ( [ target_requires_any_package $name $ecosadmin::removed_packages ] != 0 ) || ( [ target_requires_missing_package $name ] != 0 ) ) } {
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1192 # the target requires a package which has been removed
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1193 if { $ecosadmin::keep_targets_arg != 1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1194 # "--keep_targets" not specified so remove targets with missing packages
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1195 ecosadmin::report "removing target $name"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1196 } else {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1197 # "--keep_targets" specified so remove missing packages from the target definition
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1198 puts $ecosadmin::outfile "$command $name \{\n$ecosadmin::target_attributes \tpackages \{"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1199 foreach pkg $ecosadmin::target_packages {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1200 if { ([ lsearch $ecosadmin::removed_packages $pkg ] == -1) && ([ lsearch $ecosadmin::known_packages $pkg ] != -1) } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1201 # package exists and has not been listed for removal so keep it in the target definition
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1202 puts $ecosadmin::outfile "\t\t$pkg"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1203 } else {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1204 # package is missing or has been listed for removal so remove it from the target definition
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1205 puts "removing $pkg from $name target record"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1206 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1207 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1208 puts $ecosadmin::outfile "\t\}\n\}\n"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1209 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1210 } elseif { ( $command == "template" ) && ( ( [ template_requires_any_package $name $ecosadmin::removed_packages ] != 0 ) || ( [ template_requires_missing_package $name ] != 0 ) ) } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1211 # the template requires a package which has been removed so remove the template
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1212 ecosadmin::report "removing template $name"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1213 } elseif { [ lsearch $ecosadmin::filter_list $name ] == -1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1214 # the package is not in the filter list so copy the data to the new database
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1215 puts $ecosadmin::outfile "$command $name {$body}\n"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1216 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1217 # the package is in the filter list
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1218 set package_dir [ file join $ecosadmin::component_repository $ecosadmin::package_data($name,dir) ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1219 if { ( $ecosadmin::version_arg != "" ) && ( [ llength $ecosadmin::package_data($name,versions) ] > 1 ) } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1220 # there are multiple versions and only one version will be removed
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1221 # so copy the data to the new database and only remove one version directory
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1222 set package_dir [ file join $package_dir $ecosadmin::version_arg ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1223 ecosadmin::report "removing package $name $ecosadmin::version_arg"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1224 puts $ecosadmin::outfile "$command $name {$body}\n"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1225 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1226 # there is no version argument or only one version so delete the package directory
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1227 ecosadmin::report "removing package $name"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1228 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1229 if { [ catch { file delete -force -- $package_dir } message ] != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1230 # issue a warning if package deletion failed - this is not fatal
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1231 ecosadmin::warning $message
1482
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1232 }
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1233 set dir [ file dirname $package_dir ]
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1234 while { [ llength [ glob -nocomplain -- [ file join $dir "*" ] ] ] == 0 } {
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1235 # the parent of the deleted directory is now empty so delete it
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1236 if { [ catch { file delete -- $dir } message ] != 0 } {
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1237 # issue a warning if empty directory deletion failed - this is not fatal
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1238 ecosadmin::warning $message
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1239 }
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1240 set dir [ file dirname $dir ]
111c2191e6f5 * ecos.db: Add 'hardware' attribute to CYGPKG_DEVS_ETH_ARM_KS32C5000.
jld
parents: 1048
diff changeset
1241 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1242 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1243 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1244
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1245 proc add_target_attribute { attribute value } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1246 set ecosadmin::target_attributes "$ecosadmin::target_attributes \t$attribute $value\n"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1247 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1248
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1249 proc clear_target_attributes { } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1250 set ecosadmin::target_attributes ""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1251 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1252
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1253 proc set_target_packages { packages } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1254 set ecosadmin::target_packages $packages
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1255 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1256
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1257 # Create the parser, add the aliased commands, and then define
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1258 # the routines that do the real work.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1259 set parser [ interp create -safe ]
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1260 $parser alias add_target_attribute ecosadmin::add_target_attribute
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1261 $parser alias set_target_packages ecosadmin::set_target_packages
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1262 $parser alias clear_target_attributes ecosadmin::clear_target_attributes
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1263 $parser eval {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1264 proc package { name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1265 filter "package" $name $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1266 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1267
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1268 proc template { name body } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1269 filter "template" $name $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1270 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1271
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1272 proc target { name body } {
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1273 clear_target_attributes
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1274 eval $body
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1275 filter "target" $name $body
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1276 }
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1277
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1278 proc packages { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1279 set_target_packages $str
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1280 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1281
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1282 proc alias { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1283 add_target_attribute "alias" \{$str\}
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1284 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1285
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1286 proc description { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1287 add_target_attribute "description" \"$str\"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1288 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1289
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1290 proc disable { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1291 add_target_attribute "disable" \{$str\}
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1292 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1293
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1294 proc enable { str } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1295 add_target_attribute "enable" \{$str\}
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1296 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1297
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1298 proc set_value { str1 str2 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1299 add_target_attribute "set_value" "$str1 \"$str2\""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1300 }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1301 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1302
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1303 # The parser is ready to evaluate the script. To avoid having to give the
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1304 # safe interpreter file I/O capabilities, the file is actually read in
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1305 # here and then evaluated.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1306 set filename [ file join $ecosadmin::component_repository "ecos.db" ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1307 set status [ catch {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1308 set fd [ open $filename r ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1309 set script [ read $fd ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1310 close $fd
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1311
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1312 # first pass to generate a list of packages which will be removed
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1313 $parser alias filter ecosadmin::removelist
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1314 $parser eval $script
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1315
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1316 # second pass to remove the packages, targets and templates
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1317 $parser alias filter ecosadmin::filter
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1318 $parser eval $script
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1319 } message ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1320
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1321 # The interpreter and the aliased commands are no longer required.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1322 rename filter {}
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1323 interp delete $parser
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1324
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1325 # close the new eCos database file
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1326 close $outfile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1327
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1328 # report errors
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1329 if { $status != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1330 ecosadmin::fatal_error "parsing $filename:\n$message"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1331 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1332
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1333 # replace the old eCos database file with the new one
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1334 file rename -force $ecosfile $filename
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1335 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1336
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1337 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1338 # Process_add_packages. This routine is responsible for installing packages
387
44d2cbd109ee * ecosadmin.tcl (ecosadmin::process_add_package): Use gzip -d, not
jlarmour
parents: 210
diff changeset
1339 # into the eCos repository using the gzip and tar tools which must be on
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1340 # the path
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1341 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1342
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1343 proc ecosadmin::process_add_package { } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1344 ASSERT { $ecosadmin::add_package != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1345 ASSERT { $ecosadmin::component_repository != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1346
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1347 # calculate the absolute path of the specified package archive
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1348 # since we must change directory before extracting files
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1349 # note that we cannot use "tar -C" to avoid changing directory
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1350 # since "tar -C" only accepts relative paths
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1351 set abs_package [ file join [ pwd ] $ecosadmin::add_package ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1352 set datafile "pkgadd.db"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1353 set licensefile "pkgadd.txt"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1354 set logfile "pkgadd.log"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1355 cd $ecosadmin::component_repository
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1356
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1357 # check for --extract_license on command line
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1358 if { $ecosadmin::extract_license_arg == 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1359 # extract the license file (if any) from the specified gzipped tar archive
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1360 file delete $licensefile
387
44d2cbd109ee * ecosadmin.tcl (ecosadmin::process_add_package): Use gzip -d, not
jlarmour
parents: 210
diff changeset
1361 catch { exec > $ecosadmin::null_device gzip -d < $abs_package | tar xf - $licensefile }
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1362 return
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1363 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1364
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1365 # extract the package data file from the specified gzipped tar archive
387
44d2cbd109ee * ecosadmin.tcl (ecosadmin::process_add_package): Use gzip -d, not
jlarmour
parents: 210
diff changeset
1366 if { [ catch { exec > $ecosadmin::null_device gzip -d < $abs_package | tar xf - $datafile } message ] != 0 } {
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1367 fatal_error "extracting $datafile:\n$message"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1368 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1369
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1370 # obtain license acceptance
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1371 if { [ ecosadmin::accept_license $abs_package $licensefile ] != "y" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1372 file delete $datafile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1373 file delete $licensefile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1374 fatal_error "license agreement not accepted"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1375 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1376
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1377 # extract the remaining package contents and generate a list of extracted files
387
44d2cbd109ee * ecosadmin.tcl (ecosadmin::process_add_package): Use gzip -d, not
jlarmour
parents: 210
diff changeset
1378 if { [ catch { exec gzip -d < $abs_package | tar xvf - > $logfile } message ] != 0 } {
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1379 file delete $logfile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1380 fatal_error "extracting files:\n$message"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1381 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1382
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1383 # read the list of extracted files from the log file
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1384 set fd [ open $logfile r ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1385 set message [ read $fd ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1386 close $fd
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1387 file delete $logfile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1388
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1389 # convert extracted text files to use the line-ending convention of the host
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1390 set filelist [ split $message "\n" ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1391 set binary_extension ".bin"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1392 foreach filename $filelist {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1393 if { [ file isfile $filename ] != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1394 if { [ file extension $filename ] == $binary_extension } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1395 # a binary file - so remove the binary extension
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1396 file rename -force -- $filename [ file rootname $filename ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1397 } else {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1398 # a text file - so convert file to use native line-endings
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1399 # read in the file (line-ending conversion is implicit)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1400 set fd [ open $filename "r" ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1401 set filetext [ read $fd ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1402 close $fd
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1403
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1404 # write the file out again
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1405 set fd [ open $filename "w" ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1406 puts -nonewline $fd $filetext
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1407 close $fd
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1408 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1409 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1410 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1411
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1412 # merge the new package information into the eCos database file as necessary
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1413 ecosadmin::merge_new_packages [ file join $ecosadmin::component_repository $datafile ]
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1414
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1415 # delete the database and license files
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1416 file delete $datafile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1417 file delete $licensefile
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1418
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1419 # read the revised database back in and remove any
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1420 # targets and templates with missing packages
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1421 read_data ""
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1422 filter_old_packages ""
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1423 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1424
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1425 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1426 # Process_remove_package. This routine is responsible for uninstalling a
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1427 # package from the eCos repository
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1428 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1429
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1430 proc ecosadmin::process_remove_package { } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1431 ASSERT { $ecosadmin::remove_package != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1432
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1433 # get the formal package name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1434 set package_name [ ecosadmin::find_package $ecosadmin::remove_package ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1435 if { $package_name == "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1436 # package not found
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1437 fatal_error "package $ecosadmin::remove_package not found"
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1438 } elseif { $ecosadmin::version_arg == "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1439 # version not specified
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1440 # if { [ llength $ecosadmin::package_data($package_name,versions) ] > 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1441 # fatal_error "multiple versions, use --version"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1442 # }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1443 } elseif { [ lsearch $ecosadmin::package_data($package_name,versions) $ecosadmin::version_arg ] == -1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1444 # specified version not found
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1445 fatal_error "version $ecosadmin::version_arg not found"
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1446 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1447
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1448 # filter out the old package from the eCos database file
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1449 filter_old_packages $package_name
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1450 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1451
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1452 # ----------------------------------------------------------------------------
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1453 # Process_clean_database. This routine is responsible for tidying up an
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1454 # eCos repository package database
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1455 #
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1456
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1457 proc ecosadmin::process_clean_database { } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1458
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1459 # filter out missing packages from the eCos database file
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1460 filter_old_packages ""
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1461 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1462
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1463 # ----------------------------------------------------------------------------
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1464 # Process_check_database. This routine is responsible for checking an
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1465 # eCos repository package database
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1466 #
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1467
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1468 proc ecosadmin::process_check_database { } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1469
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1470 foreach target $ecosadmin::known_targets {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1471 foreach package $ecosadmin::target_data($target,packages) {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1472 if { [ lsearch -exact $ecosadmin::known_packages $package ] != -1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1473 if { $ecosadmin::package_data($package,hardware) != 1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1474 ecosadmin::warning "non-hardware package $package used in target $target"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1475 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1476 } else {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1477 ecosadmin::warning "target $target refers to non-existent package $package"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1478 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1479 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1480 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1481 foreach package $ecosadmin::known_packages {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1482 if { $ecosadmin::package_data($package,hardware) == 1 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1483 variable hardware_package_required 0
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1484 foreach target $ecosadmin::known_targets {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1485 if { [ target_requires_any_package $target $package ] } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1486 set hardware_package_required 1
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1487 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1488 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1489 if { $hardware_package_required == 0 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1490 ecosadmin::warning "hardware package $package not used by any target"
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1491 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1492 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1493 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1494 }
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1495
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1496 # ----------------------------------------------------------------------------
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1497 # Process_merge_repository. This routine is responsible for merging packages
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1498 # from another repository into the eCos repository
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1499 #
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1500
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1501 proc ecosadmin::process_merge_repository { } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1502 ASSERT { $ecosadmin::merge_repository != "" }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1503 ASSERT { $ecosadmin::component_repository != "" }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1504
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1505 # merge new package and target information into the eCos database file as necessary
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1506 # names of packages to be merged are placed in $ecosadmin::merge_packages
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1507 ecosadmin::merge_new_packages [ file join $ecosadmin::merge_repository "ecos.db" ]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1508
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1509 # read the revised database back in to pick up new package paths, but ignore missing package directories
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1510 read_data "silent"
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1511
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1512 # copy package directories into the repository as necessary
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1513 # existing packages are never replaced but a another version may be added
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1514 foreach pkg $ecosadmin::merge_packages {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1515 set newpkgdir [file join $ecosadmin::merge_repository $ecosadmin::package_data($pkg,dir)]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1516 foreach newpkgver [locate_subdirs $newpkgdir] {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1517 if { [lsearch $ecosadmin::package_data($pkg,versions) $newpkgver] == -1 } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1518 ecosadmin::report "copying $pkg $newpkgver"
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1519 file mkdir [ file join $ecosadmin::component_repository $ecosadmin::package_data($pkg,dir) ]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1520 file copy [ file join $newpkgdir $newpkgver ] [ file join $ecosadmin::component_repository $ecosadmin::package_data($pkg,dir) $newpkgver ]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1521 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1522 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1523 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1524
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1525 # read the revised database again to deliver warnings of missing package directories if necessary
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1526 read_data ""
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1527
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1528 # copy new files from the pkgconf and templates directory hierarchies into the repository as necessary
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1529 foreach topdir { pkgconf templates } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1530 set repository_files [ ecosadmin::locate_all_files [ file join $ecosadmin::component_repository $topdir ] ]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1531 set merge_files [ ecosadmin::locate_all_files [ file join $ecosadmin::merge_repository $topdir ] ]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1532 foreach filename $merge_files {
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1533 if { [string length $filename] > 0 && [lsearch $repository_files $filename] == -1 } {
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1534 ecosadmin::report "copying $topdir file $filename"
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1535 file mkdir [ file join $ecosadmin::component_repository $topdir [ file dirname $filename ] ]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1536 file copy [ file join $ecosadmin::merge_repository $topdir $filename ] [ file join $ecosadmin::component_repository $topdir $filename ]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1537 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1538 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1539 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1540
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1541 # copy files from the top level packages directory into the repository as necessary
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1542 foreach filename [ glob -nocomplain -directory $ecosadmin::merge_repository -type f * ] {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1543 set destination [ file join $ecosadmin::component_repository [ file tail $filename ] ]
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1544 if { 0 == [ file exists $destination ] } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1545 ecosadmin::report "copying file [file tail $filename]"
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1546 file copy $filename $destination
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1547 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1548 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1549 }
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1550
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1551 # ----------------------------------------------------------------------------
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1552 # Accept_license. This routine is responsible for displaying the package
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1553 # license and obtaining user acceptance. It returns "y" if the license is
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1554 # accepted.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1555 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1556
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1557 proc ecosadmin::accept_license { archivename filename } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1558 ASSERT { $ecosadmin::add_package != "" }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1559
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1560 # check for --accept_license on command line
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1561 if { $ecosadmin::accept_license_arg == 1 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1562 # --accept_license specified so do not prompt for acceptance
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1563 return "y"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1564 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1565
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1566 # extract the specified license file from the specified gzipped tar archive
387
44d2cbd109ee * ecosadmin.tcl (ecosadmin::process_add_package): Use gzip -d, not
jlarmour
parents: 210
diff changeset
1567 if { [ catch { exec > $ecosadmin::null_device gzip -d < $archivename | tar xf - $filename } message ] != 0 } {
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1568 # no license file
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1569 return "y"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1570 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1571
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1572 # read in the file and output to the user
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1573 set fd [ open $filename "r" ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1574 set filetext [ read $fd ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1575 close $fd
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1576 puts $filetext
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1577
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1578 # prompt for acceptance
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1579 puts -nonewline "Do you accept all the terms of the preceding license agreement? (y/n) "
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1580 flush "stdout"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1581 gets "stdin" response
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1582
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1583 # return the first character of the response in lowercase
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1584 return [ string tolower [ string index $response 0 ] ]
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1585 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1586
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1587 # ----------------------------------------------------------------------------
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1588 # Main(). This code only runs if the script is being run stand-alone rather
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1589 # than as part of a larger application. The controlling predicate is the
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1590 # existence of the variable ecosadmin_not_standalone which can be set by
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1591 # the containing program if any.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1592 #
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1593
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1594 if { ! [info exists ecosadmin_not_standalone] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1595
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1596 # Decide where warnings and fatal errors should go.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1597 ecosadmin::initialise_error_handling
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1598
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1599 # First, check for --help or any of the variants. If this script
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1600 # is running in a larger program then it is assumed that the
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1601 # containing program will not pass --help as an argument.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1602 if { ( $argv == "--help" ) || ( $argv == "-help" ) ||
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1603 ( $argv == "--H" ) || ( $argv == "-H" ) || ($argv == "" ) } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1604
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1605 ecosadmin::argument_help
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1606 return
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1607 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1608
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1609 # catch any errors while processing the specified command
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1610 if { [ catch {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1611
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1612 # Parse the arguments and set the global variables appropriately.
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1613 ecosadmin::parse_arguments $argv0 $argv
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1614
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1615 # Read in the eCos repository database.
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1616 ecosadmin::read_data ""
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1617
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1618 # Process the ecosadmin command
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1619 if { $ecosadmin::list_packages_arg != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1620 foreach pkg $ecosadmin::known_packages {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1621 ecosadmin::report "$pkg: $ecosadmin::package_data($pkg,versions)"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1622 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1623 } elseif { $ecosadmin::add_package != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1624 ecosadmin::process_add_package
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1625 } elseif { $ecosadmin::remove_package != "" } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1626 ecosadmin::process_remove_package
1048
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1627 } elseif { $ecosadmin::merge_repository != "" } {
4d9dfbffc2d1 * ecosadmin.tcl: Add repository merge capability (undocumented and unsupported
jld
parents: 802
diff changeset
1628 ecosadmin::process_merge_repository
2593
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1629 } elseif { $ecosadmin::clean_database_arg != 0 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1630 ecosadmin::process_clean_database
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1631 } elseif { $ecosadmin::check_database_arg != 0 } {
9c68cbb6424d * ecosadmin.tcl: Accommodate recent Cygwin and provide repository sanity
jld
parents: 1482
diff changeset
1632 ecosadmin::process_check_database
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1633 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1634
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1635 } error_message ] != 0 } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1636
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1637 # handle error message
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1638 if { [ info exists gui_mode ] } {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1639 return $error_message
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1640 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1641 puts "ecosadmin error: $error_message"
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1642 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1643 return
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1644 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1645
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
diff changeset
1646 # }}}