annotate packages/pkgconf.tcl @ 64:c38311975d4f ecos-sw-2000-01-28

Merge from eCos master repository on 2000-01-28-04:28:11-GMT
author jlarmour
date Fri, 28 Jan 2000 04:59:39 +0000
parents 797268ecc331
children bf00f99aec69
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 # {{{ Banner
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 #===============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 # pkgconf.tcl
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 # A temporary build system for target-side software.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 #===============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
10 #####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
11 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
12 # -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
13 # The contents of this file are subject to the Red Hat eCos Public License
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
14 # Version 1.0 (the "License"); you may not use this file except in
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
15 # compliance with the License. You may obtain a copy of the License at
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
16 # http://sourceware.cygnus.com/ecos
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
17 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
18 # Software distributed under the License is distributed on an
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
19 # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
20 # License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
21 # the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
22 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
23 # The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
24 # released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
25 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
26 # The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
27 # Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
28 # Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
29 # All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
30 # -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
31 #
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 #####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 #===============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 ######DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 # Author(s): bartv
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 # Contributors: bartv
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 # Date: 1998-04-10
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 # Purpose: To generate a build tree (aka a configuration directory)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 # and fill in basic configurability information.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 # Description:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 # Usage:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 #####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45 #===============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 # {{{ Version check
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 # pkgconf.tcl requires at least version 8.0 of Tcl, since it makes use of
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 # namespaces. It is possible that some users still have older versions.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 if { [info tclversion] < 8.0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 puts "You are running Tcl version [info tclversion], patchlevel [info patchlevel]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 puts "The pkgconf.tcl script requires version 8.0 or later."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59 puts "Tcl is open source software and can be readily obtained via the internet."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 puts "Good starting places for more information include www.tclconsortium.org"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 puts "and www.scriptics.com"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 # {{{ Namespace definition
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 # Namespaces. All code and variables in this script are kept in the namespace
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 # "pkgconf". This is not really necessary for stand-alone operation, but if it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 # ever becomes desirable to embed this script in a larger application then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 # using a namespace is a lot easier.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 # As a fringe benefit, all global variables can be declared inside this
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 # namespace and initialised.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 namespace eval pkgconf {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 # Is this program running on a real operating system or under Windows ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81 variable windows_host [expr {$tcl_platform(platform) == "windows"}]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 # Is this script running in command-line or GUI mode ? This is determined
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 # in large part by the command used to invoke the script.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 variable gui_mode 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 # Keep track of whether or not GUI mode is possible at all. If
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 # TK is not loaded into the current interpreter then only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 # command-line operation is possible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 variable gui_possible 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 # Where is the component repository ? The following input sources
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 # are available:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 # 1) the command line argument --srcdir. This requires
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 # the arguments to be parsed early on.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 # 2) the environment variable PKGCONF_COMPONENT_REPOSITORY.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 # 3) $argv0 should correspond to the location of the pkgconf.tcl
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 # script.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 variable component_repository ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 if { [info exists ::env(PKGCONF_COMPONENT_REPOSITORY)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 set component_repository $::env(PKGCONF_COMPONENT_REPOSITORY)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 # Care has to be taken not to end up with a spurious /. at the end,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 # since that would confuse later checks of component_repository != build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 set component_repository [pwd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 if { [file dirname $argv0] != "." } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 set component_repository [file join $component_repository [file dirname $argv0]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 # Where is the build tree ? This can be specified using the command
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 # line argument --builddir, the environment variable PKGCONF_BUILD_TREE,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 # or it defaults to the current directory (in accordance with the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 # normal behaviour of configure scripts).
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 variable build_tree ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117 if { [info exists ::env(PKGCONF_BUILD_TREE)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 set build_tree $::env(PKGCONF_BUILD_TREE)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 set build_tree [pwd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 # Details of the command line arguments, if any.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 variable list_targets_arg 0; # --targets
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 variable list_packages_arg 0; # --packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 variable list_pkgdata_arg 0; # --pkgdata
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 variable list_flags_arg 0; # --flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 variable no_windows_arg 0; # --nw
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 variable target_arg ""; # --target=abc
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 variable platform_arg ""; # --platform=sim
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 variable startup_arg ""; # --platform=rom
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 variable prefix_arg ""; # --prefix=/tmp/install
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 variable disable_args ""; # --disable-uitron
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 # This is a list of all disabled packages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 variable enable_args ""; # --enable-uitron, as above.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 array set version_args {}; # --kernel_version=v0.3
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 # This is an array indexed by package name.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 array set cflags_args {}; # DBGFLAGS="-Wall -Werror"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 # This is an array indexed by flag name.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 variable force_arg 0; # Forcibly overwrite configuration files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 variable defaults_arg 0; # Do not use the values from the save file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 variable use_links_arg 0; # Make use of symbolic links.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 variable use_copies_arg 0; # The inverse.
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
144 variable debug_arg 0; # --debug, control infrastructure options
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
145 variable nodebug_arg 0; # --nodebug, ditto
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147 # Details of all known packages. These come out of the packages file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 # The variable known_packages is a simple list, and the rest of the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 # data is held in an array package_data().
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 variable known_packages ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 array set package_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 # Details of all known targets, as supplied by the targets file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 # The variable known_targets is a simple list, and the rest of the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 # data is held in an array target_data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 variable known_targets ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 array set target_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 # Details of all the compiler flags that can be used within the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 # build system.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 variable known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 ARCHFLAGS CARCHFLAGS CXXARCHFLAGS LDARCHFLAGS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 ERRFLAGS CERRFLAGS CXXERRFLAGS LDERRFLAGS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 LANGFLAGS CLANGFLAGS CXXLANGFLAGS LDLANGFLAGS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 DBGFLAGS CDBGFLAGS CXXDBGFLAGS LDDBGFLAGS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 EXTRAFLAGS CEXTRAFLAGS CXXEXTRAFLAGS LDEXTRAFLAGS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 # Details of the current configuration values. It is convenient
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 # to store these in an array as well. The array gets filled in by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 # pkgconf::setup_defaults
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 array set config_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 # Contents of the current save file, if any.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 array set saved_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 # These variables are used by the code that creates the build tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 variable inc_dirs; # For each package with exported header
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 # files, the path to those header files
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 # relative to either the component repository
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 # or the build tree.
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
182 variable misc_dirs; # Ditto for package misc directories.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 variable tests_dirs; # Ditto for package tests directories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 variable src_dirs; # Ditto for src directories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 variable install_inc_dirs; # Names of all the directories that should
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 # exist below install/include, including pkgconf.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 variable install_inc_files; # Ditto for all the files, but excluding
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 # ones in pkgconf.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 variable pkgconf_files; # Names of all the configuration headers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 variable install_test_dirs; # What directories should be created in install/tests
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 # What routines should be invoked for outputting fatal errors and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 # for warning messages ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 variable fatal_error_handler pkgconf::cli_fatal_error
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 variable warning_handler pkgconf::cli_warning
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 variable report_handler pkgconf::cli_report
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 # {{{ Infrastructure
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 # Minimal infrastructure support.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 # There must be some way of reporting fatal errors, of outputting warnings,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 # and of generating report messages. The implementation of these things
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 # obviously depends on whether or not TK is present. In addition, if this
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 # script is being run inside a larger application then that larger
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 # application must be able to install its own versions of the routines.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 # Once it is possible to report fatal errors, an assertion facility becomes
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 # feasible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 # These routines output fatal errors, warnings or miscellaneous messages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218 # Their implementations depend on the mode in which this script is operating.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 proc pkgconf::fatal_error { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 $pkgconf::fatal_error_handler "$msg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 proc pkgconf::warning { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 $pkgconf::warning_handler "$msg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 proc pkgconf::report { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 $pkgconf::report_handler "$msg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 # Command line versions.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234 # NOTE: some formatting so that there are linebreaks at ~72 columns would be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 # a good idea.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 proc pkgconf::cli_fatal_error_handler { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238 puts "pkgconf fatal error: $msg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 exit 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 proc pkgconf::cli_warning_handler { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 puts "pkgconf warning: $msg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 proc pkgconf::cli_report_handler { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 puts "$msg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251 # Determine the default destination for warnings and for fatal errors.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 # In GUI mode message boxes should be used, otherwise the text should just
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 # go to stdout (stderr is more dubious).
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 # This routine gets invoked before any command line arguments have
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 # been processed, to set up a sensible default. It gets invoked again
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 # afterwards, since there may have been a change between GUI and CLI
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 # mode.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 # After the first call to this function it is possible to use assertions.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 proc pkgconf::initialise_error_handling { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 if { $pkgconf::gui_mode } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 set pkgconf::fatal_error_handler pkgconf::gui_fatal_error_handler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 set pkgconf::warning_handler pkgconf::gui_warning_handler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 set pkgconf::report_handler pkgconf::gui_report_handler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269 set pkgconf::fatal_error_handler pkgconf::cli_fatal_error_handler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270 set pkgconf::warning_handler pkgconf::cli_warning_handler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 set pkgconf::report_handler pkgconf::cli_report_handler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 # These routines can be used by containing programs to provide their
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 # own error handling.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 proc pkgconf::set_fatal_error_handler { fn } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280 ASSERT { $fn != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 set pkgconf::fatal_error_handler $fn
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 proc pkgconf::set_warning_handler { fn } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 ASSERT { $fn != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 set pkgconf::warning_handler $fn
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 proc pkgconf::set_report_handler { fn } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 ASSERT { $fn != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291 set pkgconf::report_handler $fn
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 # A very simple assertion facility. It takes a single argument, an expression
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 # that should be evaluated in the calling function's scope, and on failure it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297 # should generate a fatal error.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 proc pkgconf::ASSERT { condition } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301 set result [uplevel 1 [list expr $condition]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303 if { $result == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304 fatal_error "Assertion failure.\nPredicate \"$condition\"\nThe failure occurred in \"[info level -1]\""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 # {{{ Utilities
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 # cdl_compare_version. This is a partial implementation of the full
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313 # cdl_compare_version facility defined in the product specification. Its
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 # purpose is to order the various versions of a given package with
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 # the most recent version first. As a special case, "current" is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 # always considered the most recent.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 # There are similarities between cdl_compare_version and with Tcl's
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 # package vcompare, but cdl_compare_version is more general.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 proc pkgconf::cdl_compare_version { arg1 arg2 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 if { $arg1 == $arg2 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 if { $arg1 == "current"} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 return -1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 if { $arg2 == "current" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 set index1 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 set index2 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 set ch1 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 set ch2 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338 set num1 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 set num2 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 while { 1} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
343 set ch1 [string index $arg1 $index1]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
344 set ch2 [string index $arg2 $index2]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 set num1 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 set num2 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 if { ($ch1 == "") && ($ch2 == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
350 # Both strings have terminated at the same time. There may have
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
351 # been some spurious leading zeroes in numbers.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352 return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354 } elseif { $ch1 == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
356 # The first string has ended first. If ch2 is a separator then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357 # arg2 is a derived version, e.g. v0.3.p1 and hence newer. Otherwise ch2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 # is an experimental version v0.3beta and hence older.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 if { [string match \[-._\] $ch2] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
362 return -1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 } elseif { $ch2 == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366 # Equivalent to the above.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 if { [string match \[-._\] $ch1] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 return -1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
370 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374 # There is still data to be processed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375 # Check for both strings containing numbers at the current index.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376 if { ( [string match \[0-9\] $ch1] ) && ( [string match \[0-9\] $ch2] ) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378 # Extract the entire numbers from the version string.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379 while { [string match \[0-9\] $ch1] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380 set num1 "$num1$ch1"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 incr index1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382 set ch1 [string index $arg1 $index1]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384 while { [string match \[0-9\] $ch2] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 set num2 "$num2$ch2"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 incr index2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387 set ch2 [string index $arg2 $index2]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 if { $num1 < $num2 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392 } elseif { $num1 > $num2 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 return -1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 # This is not numerical data. If the two characters are the same then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 # move on.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 if { $ch1 == $ch2 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 incr index1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 incr index2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406 # Next check if both strings are at a separator. All separators can be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
407 # used interchangeably.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408 if { ( [string match \[-._\] $ch1] ) && ( [string match \[-._\] $ch2] ) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 incr index1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410 incr index2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414 # There are differences in the characters and they are not interchangeable.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415 # Just return a standard string comparison.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416 return [string compare $ch1 $ch2]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420 if { 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 puts "compare current v0.1 : [pkgconf::cdl_compare_version current v0.1]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423 puts "compare v0.1 current : [pkgconf::cdl_compare_version v0.1 current]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424 puts "compare current current : [pkgconf::cdl_compare_version current current]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 puts "compare v0.1 v0.1 : [pkgconf::cdl_compare_version v0.1 v0.1]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
426 puts "compare v0_1 v0.1 : [pkgconf::cdl_compare_version v0_1 v0.1]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427 puts "compare v0.1 v0_1 : [pkgconf::cdl_compare_version v0.1 v0_1]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
428 puts "compare v0_1 v0-1 : [pkgconf::cdl_compare_version v0_1 v0-1]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429 puts "compare v0-1 v0_1 : [pkgconf::cdl_compare_version v0-1 v0_1]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
430 puts "compare v0.2 v0.1 : [pkgconf::cdl_compare_version v0.2 v0.1]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
431 puts "compare v0.1 v0.2 : [pkgconf::cdl_compare_version v0.1 v0.2]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432 puts "compare v0.10 v0.2 : [pkgconf::cdl_compare_version v0.10 v0.2]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
433 puts "compare v0.2 v0.10 : [pkgconf::cdl_compare_version v0.2 v0.10]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434 puts "compare 980410 980412 : [pkgconf::cdl_compare_version 980410 980412]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 puts "compare 980412 980410 : [pkgconf::cdl_compare_version 980412 980410]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436 puts "compare ss980410 ss980412 : [pkgconf::cdl_compare_version ss980410 ss980412]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 puts "compare ss980412 ss980410 : [pkgconf::cdl_compare_version ss980412 ss980410]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
438 puts "compare v0.1.2 v0.1.3 : [pkgconf::cdl_compare_version v0.1.2 v0.1.3]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
439 puts "compare v0.1.3 v0.1.2 : [pkgconf::cdl_compare_version v0.1.3 v0.1.2]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
440 puts "compare v1.0 v0.1.3 : [pkgconf::cdl_compare_version v1.0 v0.1.3]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
441 puts "compare v0.1.3 v1.0 : [pkgconf::cdl_compare_version v0.1.3 v1.0]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
442 puts "compare v1.0beta v1.0 : [pkgconf::cdl_compare_version v1.0beta v1.0]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
443 puts "compare v1.0 v1.0beta : [pkgconf::cdl_compare_version v1.0 v1.0beta]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
444 puts "compare v1.0.p1 v1.0 : [pkgconf::cdl_compare_version v1.0.p1 v1.0]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
445 puts "compare v1.0 v1.0.p1 : [pkgconf::cdl_compare_version v1.0 v1.0.p1]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
447
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
449 # {{{ Argument parsing
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
450
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
451 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
452 # Parsing the arguments. The following arguments should be accepted for
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
453 # backwards compatibility reasons.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
454 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
455 # --target=<arch_name>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
456 # --platform=sim
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
457 # --startup=rom or --startup=ram
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
458 # --prefix=<directory>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
459 # --disable-uitron
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
460 # --disable-libc
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
461 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
462 # There was also a --disable-kernel_c_api, but that is no longer supported.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
463 # For now disabling only applies to entire packages, not to components
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
464 # within a package. The argument --release=debug has also been disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
465 # because it affects too many things (the makevars file, various #define's,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
466 # etc.).
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
467 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
468 # Also it was possible to use --disable-uitron=yes, but that was
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
469 # undocumented and is not worth supporting.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
470 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
471 # Configure allowed --srcdir=xxx, although it did not need it. It is useful
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
472 # to support this, and to add --builddir. --installdir as a prefix alias
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
473 # then makes sense.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
474 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
475 # --help should be supported if present as a single argument.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
476 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
477 # It is desirable to support additional arguments of the form:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
478 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
479 # --enable-uitron (to undo a disable in the saved data)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
480 # --kernel-version=current
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
481 # --uitron-version=v0.3
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
482 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
483 # Similarly it is desirable to allow users to control compiler flags, e.g.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
484 # DBGFLAGS="-Wall -Werror"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
485 #
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
486 # --debug can be used to set appropriate debug options in the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
487 # infrastructure. This should probably be --enable-debug, but that
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
488 # could cause confusion. There is also a --nodebug option.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
489 #
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
490 # A new argument is --nw, to disable the GUI environment. Other new
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
491 # arguments are:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
492 # --targets and --packages to display the appropriate details
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 # --force to force files to be copied across from the repository
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 # --defaults to cause the program to ignore the values in the save file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
495 # --linkhdrs and --copyhdrs to control how header files should be handled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
496 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
497 # It is also a good idea to be a bit more flexible about the format
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
498 # of the command line arguments, for example -target=xxx should work,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
499 # as should -target xxx
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
500 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
501 # The argv0 argument should be the name of this script. It can be used
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
502 # to get at the component repository location. If this script has been
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
503 # run incorrectly then currently it will fail: in future it may be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
504 # desirable to check an environment variable instead.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
505 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
506 # The argv argument is a string containing the rest of the arguments.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
507 # If any of the arguments contain spaces then this argument will be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
508 # surrounded by braces. If any of the arguments contain braces then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
509 # things will break.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
510 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
511
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
512 proc pkgconf::parse_arguments { argv0 argv } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
513
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
514 # First, check for --help or any of the variants. If this script
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
515 # is running in a larger program then it is assumed that the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
516 # containing program will not pass --help as an argument.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
517 if { ( $argv == "--help" ) || ( $argv == "-help" ) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
518 ( $argv == "--H" ) || ( $argv == "-H" ) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
519
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
520 argument_help
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
521 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
522 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
523
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
524 if { $argv != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
525
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
526 # There are arguments. If any of the arguments contained
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
527 # spaces then these arguments will have been surrounded
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
528 # by braces, which is a nuisance. So start by turning the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
529 # arguments into a numerically indexed array.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
530
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
531 set argc 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
532 array set args { }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
533 foreach arg $argv {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
534 set args([incr argc]) $arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
535 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
536
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
537 # Now examine each argument with regular expressions. It is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
538 # useful to have some variables filled in by the regexp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
539 # matching.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
540 set dummy ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
541 set match1 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
542 set match2 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
543 for { set i 1 } { $i <= $argc } { incr i } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
544
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
545 # Check for -nw. The regexp allows an optional -, followed by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
546 # the text -nw, and nothing else.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
547 if { [regexp -- {^-?-nw$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
548 set pkgconf::no_windows_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
549 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
550 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
551
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
552 # Check for --packages and the other simple ones.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
553 if { [regexp -- {^-?-packages$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
554 set pkgconf::list_packages_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
555 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
556 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
557 if { [regexp -- {^-?-pkgdata$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
558 set pkgconf::list_pkgdata_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
559 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
560 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
561 if { [regexp -- {^-?-targets$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
562 set pkgconf::list_targets_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
563 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
564 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
565 if { [regexp -- {^-?-flags$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
566 set pkgconf::list_flags_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
567 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
568 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
569 if { [regexp -- {^-?-force$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 set pkgconf::force_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
572 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
573 if { [regexp -- {^-?-defaults$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
574 set pkgconf::defaults_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
575 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
576 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
577 if { [regexp -- {^-?-linkhdrs$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
578 set pkgconf::use_links_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
579 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
580 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
581 if { [regexp -- {^-?-copyhdrs$} $args($i)] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
582 set pkgconf::use_copies_arg 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
583 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
584 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
585 if { [regexp -- {^-?-debug$} $args($i)] == 1 } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
586 set pkgconf::debug_arg 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
587 continue
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
588 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
589 if { [regexp -- {^-?-nodebug$} $args($i)] == 1 } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
590 set pkgconf::nodebug_arg 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
591 continue
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
592 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
593
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
594 # Now for the directories. srcdir and builddir will have
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
595 # been calculated already, but may be overridden here.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
596 if { [regexp -- {^-?-src_?dir=?(.*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
597 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
598 set pkgconf::component_repository $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
599 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
600 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
601 fatal_error "pkgconf: missing argument after --srcdir"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
602 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
603 set pkgconf::component_repository $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
604 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
605 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
606 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
607 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
608 if { [regexp -- {^-?-build_?dir=?(.*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
609 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
610 set pkgconf::build_tree $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
611 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
612 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
613 fatal_error "pkgconf: missing argument after --builddir"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
614 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
615 set pkgconf::build_tree $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
616 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
617 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
618 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
619 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
620
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
621 # And prefix, before moving on to the more interesting ones.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
622 # Prefix is a pathname so spaces are legitimate, as are dots,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
623 # directory separators, and drive indicators.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
624 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
625 # NOTE: strictly speaking the pattern should be platform specific.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
626 if { [regexp -- {^-?-prefix=?(.*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
627 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
628 set pkgconf::prefix_arg $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
629 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
630 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
631 fatal_error "pkgconf: missing argument after --prefix"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
632 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
633 set pkgconf::prefix_arg $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
634 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
635 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
636 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
637 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
638
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
639 # --installdir is a useful alias for prefix.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
640 if { [regexp -- {^-?-install_?dir=?(.*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
641 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
642 set pkgconf::prefix_arg $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
643 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
644 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
645 fatal_error "pkgconf: missing argument after --installdir"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
646 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
647 set pkgconf::prefix_arg $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
648 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
649 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
650 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
651 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
652
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
653
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
654 # Now check for a --target arg. The -target must match exactly,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
655 # but there can be one leading hyphen that gets ignored. The
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
656 # target can be part of the same argument (with an = in between)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
657 # or it can be all of the next argument.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
658 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
659 # This code will match spuriously with --targetxxx, i.e. the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
660 # = is optional. This is harmless.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
661 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
662 # The target is not validated at this point, that happens after
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
663 # reading in the targets file. It is possible to specify
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
664 # several --target arguments, and only the last one takes
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
665 # effect.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
666 if { [regexp -- {^-?-target=?([_a-zA-Z0-9]*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
667 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
668 set pkgconf::target_arg $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
669 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
670 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
671 fatal_error "pkgconf: missing argument after --target"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
672 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
673 set pkgconf::target_arg $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
674 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
675 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
676 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
677 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
678
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
679 # Ditto for --platform.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
680 if { [regexp -- {^-?-platform=?([_a-zA-Z0-9]*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
681 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
682 set pkgconf::platform_arg $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
683 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
684 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
685 fatal_error "pkgconf: missing argument after --platform"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
686 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
687 set pkgconf::platform_arg $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
688 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
689 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
690 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
691 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
692
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
693 # And for --startup.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
694 if { [regexp -- {^-?-startup=?([_a-zA-Z0-9]*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
695 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
696 set pkgconf::startup_arg $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
697 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
698 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
699 fatal_error "pkgconf: missing argument after --startup"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
700 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
701 set pkgconf::startup_arg $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
702 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
703 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
704 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
705 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
706
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
707 # Now for --disable-<package>. The disabled packages are stored
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
708 # in a simple list.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
709 if { [regexp -- {^-?-disable-?=?([_a-zA-Z0-9]*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
710 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
711 lappend pkgconf::disable_args $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
712 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
713 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
714 fatal_error "pkgconf: missing argument after --disable"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
715 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
716 lappend pkgconf::disable_args $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
717 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
718 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
719 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
720 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
721
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
722 # The same for --enable-<package>.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
723 if { [regexp -- {^-?-enable-?=?([_a-zA-Z0-9]*)$} $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
724 if { $match1 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
725 lappend pkgconf::enable_args $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
726 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
727 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
728 fatal_error "pkgconf: missing argument after --enable"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
729 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
730 lappend pkgconf::enable_args $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
731 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
732 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
733 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
734 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
735
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
736 # And for --<package>-version=xxx
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
737 # These versions are stored in an array indexed by the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
738 # package string.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
739 if {[regexp -- {^-?-([_a-zA-Z0-9]+)-?version=?([_\.a-zA-Z0-9]*)$} $args($i) dummy match1 match2] == 1} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
740 if { $match2 != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
741 set pkgconf::version_args($match1) $match2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
742 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
743 if { $i == $argc } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
744 fatal_error "pkgconf: missing argument after --$match1-version"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
745 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
746 set pkgconf::version_args($match1) $args([incr i])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
747 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
748 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
749 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
750 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
751
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
752 # For each of the known compiler flags, check for a definition of
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
753 # this flag. The flags are stored in an array cflags_args().
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
754 # Note that an empty string is legal, so that the default flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
755 # from the targets file can be disabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
756 set its_a_flag 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
757 foreach flag $pkgconf::known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
758 if { [regexp -- "^[set flag]=(.*)\$" $args($i) dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
759 set pkgconf::cflags_args($flag) $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
760 set its_a_flag 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
761 break
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
762 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
763 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
764 if { $its_a_flag != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
765 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
766 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
767
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
768 # An unrecognised argument.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
769 fatal_error "pkgconf: invalid argument $args($i)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
770 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
771 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
772
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
773 # Under Windows it is desirable to do some checking on any directories that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
774 # have been provided. Some cygwin pathnames that a user might supply are
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
775 # not acceptable to Tcl.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
776 if { $pkgconf::windows_host } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
777 set pkgconf::component_repository [get_pathname_for_tcl $pkgconf::component_repository]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
778 set pkgconf::build_tree [get_pathname_for_tcl $pkgconf::build_tree]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
779 if { $pkgconf::prefix_arg != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
780 set pkgconf::prefix_arg [get_pathname_for_tcl $pkgconf::prefix_arg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
781 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
782 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
783
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
784 # Enabling this facilitates testing of the parsing code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
785 if { 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
786 puts "component repository is $pkgconf::component_repository"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
787 puts "build tree is $pkgconf::build_tree"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
788 puts "prefix_arg is $pkgconf::prefix_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
789 puts "list_targets_arg is $pkgconf::list_targets_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
790 puts "list_packages_arg is $pkgconf::list_packages_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
791 puts "list_pkgdata_arg is $pkgconf::list_pkgdata_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
792 puts "list_flags_arg is $pkgconf::list_flags_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
793 puts "no_windows_arg is $pkgconf::no_windows_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
794 puts "target_arg is $pkgconf::target_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
795 puts "platform_arg is $pkgconf::platform_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
796 puts "startup_arg is $pkgconf::startup_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
797 puts "disable_args is $pkgconf::disable_args"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
798 puts "enable_args is $pkgconf::enable_args"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
799 puts "force_arg is $pkgconf::force_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
800 puts "defaults_arg is $pkgconf::defaults_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
801 puts "use_links_arg is $pkgconf::use_links_arg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
802 puts "use_copies_arg is $pkgconf::use_copies_arg"
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
803 puts "debug_arg is $pkgconf::debug_arg"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
804 puts "nodebug_arg is $pkgconf::nodebug_arg"
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
805 foreach i [array names pkgconf::version_args] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
806 puts "Package $i needs version $pkgconf::version_args($i)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
807 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
808 foreach flag [array names pkgconf::cflags_args] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
809 puts "Compiler flag $flag has value $pkgconf::cflags_args($flag)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
810 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
811 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
812 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
813
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
814 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
815
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
816 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
817 # Display help information if the user has typed --help, -H, --H, or -help.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
818 # The help text uses two hyphens for consistency with configure.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
819 # Arguably this should change.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
820 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
821 # Not all legal command line arguments are listed. Some of the command
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
822 # line arguments like --flags are intended for internal use only.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
823 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
824 # NOTE: if this command is being invoked from a shell script that sets
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
825 # the defaults for a particular architecture then the information will not
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
826 # be completely accurate. There is no easy solution for this problem.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
827 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
828 # NOTE: it would be a really good idea to give an example command line.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
829 # Unfortunately this command line must include a target architecture,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
830 # and there is no sensible default for that.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
831 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
832 proc pkgconf::argument_help { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
833
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
834 puts "Usage: pkgconf \[options\]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
835 puts "Available options are:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
836 puts " --help : display this text."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
837 puts " --packages : list all packages."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
838 puts " --targets : list all possible targets."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
839 puts " --target=<arch> : target the specified architecture."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
840 puts " --platform=sim : target the simulator rather than hardware."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
841 puts " --startup=rom : generate code suitable for ROMming."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
842 puts " --disable-<pkg> : disable a given package."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
843 puts " --enable-<pkg> : enable a given package."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
844 puts " --<pkg>-version=v0.3 : use a specific version of a package."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
845 puts " --defaults : use default settings instead of the save file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
846 puts " --srcdir=<dir> : specify location of the component repository."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
847 puts " --builddir=<dir> : specify location of the build directory."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
848 puts " --prefix=<dir> : specify location of the install directory."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
849 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
850
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
851 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
852 # {{{ Packages file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
853
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
854 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
855 # The component repository should contain a file "packages" containing details
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
856 # of all supported packages. This file is actually an executable Tcl script
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
857 # containing instances of the "package" command, which takes three arguments.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
858 # It is necessary to update the variables pkgconf::known_packages and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
859 # pkgconf::package_data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
860 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
861
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
862 proc pkgconf::read_packages { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
863
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
864 ASSERT { $pkgconf::component_repository != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
865 ASSERT { [array names pkgconf::package_data] == "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
866 ASSERT { $pkgconf::known_packages == "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
867
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
868 # A safe interpreter is used to process the packages file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
869 # This is somewhat overcautious, but it is also harmless.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
870 # The following two commands are made accessible to the slave
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
871 # interpreter and are responsible for updating the actual data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
872 proc set_package_data { name value } {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
873 set ::pkgconf::package_data($name) $value
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
874 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
875 proc add_known_package { name } {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
876 lappend ::pkgconf::known_packages $name
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
877 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
878
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
879 # Create the parser, add the aliased commands, and then define
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
880 # the routines that do the real work.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
881 set parser [interp create -safe]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
882 $parser alias set_package_data pkgconf::set_package_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
883 $parser alias add_known_package pkgconf::add_known_package
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
884
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
885 $parser eval {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
886
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
887 set current_package ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
888
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
889 proc package { name body } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
890
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
891 add_known_package $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
892 set_package_data "$name,alias" $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
893 set_package_data "$name,dir" ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
894 set_package_data "$name,versions" ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
895 set_package_data "$name,default" 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
896 set_package_data "$name,incdir" ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
897 set_package_data "$name,hardware" 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
898
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
899 # Evaluate the body such that the commands know what the current package is.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
900 set ::current_package $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
901 eval $body
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
902 set ::current_package ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
903 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
904
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
905 proc alias { str } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
906 set_package_data "$::current_package,alias" $str
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
907 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
908
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
909 # The remaining commands are basically clones of alias.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
910 proc directory { dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
911 set_package_data "$::current_package,dir" $dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
912 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
913
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
914 proc default_value { val } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
915 set_package_data "$::current_package,default" $val
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
916 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
917
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
918 proc include_dir { dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
919 set_package_data "$::current_package,incdir" $dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
920 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
921
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
922 proc hardware { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
923 set_package_data "$::current_package,hardware" 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
924 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
925 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
926
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
927 # The parser is ready to evaluate the script. To avoid having to give the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
928 # safe interpreter file I/O capabilities, the file is actually read in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
929 # here and then evaluated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
930 set filename [file join $pkgconf::component_repository "packages"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
931 set status [ catch {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
932 set fd [open $filename r]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
933 set script [read $fd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
934 close $fd
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
935 $parser eval $script
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
936 } message]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
937
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
938 if { $status != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
939 pkgconf::fatal_error "Unexpected error while processing $filename\n$message"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
940 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
941
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
942 # The interpreter and the aliased commands are no longer required.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
943 rename set_package_data {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
944 rename add_known_package {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
945 interp delete $parser
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
946
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
947 # At this stage the packages file has been read in. It is a good idea to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
948 # check that all of these packages are present and correct, and incidentally
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
949 # figure out which versions are present.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
950 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
951
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
952 set pkgdir [file join $pkgconf::component_repository $pkgconf::package_data($pkg,dir)]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
953 if { ![file exists $pkgdir] || ![file isdir $pkgdir] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
954 fatal_error \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
955 "The file [file join $pkgconf::component_repository "packages"] lists a package\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
956 $pkg which should be present in $pkgdir. This package is missing."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
957 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
958
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
959 # Each subdirectory should correspond to a release. A utility routine
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
960 # is available for this.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
961 set pkgconf::package_data($pkg,versions) [locate_subdirs $pkgdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
962 if { $pkgconf::package_data($pkg,versions) == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
963 fatal_error "The package $pkg does not contain any version directories."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
964 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
965
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
966 # Sort all the versions using a version-aware comparison version
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
967 set pkgconf::package_data($pkg,versions) [
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
968 lsort -command pkgconf::cdl_compare_version $pkgconf::package_data($pkg,versions)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
969 ]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
970 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
971
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
972 # Handle the --packages argument.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
973 if { $pkgconf::list_packages_arg != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
974
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
975 # The user wants to know about all the arguments. Just to be fancy
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
976 # this code does some alignment.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
977 set name_maxlen 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
978
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
979 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
980 if { [string length $pkg] > $name_maxlen} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
981 set name_maxlen [string length $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
982 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
983 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
984
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
985 puts "Known packages are:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
986 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
987 puts "[format " %-*s : " $name_maxlen $pkg]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
988 puts " Available versions: $pkgconf::package_data($pkg,versions)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
989 puts " Aliases : $pkgconf::package_data($pkg,alias)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
990 if { $pkgconf::package_data($pkg,hardware) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
991 puts " This package is only available on specific hardware."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
992 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
993 if { $pkgconf::package_data($pkg,default) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
994 puts " This package is enabled by default."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
995 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
996 puts " This package is disabled by default."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
997 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
998 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
999 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1001 # Ditto for the --pkgdata argument. In this case the data is intended for use
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1002 # by other programs, and is not necessarily intelligible to users.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1003 if { $pkgconf::list_pkgdata_arg != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1004 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1005 set dir [file join $pkgconf::package_data($pkg,dir) [lindex $pkgconf::package_data($pkg,versions) 0]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1006 set dir [file nativename $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1007 if { $pkgconf::windows_host != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1008 regsub -all {\\} $dir {\\\\} dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1009 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1010 set alias [get_build_alias $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1011 puts "\"$pkg\" \"$alias\" \"$dir\""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1012 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1013 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1014 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1015
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1016 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1017 # Given a package name as supplied by the user, return the internal package name.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1018 # This involves searching through the list of aliases.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1019 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1020 proc pkgconf::find_package { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1021
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1022 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1023
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1024 if { [string toupper $pkg] == [string toupper $name] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1025 return $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1026 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1027
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1028 foreach alias $pkgconf::package_data($pkg,alias) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1029 if { [string toupper $alias] == [string toupper $name] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1030 return $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1031 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1032 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1033 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1034
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1035 return ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1036 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1037
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1038 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1039 # Given a package name, return the first alias string. This is useful for
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1040 # output code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1041 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1042 proc pkgconf::get_package_alias { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1043
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1044 pkgconf::ASSERT { [lsearch -exact $pkgconf::known_packages $name] != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1045 set alias [lindex $pkgconf::package_data($name,alias) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1046 return $alias
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1047 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1048
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1049 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1050 # Does a given package actually exist ? This copes with aliases
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1051 # as well.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1052 proc pkgconf::is_package { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1053
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1054 ASSERT { $name != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1055
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1056 set result 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1057 set name [find_package $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1058 if { $name != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1059 set result 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1060 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1061 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1062 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1063
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1064 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1065 # Is a particular package a hardware-specific package ? This code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1066 # deals with aliases as well
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1067 proc pkgconf::is_hardware_package { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1068
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1069 ASSERT { $name != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1070
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1071 set name [find_package $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1072 ASSERT { $name != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1073
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1074 set result 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1075 if { $pkgconf::package_data($name,hardware) != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1076 set result 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1077 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1078 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1079 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1080
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1081 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1082 # Is a particular version string valid for the given package ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1083 proc pkgconf::is_valid_version { pkg version } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1084
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1085 ASSERT { $pkg != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1086 ASSERT { $version != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1087
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1088 set pkg [find_package $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1089 ASSERT { $pkg != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1090
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1091 set result 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1092 set index [lsearch -exact $pkgconf::package_data($pkg,versions) $version]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1093 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1094 set result 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1095 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1096 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1097 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1098
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1099 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1100 # {{{ Targets file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1101
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1102 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1103 # The handling of the targets file is similar to that for the packages file,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1104 # but a targets file is a bit more complicated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1105 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1106
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1107 proc pkgconf::read_targets { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1108
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1109 ASSERT { $pkgconf::component_repository != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1110 ASSERT { [array names pkgconf::target_data] == "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1111 ASSERT { $pkgconf::known_targets == "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1112 ASSERT { $pkgconf::known_compiler_flags != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1113
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1114 proc add_known_target { name } {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1115 lappend ::pkgconf::known_targets $name
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1116 set ::pkgconf::target_data($name,alias) $name
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1117 set ::pkgconf::target_data($name,prefix) ""
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1118 set ::pkgconf::target_data($name,known_platforms) ""
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1119 set ::pkgconf::target_data($name,packages) ""
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1120 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1121 proc add_known_platform { arch name } {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1122 lappend ::pkgconf::target_data($arch,known_platforms) $name
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1123 set ::pkgconf::target_data($arch,$name,alias) ""
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1124 set ::pkgconf::target_data($arch,$name,startup) ""
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1125 set ::pkgconf::target_data($arch,$name,packages) ""
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1126 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1127 proc set_target_data { name value } {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1128 set ::pkgconf::target_data($name) $value
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1129 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1130
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1131 set parser [interp create -safe]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1132 interp share {} stdout $parser
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1133 $parser alias set_target_data pkgconf::set_target_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1134 $parser alias add_known_target pkgconf::add_known_target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1135 $parser alias add_known_platform pkgconf::add_known_platform
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1136 $parser eval [list set known_compiler_flags $pkgconf::known_compiler_flags]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1137
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1138 $parser eval {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1139
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1140 set current_target ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1141 set current_platform ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1142
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1143 proc target { name body } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1144
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1145 add_known_target $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1146
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1147 # Evaluate the body such that the commands know what the current target is.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1148 set ::current_target $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1149 eval $body
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1150 set ::current_target ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1151 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1152
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1153 proc alias { str } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1154
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1155 # If processing a platform body, update the platform data. Otherwise update the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1156 # target data. There should be only one alias command per body.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1157 if { $::current_platform != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1158 set_target_data "$::current_target,$::current_platform,alias" $str
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1159 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1160 set_target_data "$::current_target,alias" $str
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1161 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1162 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1163
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1164 proc command_prefix { str } {
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1165 # Allow the command prefix to be overridden on a per-platform basis
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1166 if { $::current_platform != "" } {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1167 set_target_data "$::current_target,$::current_platform,prefix" $str
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1168 } else {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1169 set_target_data "$::current_target,prefix" $str
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1170 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1171 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1172
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1173 proc packages { list } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1174 if { $::current_platform != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1175 set_target_data "$::current_target,$::current_platform,packages" $list
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1176 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1177 set_target_data "$::current_target,packages" $list
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1178 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1179 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1180
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1181 proc hal { dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1182 if { $::current_platform != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1183 set_target_data "$::current_target,$::current_platform,haldir" $dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1184 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1185 set_target_data "$::current_target,haldir" $dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1186 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1187 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1188
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1189 proc base_platform { str } {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1190 if { $::current_platform != "" } {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1191 set_target_data "$::current_target,$::current_platform,base_platform" $str
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1192 } else {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1193 set_target_data "$::current_target,base_platform" $str
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1194 }
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1195 }
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1196
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1197 proc platform { name body } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1198
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1199 add_known_platform $::current_target $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1200
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1201 set ::current_platform $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1202 eval $body
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1203 set ::current_platform ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1204 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1206 proc startup { types } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1207 set_target_data "$::current_target,$::current_platform,startup" $types
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1208 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1209
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1210 # The cflags command is much more complicated than the others. The argument
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1211 # to cflags should be a list of paired data, e.g. ERRFLAGS -Wall.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1212 # The first entry in each pair should be one of the known compiler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1213 # flags, the second one should be its value.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1214 proc cflags { str } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1215
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1216 set arg_count [llength $str]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1217 if { ($arg_count % 2) != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1218 error "Invalid argument list to cflags command in $current_target"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1219 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1220 for { set i 0 } { $i < $arg_count } { incr i 2 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1221 set flag [lindex $str $i]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1222 set value [lindex $str [expr $i + 1]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1223 if { [lsearch -exact $::known_compiler_flags $flag] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1224 error "Invalid compiler flag $flag for target $::current_target"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1225 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1226 if { $::current_platform != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1227 set_target_data "$::current_target,$::current_platform,cflags,$flag" $value
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1228 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1229 set_target_data "$::current_target,cflags,$flag" $value
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1230 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1231 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1232 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1233
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1234 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1235
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1236 # The parser is ready to evaluate the script. To avoid having to give the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1237 # safe interpreter file I/O capabilities, the file is actually read in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1238 # here and then evaluated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1239 set filename [file join $pkgconf::component_repository "targets"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1240 set status [ catch {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1241 set fd [open $filename r]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1242 set script [read $fd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1243 close $fd
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1244 $parser eval $script
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1245 } message]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1246
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1247 if { $status != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1248 puts "Unexpected error while processing $filename\n$message"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1249 exit 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1250 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1251
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1252 # The interpreter and the aliased commands are no longer required.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1253 rename add_known_target {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1254 rename add_known_platform {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1255 rename set_target_data {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1256 interp delete $parser
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1257
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1258 # The targets file has been read in, so it is time for some consistency checks.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1259 foreach target $pkgconf::known_targets {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1260
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1261 # If this target involves some special packages, check that these
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1262 # packages were actually defined in the packages file. Also check
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1263 # that these packages are listed as hardware packages so that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1264 # they will not be enabled by default.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1265 ASSERT { [info exists pkgconf::target_data($target,packages)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1266 foreach pkg $pkgconf::target_data($target,packages) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1267
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1268 if { [is_package $pkg] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1269 fatal_error \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1270 "The targets file $filename lists a package $pkg\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1271 for the $target architecture. This package is not listed\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1272 in the packages file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1273
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1274 } elseif { [is_hardware_package $pkg] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1275
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1276 fatal_error \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1277 "The targets file $filename lists a package $pkg\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1278 for the $target architecture. According to the packages\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1279 file this package is not hardware-specific."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1280 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1281 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1282
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1283 ASSERT { [info exists pkgconf::target_data($target,known_platforms)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1284 foreach platform $pkgconf::target_data($target,known_platforms) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1285
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1286 ASSERT { [info exists pkgconf::target_data($target,$platform,packages)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1287 foreach pkg $pkgconf::target_data($target,packages) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1288
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1289 if { [is_package $pkg] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1290
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1291 fatal_error \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1292 "The target file $filename lists a package $pkg\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1293 for the $target architecture and the $platform platform.\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1294 This package is not listed in the packages file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1295
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1296 } elseif { [is_hardware_package $pkg] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1297
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1298 fatal_error \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1299 "The target file $filename lists a package $pkg\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1300 for the $target architecture and the $platform platform.\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1301 According to the packages file this package is not hardware-specific."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1302 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1303 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1304 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1305
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1306 # Also check that all required data for all targets and platforms has
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1307 # been supplied. A command prefix is required, as is a startup list.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1308
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1309 if { [llength $pkgconf::target_data($target,known_platforms)] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1310 warning "The targets file $filename lists the $target architecture but no platforms."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1311 set index [lsearch -exact $pkgconf::known_targets $target]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1312 ASSERT { $index != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1313 set pkgconf::known_targets [lreplace $pkgconf::known_targets $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1314 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1315 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1316
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1317 foreach platform $pkgconf::target_data($target,known_platforms) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1318 if { [llength $pkgconf::target_data($target,$platform,startup)] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1319 fatal_error \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1320 "The targets file $filename does not list any startup options for target $target, platform $platform."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1321 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1322 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1323 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1324
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1325 # At this stage there may be no targets left over.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1326 if { [llength $pkgconf::known_targets] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1327 fatal_error "The targets file $filename does not list any usable targets."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1328 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1329
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1330 # All the directories exist. Did the user ask for a list of all targets ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1331 if { $pkgconf::list_targets_arg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1332
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1333 # The user wants to know about all the targets. Just to be fancy
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1334 # this code does some alignment.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1335 set name_maxlen 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1336
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1337 foreach target $pkgconf::known_targets {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1338 if { [string length $target] > $name_maxlen} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1339 set name_maxlen [string length $target]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1340 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1341 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1342
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1343 puts "Known targets:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1344 foreach target $pkgconf::known_targets {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1345
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1346 puts "[format " %-*s : aliases $pkgconf::target_data($target,alias)" $name_maxlen $target]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1347
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1348 set packages $pkgconf::target_data($target,packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1349 if { [llength $packages] > 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1350 puts " Required packages"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1351 foreach package $packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1352 puts " [pkgconf::get_package_alias $package] ($package)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1353 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1354 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1355
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1356 foreach platform $pkgconf::target_data($target,known_platforms) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1357 puts " Platform $platform, supported startups $pkgconf::target_data($target,$platform,startup)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1358 set packages $pkgconf::target_data($target,$platform,packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1359 if { [llength $packages] > 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1360 puts " Required packages"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1361 foreach package $packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1362 puts " [pkgconf::get_package_alias $package] ($package)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1363 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1364 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1365 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1366 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1367 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1368 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1369
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1370 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1371 # Given a target name as supplied by the user, return the internal target name.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1372 # This involves searching through the list of aliases.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1373 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1374 proc pkgconf::find_target { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1375
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1376 foreach target $pkgconf::known_targets {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1377
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1378 if { [string toupper $target] == [string toupper $name] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1379 return $target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1380 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1381
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1382 foreach alias $pkgconf::target_data($target,alias) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1383 if { [string toupper $alias] == [string toupper $name] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1384 return $target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1385 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1386 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1387 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1388
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1389 return ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1390 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1391
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1392 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1393 # Ditto but for a given platform name. The target name must be known already.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1394 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1395
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1396 proc pkgconf::find_platform { target name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1397
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1398 pkgconf::ASSERT { [lsearch -exact $pkgconf::known_targets $target] != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1399
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1400 foreach platform $pkgconf::target_data($target,known_platforms) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1401
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1402 if { [string toupper $platform] == [string toupper $name] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1403 return $platform
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1404 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1405
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1406 foreach alias $pkgconf::target_data($target,$platform,alias) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1407
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1408 if { [string toupper $alias] == [string toupper $name] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1409 return $platform
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1410 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1411 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1412 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1413 return ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1414 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1415
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1416 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1417 # Given a target name, return the first alias. This is useful for output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1418 # code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1419 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1420 proc pkgconf::get_target_alias { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1421
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1422 pkgconf::ASSERT { [lsearch -exact $pkgconf::known_targets $name] != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1423
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1424 set alias [lindex $pkgconf::target_data($name,alias) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1425 return $alias
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1426 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1427
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1428 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1429 # Ditto for platforms.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1430 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1431 proc pkgconf::get_platform_alias { target name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1432
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1433 pkgconf::ASSERT { [lsearch -exact $pkgconf::known_targets $target] != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1434 pkgconf::ASSERT { [lsearch -exact $pkgconf::target_data($target,known_platforms) $name] != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1435
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1436 set alias [lindex $pkgconf::target_data($target,$name,alias) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1437 return $alias
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1438 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1439
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1440 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1441 # For a given target and platform, return an appropriate set of compiler flags.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1442 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1443 proc pkgconf::get_platform_cflags { target platform flag } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1444
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1445 ASSERT { [lsearch -exact $pkgconf::known_targets $target] != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1446 ASSERT { [lsearch -exact $pkgconf::target_data($target,known_platforms) $platform] != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1447 ASSERT { [lsearch -exact $pkgconf::known_compiler_flags $flag] != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1448
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1449 # A particular flag may be defined specifically for a platform.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1450 # Or it may come from the target information. Or there may not be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1451 # a default value.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1452 if { [info exists pkgconf::target_data($target,$platform,cflags,$flag)] != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1453 return $pkgconf::target_data($target,$platform,cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1454 } elseif { [info exists pkgconf::target_data($target,cflags,$flag)] != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1455 return $pkgconf::target_data($target,cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1456 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1457 return ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1458 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1459 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1460
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1461 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1462 # Is a given target or platform actually valid ? This code copes
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1463 # with aliases as well.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1464 proc pkgconf::is_target { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1465
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1466 ASSERT { $name != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1467
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1468 set name [find_target $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1469 set result 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1470 if { $name != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1471 set result 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1472 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1473 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1474 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1475
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1476 proc pkgconf::is_platform { target name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1477
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1478 ASSERT { $target != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1479 ASSERT { $name != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1480
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1481 set target [find_target $target]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1482 ASSERT { $target != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1483
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1484 set name [find_platform $target $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1485 set result 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1486 if { $name != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1487 set result 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1488 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1489 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1490 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1491
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1492 proc pkgconf::is_startup { target platform name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1493
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1494 ASSERT { $target != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1495 ASSERT { $name != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1496
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1497 set target [find_target $target]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1498 ASSERT { $target != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1499
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1500 set platform [find_platform $target $platform]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1501 ASSERT { $platform != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1502
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1503 set index [lsearch -exact $pkgconf::target_data($target,$platform,startup) $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1504 set result 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1505 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1506 set result 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1507 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1508 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1509 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1510
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1511 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1512 # Get hold of the default platform and startup for a given target.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1513
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1514 proc pkgconf::get_default_platform { target } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1515
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1516 ASSERT { $target != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1517
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1518 set target [find_target $target]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1519 ASSERT { $target != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1520
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1521 set platform [lindex $pkgconf::target_data($target,known_platforms) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1522 return $platform
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1523 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1524
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1525 proc pkgconf::get_base_platform { target platform } {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1526
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1527 ASSERT { $target != "" }
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1528 ASSERT { $platform != "" }
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1529
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1530 set target [find_target $target]
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1531 ASSERT { $target != "" }
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1532 set platform [find_platform $target $platform]
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1533 ASSERT { $platform != "" }
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1534
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1535 if [info exists pkgconf::target_data($target,$platform,base_platform) ] {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1536 set base_platform [lindex $pkgconf::target_data($target,$platform,base_platform) 0]
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1537 } else {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1538 set base_platform $platform
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1539 }
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1540 return $base_platform
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1541 }
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1542
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1543 proc pkgconf::get_default_startup { target platform } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1544
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1545 ASSERT { $target != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1546 ASSERT { $platform != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1547
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1548 set target [find_target $target]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1549 ASSERT { $target != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1550 set platform [find_platform $target $platform]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1551 ASSERT { $platform != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1552
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1553 set startup [lindex $pkgconf::target_data($target,$platform,startup) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1554 return $startup
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1555 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1556
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1557 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1558 # {{{ Configuration Data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1559
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1560 # {{{ setup_defaults
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1561
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1562 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1563 # The setup_defaults routine is responsible for deciding on default values.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1564 # If there is only one supported architecture then this can be selected,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1565 # and then it is also possible to select a platform and a startup mode.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1566 # All known packages can be enabled by default, and the latest version
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1567 # of each package can be selected.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1568 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1569 # All configuration data is held in the array config_data(). It is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1570 # important to make sure that all fields are initialised.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1571 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1572
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1573 proc pkgconf::setup_defaults { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1574
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1575 ASSERT { [llength [array names pkgconf::config_data] ] == 0 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1576 ASSERT { $pkgconf::known_packages != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1577 ASSERT { $pkgconf::known_targets != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1578 ASSERT { $pkgconf::build_tree != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1579
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1580 set pkgconf::config_data(target) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1581 set pkgconf::config_data(platform) ""
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1582 set pkgconf::config_data(base_platform) ""
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1583 set pkgconf::config_data(startup) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1584 set pkgconf::config_data(prefix) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1585 set pkgconf::config_data(use_links) 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1586
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1587 # Packages fall into a number of different categories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1588 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1589 # 1) some packages are hardware-specific. They should be enabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1590 # by default if that hardware has been selected, but the user
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1591 # must still be able to disable them in case they cause problems.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1592 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1593 # 2) some packages are enabled by default, but can be disabled by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1594 # the user. There are actually some packages that should never
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1595 # be disabled, especially infra, but that would complicate things.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1596 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1597 # 3) some packages are disabled by default, but can be enabled by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1598 # the user.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1599 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1600 # The easiest way to track this information is to store the target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1601 # and platform data, which gives us the hardware packages, plus
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1602 # separate lists of which packages are explicitly enabled or disabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1603 # All other information can be derived from that.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1604 set pkgconf::config_data(enabled_packages) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1605 set pkgconf::config_data(disabled_packages) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1606
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1607 # For each package fill in a default version number.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1608 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1609
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1610 ASSERT { $pkgconf::package_data($pkg,versions) != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1611 ASSERT { [info exists pkgconf::config_data($pkg,version)] == 0 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1612 set pkgconf::config_data($pkg,version) [lindex $pkgconf::package_data($pkg,versions) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1613 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1614
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1615 # If there is only one target architecture, default to it. Also
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1616 # default to the first platform for that target and the first
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1617 # startup for that platform.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1618 if { [llength $pkgconf::known_targets] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1619 set pkgconf::config_data(target) [lindex $pkgconf::known_targets 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1620
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1621 ASSERT { $pkgconf::target_data($pkgconf::config_data(target),known_platforms) != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1622 set pkgconf::config_data(platform) [get_default_platform $pkgconf::config_data(target)]
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1623 set pkgconf::config_data(base_platform) [get_base_platform $pkgconf::config_data(target) $pkgconf::config_data(platform)]
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1624
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1625 ASSERT { $pkgconf::target_data($pkgconf::config_data(target),$pkgconf::config_data(platform),startup) != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1626 set pkgconf::config_data(startup) [get_default_startup $pkgconf::config_data(target) $pkgconf::config_data(platform)]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1627 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1628
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1629 if { [info exists ::env(PKGCONF_USE_LINKS)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1630 set pkgconf::config_data(use_links) 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1631 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1632
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1633 if { 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1634 foreach i [array names pkgconf::config_data] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1635 puts "pkgconf::config_data($i) : $pkgconf::config_data($i)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1636 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1637 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1638 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1639 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1640
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1641 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1642 # {{{ read_save_file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1643
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1644 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1645 # The build tree may have a save file. The aim here is that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1646 # if the user wants to change some aspects of the configuration, e.g. to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1647 # switch between the eval board and the simulator, it should not be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1648 # necessary to pass all the command line arguments again. Instead the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1649 # system should work out past settings and re-use those where possible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1650 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1651 # This routine should be invoked after the defaults are set up but
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1652 # before the command line arguments take effect.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1653 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1654 # There is a command line argument --defaults which stops the saved
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1655 # values from taking effect. The save file is still read in because
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1656 # it is useful to know what is in the build tree at the moment.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1657 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1658
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1659 proc pkgconf::read_save_file { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1660
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1661 ASSERT { $pkgconf::build_tree != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1662
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1663 # Get rid of any old settings that might be hanging around.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1664 foreach i [array names pkgconf::saved_data] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1665 unset pkgconf::saved_data($i)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1666 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1667
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1668 set filename [file join $pkgconf::build_tree "pkgconf.sav"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1669 if { [file exists $filename] && [file isfile $filename] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1670
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1671 # Read in the saved data. A safe interpreter is used, just in case.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1672 proc set_saved_data { name value } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1673 set pkgconf::saved_data($name) $value
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1674 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1675 set parser [interp create -safe]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1676 $parser alias set_saved_data pkgconf::set_saved_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1677
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1678 set status [ catch {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1679 set fd [open $filename r]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1680 set script [read $fd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1681 close $fd
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1682 $parser eval $script
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1683 } message]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1684 if { $status != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1685 pkgconf::fatal_error "Unexpected error while reading back save file $filename\n$message"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1686 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1687
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1688 rename set_saved_data {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1689 interp delete $parser
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1690 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1691
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1692 # It is a good idea to check that the data read back is consistent.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1693 # It is also a good idea to check some aliases, in case something
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1694 # has been renamed between releases.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1695 if { [info exists pkgconf::saved_data(target)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1696
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1697 set target_name [find_target $pkgconf::saved_data(target)]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1698 if { $target_name == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1699 warning "The save file $filename contained an invalid target $pkgconf::saved_data(target). This has been ignored."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1700 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1701 set pkgconf::saved_data(target) $target_name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1702 set pkgconf::config_data(target) $target_name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1703 set pkgconf::config_data(platform) [get_default_platform $pkgconf::config_data(target)]
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1704 set pkgconf::config_data(base_platform) [get_base_platform $pkgconf::config_data(target) $pkgconf::config_data(platform)]
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1705 set pkgconf::config_data(startup) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1706 [get_default_startup $pkgconf::config_data(target) $pkgconf::config_data(platform)]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1707 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1708 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1709
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1710 # There is no point in validating platform or startup unless the target is known.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1711 if { $pkgconf::config_data(target) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1712
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1713 ASSERT { $pkgconf::target_data($pkgconf::config_data(target),known_platforms) != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1714
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1715 if { [info exists pkgconf::saved_data(platform)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1716
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1717 set platform_name [find_platform $pkgconf::config_data(target) $pkgconf::saved_data(platform)]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1718 if { $platform_name == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1719 warning \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1720 "The save file $filename specified an unknown platform $pkgconf::saved_data(platform).\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1721 The platform $pkgconf::config_data(platform) has been substituted."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1722 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1723 set pkgconf::saved_data(platform) $platform_name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1724 set pkgconf::config_data(platform) $platform_name
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1725 set pkgconf::config_data(base_platform) [get_base_platform $pkgconf::config_data(target) $pkgconf::saved_data(platform)]
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1726 set pkgconf::config_data(startup) [get_default_startup $pkgconf::config_data(target) $platform_name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1727 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1728
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1729 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1730
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1731 # Currently if there is a target then there is always a platform,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1732 # possibly the default one.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1733 ASSERT { $pkgconf::target_data($pkgconf::config_data(target),$pkgconf::config_data(platform),startup) != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1734
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1735 if { [info exists pkgconf::saved_data(startup)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1736
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1737 if { [is_startup $pkgconf::config_data(target) $pkgconf::config_data(platform) $pkgconf::saved_data(startup)] \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1738 == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1739 warning \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1740 "The save file $filename specified an unknown startup $pkgconf::saved_data(startup).\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1741 $pkgconf::config_data(startup) startup has been substituted."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1742 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1743 set pkgconf::config_data(startup) $pkgconf::saved_data(startup)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1744 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1745 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1746 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1747
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1748 # There should be an entry listing all packages for which there is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1749 # a version entry. This can be used to update the version numbers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1750 # which should be used in this configuration.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1751 if { [info exists pkgconf::saved_data(versioned_packages) ] != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1752 foreach pkg $pkgconf::saved_data(versioned_packages) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1753
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1754 # Check that there is a saved version string for this package.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1755 # There should be, but it is not worth worrying about.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1756 if { [info exists pkgconf::saved_data($pkg,version)] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1757 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1758 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1759 set version $pkgconf::saved_data($pkg,version)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1760
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1761 # Does this package still exist ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1762 if { [is_package $pkg] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1763 warning \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1764 "The save file $filename specified version $version for package $pkg.\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1765 This package does not exist in the current repository, so the version string\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1766 has been ignored."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1767 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1768 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1769 set pkg [find_package $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1770 ASSERT { $pkg != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1771
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1772 # Is the version valid ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1773 if { [is_valid_version $pkg $version] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1774 warning \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1775 "The save file $filename specified version $version for package $pkg.\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1776 This version is not present in the current repository so the version\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1777 string has been ignored."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1778 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1779 set pkgconf::config_data($pkg,version) $version
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1780 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1781 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1782 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1783
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1784 # Now check that all the packages listed in the save file are known.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1785 # If any are missing then they are just discarded. Known packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1786 # are used to update the appropriate current configuration data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1787 if { [info exists pkgconf::saved_data(enabled_packages)] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1788 set pkgconf::saved_data(enabled_packages) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1789 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1790 if { [info exists pkgconf::saved_data(disabled_packages)] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1791 set pkgconf::saved_data(disabled_packages) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1792 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1793
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1794 foreach pkg $pkgconf::saved_data(enabled_packages) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1795
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1796 if { [is_package $pkg] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1797 warning \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1798 "The save file $filename mentioned a package $pkg.\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1799 This package does not exist in the current repository and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1800 has been ignored."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1801 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1802 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1803
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1804 set pkg [find_package $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1805 set index [lsearch -exact $pkgconf::config_data(enabled_packages) $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1806 if { $index == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1807 lappend pkgconf::config_data(enabled_packages) $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1808 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1809 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1810
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1811 foreach pkg $pkgconf::saved_data(disabled_packages) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1812
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1813 if { [is_package $pkg] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1814 warning \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1815 "The save file $filename mentioned a package $pkg.\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1816 This package does not exist in the current repository and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1817 has been ignored."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1818 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1819 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1820
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1821 set pkg [find_package $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1822 set index [lsearch -exact $pkgconf::config_data(disabled_packages) $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1823 if { $index == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1824 lappend pkgconf::config_data(disabled_packages) $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1825 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1826
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1827 # Better make sure that a package is not simultaneously enabled and disabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1828 set index [lsearch -exact $pkgconf::config_data(enabled_packages) $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1829 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1830 set pkgconf::config_data(enabled_packages) [lreplace $pkgconf::config_data(enabled_packages) $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1831 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1832 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1833
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1834 # Now check for any compiler flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1835 foreach flag $pkgconf::known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1836 if { [info exists pkgconf::saved_data(cflags,$flag)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1837 set pkgconf::config_data(cflags,$flag) $pkgconf::saved_data(cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1838 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1839 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1840
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1841 # Update the install directory if appropriate.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1842 # There is not a lot of checking that can be done here.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1843 if { [info exists pkgconf::saved_data(prefix) ] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1844 set pkgconf::config_data(prefix) $pkgconf::saved_data(prefix)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1845 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1846
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1847 # And check for the use_links option
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1848 if { [info exists pkgconf::saved_data(use_links)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1849 set pkgconf::config_data(use_links) $pkgconf::saved_data(use_links)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1850 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1851
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1852 # Now, possibly undo all of this if the user specified --defaults.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1853 if { $pkgconf::defaults_arg != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1854 foreach entry [array names pkgconf::config_data] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1855 unset pkgconf::config_data($entry)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1856 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1857 setup_defaults
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1858 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1859
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1860 if { 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1861 foreach i [array names pkgconf::config_data] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1862 puts "pkgconf::config_data($i) : $pkgconf::config_data($i)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1863 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1864 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1865 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1866 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1867
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1868 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1869 # {{{ write_save_file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1870
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1871 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1872 # Outputting the save file. This is a relatively simple operation assuming
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1873 # no file I/O errors happen. The saved_data array is updated with the new
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1874 # contents of the save file. It is not yet clear whether this will be useful,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1875 # but it should not cause any problems either.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1876 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1877
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1878 proc pkgconf::write_save_file { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1879
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1880 # Check for minimal consistency. If any variables are missing then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1881 # this will be handled (poorly) by the catch statement.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1882 ASSERT { [info exists pkgconf::config_data(target)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1883 ASSERT { $pkgconf::build_tree != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1884
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1885 set savename [file join $pkgconf::build_tree "pkgconf.sav"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1886 set open_file ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1887
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1888 set status [catch {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1889
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1890 set open_file [open $savename w]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1891 output_banner $open_file "pkgconf.sav"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1892
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1893 if { $pkgconf::config_data(target) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1894 puts $open_file "set_saved_data target $pkgconf::config_data(target)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1895 set pkgconf::saved_data(target) $pkgconf::config_data(target)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1896 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1897 if { $pkgconf::config_data(platform) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1898 puts $open_file "set_saved_data platform $pkgconf::config_data(platform)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1899 set pkgconf::saved_data(platform) $pkgconf::config_data(platform)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1900 }
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1901 if { $pkgconf::config_data(base_platform) != "" } {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1902 puts $open_file "set_saved_data base_platform $pkgconf::config_data(base_platform)"
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1903 set pkgconf::saved_data(base_platform) $pkgconf::config_data(base_platform)
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
1904 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1905 if { $pkgconf::config_data(startup) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1906 puts $open_file "set_saved_data startup $pkgconf::config_data(startup)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1907 set pkgconf::saved_data(startup) $pkgconf::config_data(startup)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1908 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1909 if { $pkgconf::config_data(enabled_packages) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1910 # The use of the list command here avoids problems with multiple
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1911 # arguments when the file is read back.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1912 puts $open_file "set_saved_data enabled_packages [list $pkgconf::config_data(enabled_packages)]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1913 set pkgconf::saved_data(enabled_packages) $pkgconf::config_data(enabled_packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1914 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1915 if { $pkgconf::config_data(disabled_packages) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1916 puts $open_file "set_saved_data disabled_packages [list $pkgconf::config_data(disabled_packages)]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1917 set pkgconf::saved_data(disabled_packages) $pkgconf::config_data(disabled_packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1918 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1919 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1920 ASSERT { [info exists pkgconf::config_data($pkg,version)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1921 puts $open_file "set_saved_data \"$pkg,version\" $pkgconf::config_data($pkg,version)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1922 set pkgconf::saved_data($pkg,version) $pkgconf::config_data($pkg,version)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1923 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1924 # This allows the versions to be read back in more easily, even if
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1925 # there is a change to the number of packages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1926 puts $open_file "set_saved_data versioned_packages [list $pkgconf::known_packages]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1927
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1928 foreach flag $pkgconf::known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1929 if { [info exists pkgconf::config_data(cflags,$flag)] != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1930 puts $open_file "set_saved_data \"cflags,$flag\" \"$pkgconf::config_data(cflags,$flag)\""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1931 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1932 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1933 if { $pkgconf::config_data(use_links) != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1934 puts $open_file "set_saved_data use_links 1"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1935 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1936
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1937 puts $open_file "set_saved_data prefix \"$pkgconf::config_data(prefix)\""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1938 set pkgconf::saved_data(prefix) $pkgconf::config_data(prefix)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1939
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1940 puts $open_file "\n# End of $savename"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1941 close $open_file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1942 } message ]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1943
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1944 if { $status != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1945
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1946 if { $open_file != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1947 # Whatever error occurred, it happened after the file was opened.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1948 # This is bad news, the file may be corrupt. To avoid complications,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1949 # try to delete it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1950 catch {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1951 close $open_file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1952 file delete $savename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1953 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1954 # Also get rid of the saved_data array.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1955 foreach i [array names saved_data] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1956 unset saved_data($i)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1957 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1958 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1959 fatal_error "An unexpected error occurred while generating the save file $savename: $message"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1960 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1961 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1962
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1963 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1964 # {{{ process_arguments()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1965
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1966 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1967 # This procedure takes care of updating the configuration information using
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1968 # the command line arguments, for example if there was an argument specifying
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1969 # a different version for a particular package then it is this procedure
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1970 # which takes care of it. This procedure also takes care of validating the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1971 # arguments.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1972 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1973 # This procedure should be invoked after setup_defaults has filled in the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1974 # default values for all configuration data, and after read_save_file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1975 # has updated them with saved data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1976 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1977 # There is a separate validation routine which gets invoked first.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1978 # This takes care of serious errors in the command line arguments.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1979 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1980
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1981 proc pkgconf::process_arguments { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1982
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1983 variable known_compiler_flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1984 variable known_packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1985 variable package_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1986 variable known_targets
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1987 variable target_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1988
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1989 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1990 variable target_arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1991 variable platform_arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1992 variable startup_arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1993 variable prefix_arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1994 variable disable_args
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1995 variable enable_args
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1996 variable version_args
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1997 variable use_links_arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1998 variable use_copies_arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1999 variable cflags_args
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2001 # Constructing the file name strings here facilitates generating
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2002 # error messages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2003 set packages_file [file join $pkgconf::component_repository "packages"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2004 set targets_file [file join $pkgconf::component_repository "targets"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2005
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2006 # The target, platform, and startup values are used throughout so it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2007 # is convenient to have locals.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2008 set target $pkgconf::config_data(target)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2009 set platform $pkgconf::config_data(platform)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2010 set startup $pkgconf::config_data(startup)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2011
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2012 # Start by validating the --target argument This target must
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2013 # be present in the known_targets list. If it is then the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2014 # target architecture can be updated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2015
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2016 if { $pkgconf::target_arg != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2017
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2018 set target [find_target $pkgconf::target_arg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2019 if { $target == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2020 fatal_error "Invalid argument --target=$target_arg, this target is not listed in $targets_file"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2021 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2022 set pkgconf::config_data(target) $target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2023
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2024 # It is possible that the platform and startup data from the save file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2025 # are no longer valid because of a change in the target. If so then the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2026 # relevant fields have to be cleared.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2027 if { $platform != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2028 set platform [find_platform $target $platform]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2029 set pkgconf::config_data(platform) $platform
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
2030 set pkgconf::config_data(base_platform) [get_base_platform $target $platform]
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2031 if { ($platform != "") && ($startup != "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2032 if { [lsearch -exact $pkgconf::target_data($target,$platform,startup) $startup] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2033 set startup ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2034 set pkgconf::config_data(startup) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2035 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2036 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2037 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2038
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2039 # Next, if the platform and startup are not currently known then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2040 # it is possible to set up defaults for this target.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2041 if { $platform == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2042 set platform [lindex $pkgconf::target_data($target,known_platforms) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2043 set pkgconf::config_data(platform) $platform
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2044 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2045 if { $startup == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2046 set startup [lindex $pkgconf::target_data($target,$platform,startup) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2047 set pkgconf::config_data(startup) $startup
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2048 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2049 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2050
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2051 # If the target is known then it is possible to verify platform and startup
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2052 # arguments. Without a target these arguments are meaningless.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2053
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2054 if { ($target != "") && ($pkgconf::platform_arg != "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2055
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2056 set platform [find_platform $target $pkgconf::platform_arg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2057 if { $platform == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2058 fatal_error "Invalid argument --platform=$pkgconf::platform_arg, this platform is not listed in $targets_file"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2059 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2060 set pkgconf::config_data(platform) $platform
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2061 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2062
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 12
diff changeset
2063 if { ($target != "") && ($platform != "") } {
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 12
diff changeset
2064 set pkgconf::config_data(base_platform) [get_base_platform $target $platform]
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 12
diff changeset
2065 }
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
2066
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2067 if { ($target != "") && ($platform != "") && ($pkgconf::startup_arg != "" ) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2068
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2069 if { [lsearch -exact $pkgconf::target_data($target,$platform,startup) $pkgconf::startup_arg] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2070 fatal_error "Invalid argument --startup=$startup_arg, this startup is not listed in $targets_file"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2071 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2072 set startup $pkgconf::startup_arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2073 set config_data(startup) $startup
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2074 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2075
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2076 # It is not really possible to validate the prefix argument.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2077 if { $pkgconf::prefix_arg != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2078 set pkgconf::config_data(prefix) $pkgconf::prefix_arg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2079 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2080
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2081 # Cope with the use of symbolic links vs. copies
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2082 if { $pkgconf::use_links_arg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2083 set pkgconf::config_data(use_links) 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2084 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2085 if { $pkgconf::use_copies_arg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2086 set pkgconf::config_data(use_links) 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2087 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2088
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2089 # For each package that is being disabled, make sure it is on the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2090 # list of disabled packages and not on the list of enabled packages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2091 # The former operation is actually unnecessary if the package is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2092 # disabled by default, but harmless.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2093 foreach pkg $pkgconf::disable_args {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2094 set match [find_package $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2095 if { $match == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2096 fatal_error "Invalid argument --disable-$pkg, package $pkg is not listed in $packages_file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2097 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2098
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2099 set index [lsearch -exact $pkgconf::config_data(enabled_packages) $match]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2100 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2101 set pkgconf::config_data(enabled_packages) [lreplace $pkgconf::config_data(enabled_packages) $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2102 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2103 set index [lsearch -exact $pkgconf::config_data(disabled_packages) $match]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2104 if { $index == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2105 lappend pkgconf::config_data(disabled_packages) $match
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2106 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2107 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2108
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2109 # For each package that should be enabled, add it to the list of enabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2110 # packages and remove it from the list of disabled packages. Again the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2111 # former is actually unnecessary if the package is enabled by default.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2112 foreach pkg $pkgconf::enable_args {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2113 set match [find_package $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2114 if { $match == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2115 fatal_error "Invalid argument --enable-$pkg, package $pkg is not listed in $packages_file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2116 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2117
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2118 set index [lsearch -exact $pkgconf::config_data(disabled_packages) $match]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2119 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2120 set pkgconf::config_data(disabled_packages) [lreplace $pkgconf::config_data(disabled_packages) $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2121 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2122 set index [lsearch -exact $pkgconf::config_data(enabled_packages) $match]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2123 if { $index == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2124 lappend config_data(enabled_packages) $match
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2125 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2126 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2127
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2128 # For each package where a version has been specified, validate this
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2129 # version and use it. Also make sure that the package is enabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2130 foreach pkg [array names pkgconf::version_args] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2131
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2132 set match [find_package $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2133 if { $match == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2134 fatal_error "Invalid argument --$pkg-version, package $pkg is not listed in $packages_file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2135 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2136 if { [lsearch -exact $pkgconf::package_data($match,versions) $pkgconf::version_args($pkg)] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2137 fatal_error "Invalid argument --$pkg-version=$pkgconf::version_args($pkg), that version is not available."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2138 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2139 set pkgconf::config_data($match,version) $pkgconf::version_args($pkg)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2140
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2141 set index [lsearch -exact $pkgconf::config_data(disabled_packages) $match]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2142 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2143 set pkgconf::config_data(disabled_packages) [lreplace $pkgconf::config_data(disabled_packages) $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2144 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2145 if { ($pkgconf::package_data($match,hardware) == 1) || ($pkgconf::package_data($match,default) == 0) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2146 set index [lsearch -exact $pkgconf::config_data(enabled_packages) $match]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2147 if { $index == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2148 lappend config_data(enabled_packages) $match
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2149 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2150 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2151 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2152
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2153 # For each compiler flag that has been specified explicitly on the command line,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2154 # store it in the configuration data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2155 foreach flag [array names pkgconf::cflags_args] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2156 set pkgconf::config_data(cflags,$flag) $pkgconf::cflags_args($flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2157 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2158 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2159
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2160 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2161 # {{{ reset_data()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2162
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2163 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2164 # This routine gets rid of all data. It can be used if the script is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2165 # switching from one configuration to a different one.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2166 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2167 proc pkgconf::reset_data { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2168
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2169 foreach i [array names pkgconf::config_data] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2170 unset pkgconf::config_data($i)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2171 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2172 foreach i [array names pkgconf::saved_data] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2173 unset pkgconf::saved_data($i)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2174 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2175 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2176
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2177 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2178
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2179 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2180 # {{{ GUI
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2181
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2182 # {{{ GUI variables
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2183
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2184 namespace eval pkgconf {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2185
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2186 namespace export gui
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2187
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2188 # Which editor should be used for fine-grained configuration options ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2189 # The VISUAL environment variable is the correct way to obtain this
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2190 # information on Unix operating systems. Windows machines do not
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2191 # seem to have an obvious equivalent.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2192 variable editor ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2193 if { [info exists ::env(VISUAL)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2194 set editor $::env(VISUAL)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2195 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2196
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2197 # The names of the pages in the notebook. These names are
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2198 # invented by the notebook widget.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2199 variable target_frame ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2200 variable packages_frame ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2201 variable options_frame ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2202 variable flags_frame ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2203 variable build_frame ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2204
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2205 # It is convenient to keep track of whether or not certain information
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2206 # has changed. This simplifies the task of deciding whether or not
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2207 # a page in the notebook needs redrawing.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2208 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2209 # Note: currently if the user makes a change and then undoes that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2210 # change the variable remains set. It is possible to get around this,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2211 # but that would require a bit more work.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2212 variable packages_page_needs_refresh 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2213 variable options_page_needs_refresh 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2214 variable build_page_needs_refresh 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2215
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2216 # Is it currently possible to do a build, or is it necessary to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2217 # update the build tree first.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2218 variable build_tree_needs_update 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2219
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2220 # Each notebook page is given its own array of global data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2221 array set target_page_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2222 array set packages_page_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2223 array set options_page_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2224 array set flags_page_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2225 array set build_page_data {};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2226
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2227 # The state of the build output window. There are two flags to consider:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2228 # whether the output window is visible or not; and whether the output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2229 # window is docked or not.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2230 variable output_docked 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2231 variable output_visible 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2232
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2233 # For gui mode, what is the name of the toplevel window ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2234 # If this script is embedded in a larger application then it can
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2235 # be made to run inside a frame in that window.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2236 namespace export set_toplevel_window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2237 variable toplevel ".pkgconf"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2238 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2239
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2240 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2241 # {{{ Effective Tcl support
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2242
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2243 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2244 # For now the intention is to allow this script to be run from a completely
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2245 # standard wish or tclsh interpreter, version 8.0 or later. This means it is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2246 # not possible to use extensions such as TIX or ITCL. However in the GUI
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2247 # it is still desirable to have a notebook widget, so here is an
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2248 # implementation in vanilla TK. The balloon widget from the same source
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2249 # is used as well.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2250 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2251 # The code derives from the book Effective Tcl/Tk programming by Mark
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2252 # Harrison and Michael McLennan. The actual source code was obtained from
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2253 # the Addison-Wesley web site and contains the following copyright.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2254 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2255 # This distribution contains examples from the "Effective Tcl/Tk
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2256 # Programming" book. You can study these examples as you read
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2257 # through the book, and you can steal the code for your own
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2258 # applications!
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2259 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2260 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2261 # The code is enclosed in a separate namespace. Also I have modified
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2262 # the code in a number of places to make it more general-purpose.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2263 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2264 namespace eval pkgconf::efftcl {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2265
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2266 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2267 # EXAMPLE: tabnotebook that can dial up pages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2268 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2269 # Effective Tcl/Tk Programming
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2270 # Mark Harrison, DSC Communications Corp.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2271 # Michael McLennan, Bell Labs Innovations for Lucent Technologies
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2272 # Addison-Wesley Professional Computing Series
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2273 # ======================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2274 # Copyright (c) 1996-1997 Lucent Technologies Inc. and Mark Harrison
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2275 # ======================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2276
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2277 # BLV fix: this script may execute in tclsh rather than in wish,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2278 # so the option command may not be available.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2279 if { [info command "option"] == "option"} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2280
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2281 # BLV: I do not like this background colour for the tabs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2282 if { 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2283 option add *Tabnotebook.tabs.background #666666 widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2284 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2285 option add *Tabnotebook.margin 6 widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2286 option add *Tabnotebook.tabColor #a6a6a6 widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2287 option add *Tabnotebook.activeTabColor #d9d9d9 widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2288 option add *Tabnotebook.tabFont \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2289 -*-helvetica-bold-r-normal--*-120-* widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2290 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2291
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2292 # BLV fix: replace global variables with per-namespace ones.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2293 array set tnInfo {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2294 array set bhInfo {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2295
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2296 proc tabnotebook_create {win} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2297 variable tnInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2298
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2299 frame $win -class Tabnotebook
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2300 canvas $win.tabs -highlightthickness 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2301 pack $win.tabs -fill x
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2302
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2303 notebook_create $win.notebook
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2304 pack $win.notebook -expand yes -fill both
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2305
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2306 set tnInfo($win-tabs) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2307 set tnInfo($win-current) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2308 set tnInfo($win-pending) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2309 return $win
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2310 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2311
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2312 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2313 # BLV fix: add three arguments, one specifying a function to be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2314 # invoked when the tab becomes visible, another for when the user
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2315 # leaves the tab, and a text string for balloon help. This function can
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2316 # be used to redraw a page if this is necessary due to changes in other
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2317 # pages, and an empty string can be used if desired. An empty string
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2318 # can also be used for the balloon help.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2319 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2320
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2321 proc tabnotebook_page {win name enterfn leavefn help} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2322 variable tnInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2323
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2324 set page [notebook_page $win.notebook $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2325 lappend tnInfo($win-tabs) $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2326 set tnInfo($name-enterfn) $enterfn
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2327 set tnInfo($name-leavefn) $leavefn
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2328 set tnInfo($name-help) $help
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2329
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2330 if {$tnInfo($win-pending) == ""} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2331 set id [after idle [list pkgconf::efftcl::tabnotebook_refresh $win]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2332 set tnInfo($win-pending) $id
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2333 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2334 return $page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2335 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2336
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2337 proc tabnotebook_refresh {win} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2338 variable tnInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2339
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2340 $win.tabs delete all
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2341
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2342 set margin [option get $win margin Margin]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2343 set color [option get $win tabColor Color]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2344 set font [option get $win tabFont Font]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2345 set x 2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2346 set maxh 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2347
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2348 foreach name $tnInfo($win-tabs) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2349 set id [$win.tabs create text \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2350 [expr $x+$margin+2] [expr -0.5*$margin] \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2351 -anchor sw -text $name -font $font \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2352 -tags [list $name]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2353
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2354 set bbox [$win.tabs bbox $id]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2355 set wd [expr [lindex $bbox 2]-[lindex $bbox 0]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2356 set ht [expr [lindex $bbox 3]-[lindex $bbox 1]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2357 if {$ht > $maxh} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2358 set maxh $ht
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2359 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2360
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2361 $win.tabs create polygon 0 0 $x 0 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2362 [expr $x+$margin] [expr -$ht-$margin] \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2363 [expr $x+$margin+$wd] [expr -$ht-$margin] \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2364 [expr $x+$wd+2*$margin] 0 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2365 2000 0 2000 10 0 10 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2366 -outline black -fill $color \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2367 -tags [list $name tab tab-$name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2368
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2369 $win.tabs raise $id
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2370
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2371 $win.tabs bind $name <ButtonPress-1> \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2372 [list pkgconf::efftcl::tabnotebook_display $win $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2373
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2374 # BLV - add support for balloon help
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2375 if { $tnInfo($name-help) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2376 balloonhelp_canvas_for $win.tabs $name $tnInfo($name-help)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2377 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2378 set x [expr $x+$wd+2*$margin]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2379 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2380 set height [expr $maxh+2*$margin]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2381 $win.tabs move all 0 $height
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2382
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2383 $win.tabs configure -width $x -height [expr $height+4]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2384
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2385 if {$tnInfo($win-current) != ""} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2386 tabnotebook_display $win $tnInfo($win-current)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2387 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2388 tabnotebook_display $win [lindex $tnInfo($win-tabs) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2389 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2390 set tnInfo($win-pending) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2391 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2392
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2393 proc tabnotebook_display {win name} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2394 variable tnInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2395 variable nbInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2396
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2397 # BLV: invoke appropriate callbacks in the current and new
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2398 # tabs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2399 set old_tab $tnInfo($win-current)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2400 if { ($old_tab != "") && ($tnInfo($old_tab-leavefn) != "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2401 $tnInfo($old_tab-leavefn) $nbInfo($win.notebook-page-$old_tab))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2402 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2403 if { $tnInfo($name-enterfn) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2404 $tnInfo($name-enterfn) $nbInfo($win.notebook-page-$name)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2405 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2406
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2407 notebook_display $win.notebook $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2408
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2409 set normal [option get $win tabColor Color]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2410 $win.tabs itemconfigure tab -fill $normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2411
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2412 set active [option get $win activeTabColor Color]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2413 $win.tabs itemconfigure tab-$name -fill $active
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2414 $win.tabs raise $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2415
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2416 set tnInfo($win-current) $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2417 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2418
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2419 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2420 # EXAMPLE: simple notebook that can dial up pages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2421 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2422 # Effective Tcl/Tk Programming
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2423 # Mark Harrison, DSC Communications Corp.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2424 # Michael McLennan, Bell Labs Innovations for Lucent Technologies
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2425 # Addison-Wesley Professional Computing Series
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2426 # ======================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2427 # Copyright (c) 1996-1997 Lucent Technologies Inc. and Mark Harrison
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2428 # ======================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2429
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2430 # BLV - again check for TK being present.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2431 if { [info command option] == "option" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2432 option add *Notebook.borderWidth 2 widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2433 option add *Notebook.relief sunken widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2434 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2435
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2436 # BLV: replace nbInfo global with a per-namespace variable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2437 array set nbInfo {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2438
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2439 proc notebook_create {win} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2440 variable nbInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2441
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2442 frame $win -class Notebook
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2443 pack propagate $win 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2444
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2445 set nbInfo($win-count) 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2446 set nbInfo($win-pages) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2447 set nbInfo($win-current) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2448 return $win
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2449 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2450
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2451 proc notebook_page {win name} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2452 variable nbInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2453
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2454 set page "$win.page[incr nbInfo($win-count)]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2455 lappend nbInfo($win-pages) $page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2456 set nbInfo($win-page-$name) $page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2457
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2458 frame $page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2459
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2460 if {$nbInfo($win-count) == 1} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2461 after idle [list pkgconf::efftcl::notebook_display $win $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2462 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2463
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2464 return $page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2465 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2466
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2467 proc notebook_display {win name} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2468 variable nbInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2469
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2470 set page ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2471 if {[info exists nbInfo($win-page-$name)]} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2472 set page $nbInfo($win-page-$name)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2473 } elseif {[winfo exists $win.page$name]} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2474 set page $win.page$name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2475 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2476 if {$page == ""} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2477 error "bad notebook page \"$name\""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2478 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2479
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2480 notebook_fix_size $win
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2481
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2482 if {$nbInfo($win-current) != ""} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2483 pack forget $nbInfo($win-current)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2484 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2485 pack $page -expand yes -fill both
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2486 set nbInfo($win-current) $page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2487 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2488
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2489 proc notebook_fix_size {win} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2490 variable nbInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2491
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2492 update idletasks
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2493
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2494 set maxw 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2495 set maxh 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2496 foreach page $nbInfo($win-pages) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2497 set w [winfo reqwidth $page]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2498 if {$w > $maxw} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2499 set maxw $w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2500 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2501 set h [winfo reqheight $page]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2502 if {$h > $maxh} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2503 set maxh $h
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2504 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2505 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2506 set bd [$win cget -borderwidth]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2507 set maxw [expr $maxw+2*$bd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2508 set maxh [expr $maxh+2*$bd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2509 $win configure -width $maxw -height $maxh
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2510 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2511
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2512 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2513 # EXAMPLE: use "wm" commands to manage a balloon help window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2514 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2515 # Effective Tcl/Tk Programming
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2516 # Mark Harrison, DSC Communications Corp.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2517 # Michael McLennan, Bell Labs Innovations for Lucent Technologies
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2518 # Addison-Wesley Professional Computing Series
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2519 # ======================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2520 # Copyright (c) 1996-1997 Lucent Technologies Inc. and Mark Harrison
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2521 # ======================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2522
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2523 # BLV fix: again this script may execute in tclsh rather than in wish.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2524 if { [info command "option"] == "option" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2525 option add *Balloonhelp*background white widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2526 option add *Balloonhelp*foreground black widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2527 option add *Balloonhelp.info.wrapLength 3i widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2528 option add *Balloonhelp.info.justify left widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2529 option add *Balloonhelp.info.font \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2530 -*-lucida-medium-r-normal-sans-*-120-* widgetDefault
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2531
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2532 toplevel .balloonhelp -class Balloonhelp \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2533 -background black -borderwidth 1 -relief flat
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2534
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2535 # BLV fix: I want to create the arrow image inline rather than
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2536 # read it in from a file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2537 image create bitmap arrow -data "\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2538 #define arrow_width 8
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2539 #define arrow_height 8
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2540 static unsigned char arrow_bits[] = {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2541 0x1f, 0x0f, 0x0f, 0x1f, 0x39, 0x70, 0x20, 0x00};
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2542 "
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2543 label .balloonhelp.arrow -anchor nw -image arrow
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2544
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2545 # label .balloonhelp.arrow -anchor nw \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2546 # -bitmap @[file join $env(EFFTCL_LIBRARY) images arrow.xbm]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2547 pack .balloonhelp.arrow -side left -fill y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2548
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2549 label .balloonhelp.info
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2550 pack .balloonhelp.info -side left -fill y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2551
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2552 wm overrideredirect .balloonhelp 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2553 wm withdraw .balloonhelp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2554 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2555
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2556 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2557 # USAGE: balloonhelp_for <win> <mesg>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2558 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2559 # Adds balloon help to the widget named <win>. Whenever the mouse
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2560 # pointer enters this widget and rests within it for a short delay,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2561 # a balloon help window will automatically appear showing the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2562 # help <mesg>.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2563 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2564
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2565 proc balloonhelp_for {win mesg} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2566 variable bhInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2567 set bhInfo($win) $mesg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2568
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2569 bind $win <Enter> {pkgconf::efftcl::balloonhelp_pending %W %W}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2570 bind $win <Leave> {pkgconf::efftcl::balloonhelp_cancel}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2571 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2572
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2573 # BLV: a variant that can be used for canvas items.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2574
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2575 proc balloonhelp_canvas_for { canvas id mesg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2576 variable bhInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2577 set bhInfo($canvas-$id) $mesg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2578
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2579 $canvas bind $id <Enter> [list pkgconf::efftcl::balloonhelp_pending $canvas $canvas-$id]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2580 $canvas bind $id <Leave> {pkgconf::efftcl::balloonhelp_cancel}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2581 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2582
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2583 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2584 # USAGE: balloonhelp_control <state>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2585 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2586 # Turns balloon help on/off for the entire application.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2587 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2588 set bhInfo(active) 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2589
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2590 proc balloonhelp_control {state} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2591 variable bhInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2592
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2593 if {$state} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2594 set bhInfo(active) 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2595 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2596 balloonhelp_cancel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2597 set bhInfo(active) 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2598 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2599 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2600
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2601 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2602 # USAGE: balloonhelp_pending <win>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2603 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2604 # Used internally to mark the point in time when a widget is first
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2605 # touched. Sets up an "after" event so that balloon help will appear
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2606 # if the mouse remains within the current window.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2607 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2608
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2609 # BLV - the first argument identifies the window, the second the help
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2610 # string.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2611 proc balloonhelp_pending {win id} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2612 variable bhInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2613
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2614 balloonhelp_cancel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2615 set bhInfo(pending) [after 1500 [list pkgconf::efftcl::balloonhelp_show $win $id]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2616 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2617
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2618 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2619 # USAGE: balloonhelp_cancel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2620 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2621 # Used internally to mark the point in time when the mouse pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2622 # leaves a widget. Cancels any pending balloon help requested earlier
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2623 # and hides the balloon help window, in case it is visible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2624 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2625 proc balloonhelp_cancel {} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2626 variable bhInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2627
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2628 if {[info exists bhInfo(pending)]} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2629 after cancel $bhInfo(pending)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2630 unset bhInfo(pending)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2631 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2632 wm withdraw .balloonhelp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2633 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2634
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2635 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2636 # USAGE: balloonhelp_show <win>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2637 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2638 # Used internally to display the balloon help window for the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2639 # specified <win>.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2640 # ----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2641
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2642 # BLV - the first argument identifies the window, the second the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2643 # help message.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2644
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2645 proc balloonhelp_show {win id} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2646 variable bhInfo
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2647
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2648 if {$bhInfo(active)} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2649 .balloonhelp.info configure -text $bhInfo($id)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2650
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2651 # BLV: switched from using window-relative positions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2652 # to mouse relative position.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2653 if { 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2654 set x [expr [winfo rootx $win]+10]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2655 set y [expr [winfo rooty $win]+[winfo height $win]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2656 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2657 set coords [winfo pointerxy $win]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2658 set x [expr [lindex $coords 0] + 15]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2659 set y [expr [lindex $coords 1] + 15]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2660 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2661 if { ($x >= 0) && ($y >= 0) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2662 wm geometry .balloonhelp +$x+$y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2663 wm deiconify .balloonhelp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2664 raise .balloonhelp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2665 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2666 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2667 unset bhInfo(pending)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2668 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2669
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2670 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2671
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2672 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2673 # {{{ standalone initialisation
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2674
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2675 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2676 # GUI Start-up. It is necessary to work out a few things about the operating
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2677 # environment.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2678 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2679 # 1) is this script being run via tclsh or via wish ? If the former then only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2680 # command line operation is possible. If the latter then a GUI environment
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2681 # can be provided as well.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2682 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2683 # 2) if TK is present, has it been extended with Tix ? If so use the standard
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2684 # TK color scheme etc., not the Tix variant.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2685 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2686 # 3) if TK is present, get rid of the top-level window.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2687 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2688 # If this command is not being run stand-alone then it is the responsibility
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2689 # of the calling code to take appropriate action, e.g. to enable gui mode
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2690 # and to set up the appropriate options.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2691 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2692
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2693 proc pkgconf::gui_standalone_init { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2694
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2695 variable gui_possible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2696
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2697 if { [info command tk] == "tk" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2698
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2699 # TK is loaded. For now allow GUI mode, but the actual decision
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2700 # depends on command line arguments.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2701 set gui_possible 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2702
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2703 # Get rid of the top-level window. Otherwise this might pop up if the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2704 # script performs a blocking operation too early.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2705 wm withdraw .
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2706
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2707 # If TIX is also present, prevent the TIX color scheme etc. from taking
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2708 # effect.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2709 if { [info command tix] == "tix" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2710 tix resetoptions TK TK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2711 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2712
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2713 # It is probably not a good idea to accept "send" messages. However
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2714 # setting the appname also affects option handling, which is more
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2715 # useful. Note that the send command is not available in all versions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2716 # of Tcl.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2717 if { [info command send] == "send" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2718 rename send {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2719 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2720 tk appname pkgconf
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2721
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2722 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2723
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2724 # TK is not loaded, so gui mode is not possible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2725 set gui_possible 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2726 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2727 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2728
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2729 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2730 # {{{ set toplevel window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2731
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2732 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2733 # Allow a containing program, if any, to specify the window in which
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2734 # this script should do its funky stuff. It is not possible to change
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2735 # this window while pkgconf is active, so if for any reason it is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2736 # necessary to change the toplevel window then the old one must be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2737 # destroyed first, the new name must be installed, and then there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2738 # must be a new call to pkgconf::gui to redraw the window.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2739 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2740
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2741 proc pkgconf::set_toplevel_window { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2742 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2743 set toplevel $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2744 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2745
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2746 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2747 # {{{ main GUI draw routine
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2748
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2749 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2750 # The main GUI code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2751 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2752 # The routine pkgconf::gui is responsible for creating the various windows.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2753 # These are as follows:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2754 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2755 # 1) a menu bar containing menus for File, Window and Help. Currently the only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2756 # entry in File is Exit, and the entries in Help are all disabled. The
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2757 # Window menu allows the output window to be hidden or shown.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2758 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2759 # 2) a notebook frame containing four pages:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2760 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2761 # a) target hardware. This lists all known target architectures,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2762 # and allows the user to select the appropriate one using a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2763 # set of radio buttons.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2764 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2765 # b) packages. This lists all known packages and the versions for
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2766 # each package. Unfortunately neither radio buttons nor checkbuttons
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2767 # provide entirely the right paradigm here, but checkbuttons are
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2768 # good enough.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2769 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2770 # c) an edit page. This allows the user to invoke a text editor for
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2771 # any of the fine-grained configuration headers.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2772 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2773 # d) a compiler flags page. This allows the user to manipulate the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2774 # compiler flags etc.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2775 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2776 # e) a build page. This allows the user to create the build tree and to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2777 # invoke make, make tests, make clean, etc. There is also an entry
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2778 # field to allow the install directory to be changed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2779 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2780 # 3) a label field along the bottom, which can be used by the various
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2781 # frames to display warning messages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2782 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2783 # 4) a separate frame to hold the outputs of builds. This can be either
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2784 # docked below the main frame, or it can be a separate toplevel window.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2785 # The build frame contains a number of buttons to allow the text
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2786 # screen to be cleared, removed from the display, docked/undocked,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2787 # or saved to a file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2788 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2789 # 5) the options database is consulted to decide whether the output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2790 # window should be docked or not by default.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2791 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2792 # 6) if there is a file ~/.pkgconfrc this file gets executed. It is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2793 # assumed to contain valid Tcl code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2794 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2795 # If this script is running inside a large application then there may be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2796 # a frame $toplevel_window already. If so this frame should be used.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2797 # Otherwise a separate toplevel window should be created, complete with
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2798 # menu bar.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2799 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2800
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2801 proc pkgconf::gui { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2802
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2803 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2804 if { [winfo exists $toplevel] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2805 create_toplevel_window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2806 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2807
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2808 # Now create a notebook, and add four pages to it. The names of these
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2809 # pages have to be stored in separate variables.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2810 variable target_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2811 variable packages_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2812 variable options_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2813 variable flags_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2814 variable build_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2815
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2816 efftcl::tabnotebook_create $toplevel.notebook
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2817 set target_frame [efftcl::tabnotebook_page $toplevel.notebook "Target" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2818 pkgconf::nbpage_targets_enter pkgconf::nbpage_targets_leave \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2819 "Select target hardware"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2820 set packages_frame [efftcl::tabnotebook_page $toplevel.notebook "Packages" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2821 pkgconf::nbpage_packages_enter pkgconf::nbpage_packages_leave \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2822 "Select desired packages"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2823 set options_frame [efftcl::tabnotebook_page $toplevel.notebook "Options" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2824 pkgconf::nbpage_options_enter pkgconf::nbpage_options_leave \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2825 "Edit configuration options"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2826 set flags_frame [efftcl::tabnotebook_page $toplevel.notebook "Flags" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2827 pkgconf::nbpage_flags_enter pkgconf::nbpage_flags_leave \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2828 "Edit compiler flags"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2829 set build_frame [efftcl::tabnotebook_page $toplevel.notebook "Build" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2830 pkgconf::nbpage_build_enter pkgconf::nbpage_build_leave \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2831 "Build this configuration"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2832
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2833 # By default the notebook is the widget that expands. If a build output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2834 # window is present instead then it is the output window that expands.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2835 pack $toplevel.notebook -side top -fill both -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2836
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2837 # Make sure that the message window exists, since some of the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2838 # notebook update routines refer to it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2839 label $toplevel.message -text "" -anchor w -relief raised -borderwidth 2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2840 pack $toplevel.message -side top -fill x
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2841
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2842 # Now create the notebook pages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2843 nbpage_targets_initialise $target_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2844 nbpage_packages_initialise $packages_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2845 nbpage_options_initialise $options_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2846 nbpage_flags_initialise $flags_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2847 nbpage_build_initialise $build_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2848
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2849 # Create the output window, but leave it hidden for now.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2850 frame $toplevel.output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2851 frame $toplevel.output.buttons
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2852 button $toplevel.output.buttons.hide -text "Hide" -command pkgconf::output_hide_window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2853 button $toplevel.output.buttons.undock -text "Undock" -command pkgconf::output_undock_window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2854 button $toplevel.output.buttons.clear -text "Clear" -command pkgconf::output_clear_window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2855 button $toplevel.output.buttons.save -text "Save..." -command pkgconf::output_save
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2856 pack $toplevel.output.buttons.hide \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2857 $toplevel.output.buttons.undock \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2858 $toplevel.output.buttons.clear \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2859 $toplevel.output.buttons.save -side left -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2860 pack $toplevel.output.buttons -side top -fill x
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2861 text $toplevel.output.text -wrap word -state disabled -yscrollcommand [list $toplevel.output.scroll set]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2862 pack $toplevel.output.text -side left -fill both -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2863 scrollbar $toplevel.output.scroll -orient vertical -command [list $toplevel.output.text yview]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2864 pack $toplevel.output.scroll -side right -fill y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2865
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2866 # Create a toplevel window matching the output frame, but leave it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2867 # hidden for now. Give it the same bindings as the toplevel window.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2868 toplevel .pkgconf_output -menu .menubar -class Pkgconf
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2869 wm withdraw .pkgconf_output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2870 wm title .pkgconf_output "pkgconf build output"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2871 wm protocol .pkgconf_output WM_DELETE_WINDOW { pkgconf::handle_exit }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2872
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2873 bind .pkgconf_output <Alt-q> { pkgconf::handle_exit }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2874 bind .pkgconf_output <Alt-f><KeyPress-x> { pkgconf::handle_exit }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2875
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2876 frame .pkgconf_output.buttons
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2877 button .pkgconf_output.buttons.hide -text "Hide" -command pkgconf::output_hide_window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2878 button .pkgconf_output.buttons.undock -text "Dock" -command pkgconf::output_undock_window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2879 button .pkgconf_output.buttons.clear -text "Clear" -command pkgconf::output_clear_window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2880 button .pkgconf_output.buttons.save -text "Save..." -command pkgconf::output_save
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2881 pack .pkgconf_output.buttons.hide \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2882 .pkgconf_output.buttons.undock \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2883 .pkgconf_output.buttons.clear \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2884 .pkgconf_output.buttons.save -side left -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2885 pack .pkgconf_output.buttons -side top -fill x
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2886 text .pkgconf_output.text -wrap word -state disabled -yscrollcommand { .pkgconf_output.scroll set }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2887 pack .pkgconf_output.text -side left -fill both -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2888 scrollbar .pkgconf_output.scroll -orient vertical -command { .pkgconf_output.text yview }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2889 pack .pkgconf_output.scroll -side right -fill y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2890
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2891 efftcl::balloonhelp_for $toplevel.output.buttons.hide \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2892 "Remove the build output window, until more output appears."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2893 efftcl::balloonhelp_for .pkgconf_output.buttons.hide \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2894 "Remove the build output window, until more output appears."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2895 efftcl::balloonhelp_for $toplevel.output.buttons.undock \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2896 "Make the build output appear in a separate window."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2897 efftcl::balloonhelp_for .pkgconf_output.buttons.undock \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2898 "Attach the build output to the main pkgconf window."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2899 efftcl::balloonhelp_for $toplevel.output.buttons.clear \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2900 "Remove all build output text."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2901 efftcl::balloonhelp_for .pkgconf_output.buttons.clear \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2902 "Remove all build output text."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2903 efftcl::balloonhelp_for $toplevel.output.buttons.save \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2904 "Save build output to a file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2905 efftcl::balloonhelp_for .pkgconf_output.buttons.save \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2906 "Save build output to a file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2907
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2908 # Consult the options database.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2909 variable output_docked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2910 option add "*docked" 1 startupFile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2911 set output_docked [option get $toplevel docked Pkgconf]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2912
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2913 # Look for a file ~/.pkgconfrc and execute it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2914 if { [file isfile [file join "~" ".pkgconfrc"]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2915 if { [namespace eval :: { catch { source [file join "~" ".pkgconfrc"] } message } ] != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2916 warning "The following error occurred while executing ~/.pkgconfrc: $message"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2917 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2918 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2919 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2920
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2921 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2922 # This routine creates the toplevel window, if pkgconf is running
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2923 # independently rather than inside a larger application.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2924
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2925 proc pkgconf::create_toplevel_window { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2926
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2927 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2928
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2929 # Start by creating the menubar. TK8's support for native menus is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2930 # used.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2931 menu .menubar -type menubar
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2932 menu .menubar.config -tearoff 0 -type normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2933 menu .menubar.edit -tearoff 0 -type normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2934 menu .menubar.view -tearoff 0 -type normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2935 menu .menubar.help -tearoff 0 -type normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2936
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2937 .menubar.config add command -label "Exit" -command pkgconf::handle_exit -underline 1 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2938 -accelerator "Alt+Q"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2939
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2940 .menubar.edit add command -label "Undo" -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2941 .menubar.edit add command -label "Redo" -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2942
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2943 .menubar.view add checkbutton -label "Show output" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2944 -variable pkgconf::output_visible -onvalue 1 -offvalue 0 \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2945 -command pkgconf::output_menu
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2946 .menubar.view add checkbutton -label "Balloon help" \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2947 -variable pkgconf::efftcl::bhInfo(active) -onvalue 1 -offvalue 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2948
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2949 .menubar.help add command -label "Help on pkgconf" -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2950 .menubar.help add command -label "Help on the system" -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2951 .menubar.help add command -label "Search" -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2952 .menubar.help add separator
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2953 .menubar.help add command -label "About pkgconf" -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2954
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2955 .menubar add cascade -menu .menubar.config -label "Configuration" -underline 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2956 .menubar add cascade -menu .menubar.edit -label "Edit" -underline 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2957 .menubar add cascade -menu .menubar.view -label "View" -underline 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2958 .menubar add cascade -menu .menubar.help -label "Help" -underline 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2959
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2960 # Create the toplevel window, giving it a menubar and a name,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2961 # and establish the accelerator binding.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2962 toplevel $toplevel -menu .menubar -class Pkgconf
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2963 wm title $toplevel pkgconf
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2964 bind $toplevel <Alt-q> { pkgconf::handle_exit }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2965 wm protocol $toplevel WM_DELETE_WINDOW { pkgconf::handle_exit }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2966
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2967 # Although there is a Configuration menu instead of a file menu, it is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2968 # desirable to support alt-f-x as a reasonably standard way of exiting
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2969 # the program.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2970 bind $toplevel <Alt-f><KeyPress-x> { pkgconf::handle_exit }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2971 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2972
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2973 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2974 # This routine gets invoked for exit handling: when the user invokes the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2975 # exit entry on the file menu; or when the alt-q accelerator is used; or
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2976 # when a window delete request is received. For now the code just exits,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2977 # but it might be an idea to offer to save configuration changes if any.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2978 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2979 proc pkgconf::handle_exit { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2980 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2981 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2982
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2983 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2984 # {{{ Notebook pages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2985
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2986 # {{{ Targets page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2987
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2988 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2989 # The targets page. This allows the user to select the target architecture,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2990 # platform, and startup. The range of available target architectures cannot
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2991 # change while the program is running, so this window is actually fixed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2992 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2993
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2994 proc pkgconf::nbpage_targets_initialise { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2995
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2996 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2997 variable known_targets
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2998 variable target_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2999 variable target_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3000
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3001 # I need a variable that can be associated with the radiobuttons and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3002 # identifies the selected target uniquely. It is not really
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3003 # possible to do this with the three variables in the config data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3004 # directly.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3005 set target_page_data(selection) [list $config_data(target) $config_data(platform) $config_data(startup)]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3006
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3007 # Conceivably the number of targets could be larger than can fit
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3008 # conveniently on to one screen, so it is desirable use a scrollable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3009 # form. Start by creating a scrollbar, a canvas, and a frame within
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3010 # that canvas, and set up a standard resize callback. The canvas
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3011 # starts off small, but expands as necessary. The actual size will
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3012 # therefore be determined by whichever page does not have a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3013 # vertical scrollbar, typically the build page.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3014 scrollbar $win.scrollbar -command "$win.viewport yview" -orient vertical
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3015 pack $win.scrollbar -side right -fill y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3016
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3017 canvas $win.viewport -height 10m -yscrollcommand "$win.scrollbar set"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3018 pack $win.viewport -fill both -expand 1 -padx 20 -pady 20
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3019
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3020 frame $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3021 $win.viewport create window 0 0 -anchor nw -window $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3022
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3023 bind $win.viewport.form <Configure> "pkgconf::nbpage_form_resized $win"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3024
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3025 # Now fill in the form with details of all the targets.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3026 # These are arranged in a simple grid.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3027 set form $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3028 set row 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3029
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3030 foreach target $known_targets {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3031
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3032 label $form.arch-$row -text "Target [get_target_alias $target]" -anchor w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3033 grid $form.arch-$row -row $row -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3034 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3035
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3036 foreach platform $target_data($target,known_platforms) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3037 foreach startup $target_data($target,$platform,startup) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3038
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3039 label $form.platform-$row -text " Platform [get_platform_alias $target $platform]," -anchor w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3040 grid $form.platform-$row -row $row -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3041 label $form.startup-$row -text "$startup startup" -anchor w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3042 grid $form.startup-$row -row $row -column 1 -sticky w -ipadx 5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3043 radiobutton $form.button-$row -variable pkgconf::target_page_data(selection) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3044 -value [list $target $platform $startup] \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3045 -command pkgconf::clear_status_line
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3046 grid $form.button-$row -row $row -column 2 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3047 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3048 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3049 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3050 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3051 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3052
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3053 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3054 # The enter routine gets invoked when the user switches to the targets tab,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3055 # and also during start-up since the targets tab is the first one. It is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3056 # responsible for keeping track of the initial target selection, so that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3057 # when the user switches to a different tab it is possible to know whether
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3058 # or not the target has actually changed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3059 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3060 # As a useful side effect, the routine updates the status line.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3061 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3062 proc pkgconf::nbpage_targets_enter { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3063
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3064 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3065 variable target_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3066
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3067 set target_page_data(initial_selection) $target_page_data(selection)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3068
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3069 if { ($config_data(target) == "") || ($config_data(platform) == "") || ($config_data(startup) == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3070 set_status_line "Please select a target system."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3071 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3072 clear_status_line
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3073 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3074 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3075
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3076 proc pkgconf::nbpage_targets_leave { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3077
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3078 variable target_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3079
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3080 if { $target_page_data(selection) != $target_page_data(initial_selection) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3081 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3082 variable build_tree_needs_update
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3083
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3084 set config_data(target) [lindex $target_page_data(selection) 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3085 set config_data(platform) [lindex $target_page_data(selection) 1]
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
3086 set config_data(base_platform) [get_base_platform $config_data(target) $config_data(platform)]
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3087 set config_data(startup) [lindex $target_page_data(selection) 2]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3088 set build_tree_needs_update 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3089
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3090 # A change of target has implications for the compiler flags, which
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3091 # must be handled immediately. The user may not go into the flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3092 # tab so the changes cannot be done in the flags tab enter/leave
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3093 # routines.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3094 update_compiler_flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3095 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3096 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3097
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3098 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3099 # This routine take care of resize operations. Whenever the size
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3100 # of the form changes the canvas' scroll region needs to be adjusted.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3101 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3102 # Note that this code is also used for the packages page.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3103 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3104 proc pkgconf::nbpage_form_resized { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3105
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3106 set bbox [$win.viewport bbox all]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3107 set old_bbox [$win.viewport cget -scrollregion]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3108 set width [winfo width $win.viewport.form]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3109 set old_width [$win.viewport cget -width]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3110 if { ("$bbox" != "$old_bbox") || ($width != $old_width) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3111 $win.viewport configure -width $width -scrollregion $bbox
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3112 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3113 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3114
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3115 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3116 # {{{ Packages page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3117
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3118 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3119 # The packages page. This is mostly similar to the targets page.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3120 # It is necessary to provide a mechanism for disabling packages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3121 # It is also necessary to worry about changes to the target architecture.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3122 # The initialise() routine takes care of most of these things.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3123
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3124 proc pkgconf::nbpage_packages_initialise { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3125
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3126 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3127 variable known_packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3128 variable package_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3129 variable target_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3130 variable packages_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3131
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3132 # Start by storing details of the target that is currently
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3133 # being displayed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3134 set packages_page_data(current_target) $config_data(target)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3135 set packages_page_data(current_platform) $config_data(platform)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3136
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3137 # Typically the number of packages will be larger than can fit
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3138 # conveniently on to one screen, so it is desirable use a scrollable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3139 # form. Start by creating a scrollbar, a canvas, and a frame within
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3140 # that canvas, and set up a standard resize callback. The canvas
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3141 # starts of small, but expands as necessary. The actual size will
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3142 # therefore be determined by whichever page does not have a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3143 # vertical scrollbar, typically the build page.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3144 scrollbar $win.scrollbar -command "$win.viewport yview" -orient vertical
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3145 pack $win.scrollbar -side right -fill y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3146
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3147 canvas $win.viewport -height 10m -yscrollcommand "$win.scrollbar set"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3148 pack $win.viewport -fill both -expand 1 -padx 20 -pady 20
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3149
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3150 frame $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3151 $win.viewport create window 0 0 -anchor nw -window $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3152
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3153 bind $win.viewport.form <Configure> "pkgconf::nbpage_form_resized $win"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3154
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3155 # Now fill in the form with details of all the packages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3156 # These are arranged in a simple grid.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3157 set form $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3158 set row 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3159
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3160 # Now handle the packages themselves. Each package can be in one
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3161 # of the following states:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3162 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3163 # 1) a hardware package is enabled by default if it is specified
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3164 # for the current target or platform, disabled otherwise.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3165 # However the user should be able to explicitly enable or
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3166 # disable it. This is handled by config_data(enabled_packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3167 # and config_data(disabled_packages).
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3168 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3169 # 2) a non-hardware package may be enabled or disabled by default,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3170 # but the user can change this. Again this is handled by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3171 # enabled_packages and disabled_packages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3172 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3173 # It is convenient to cache the list of target and platform specific
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3174 # packages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3175 set target_packages ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3176 set platform_packages ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3177 if { $config_data(target) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3178 set target_packages $target_data($config_data(target),packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3179 if { $config_data(platform) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3180 set platform_packages $target_data($config_data(target),$config_data(platform),packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3181 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3182 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3183 foreach pkg $known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3184
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3185 # What is the current version of each package ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3186 set current_version ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3187
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3188 if { $package_data($pkg,hardware) != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3189 if { ([lsearch -exact $target_packages $pkg] != -1) || ([lsearch -exact $platform_packages $pkg] != -1)} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3190 set current_version $config_data($pkg,version)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3191 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3192 } elseif { $package_data($pkg,default) != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3193 set current_version $config_data($pkg,version)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3194 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3195
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3196 if { [lsearch -exact $config_data(enabled_packages) $pkg] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3197 set current_version $config_data($pkg,version)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3198 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3199 if { [lsearch -exact $config_data(disabled_packages) $pkg] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3200 set current_version ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3201 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3202
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3203 # Store the current version, so that it is easier to figure out what
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3204 # has changed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3205 set packages_page_data($pkg,version) $current_version
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3206
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3207 label $form.label-$row -text "[get_package_alias $pkg]:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3208 grid $form.label-$row -row $row -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3209 foreach version $package_data($pkg,versions) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3210 label $form.version-$row -text "Version $version"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3211 grid $form.version-$row -row $row -column 1 -sticky w -ipady 5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3212
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3213 radiobutton $form.button-$row -variable pkgconf::packages_page_data($pkg,version) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3214 -value $version -command [list pkgconf::nbpage_packages_change $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3215 grid $form.button-$row -row $row -column 2 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3216 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3217 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3218 label $form.version-$row -text "Disable"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3219 grid $form.version-$row -row $row -column 1 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3220 radiobutton $form.button-$row -variable pkgconf::packages_page_data($pkg,version) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3221 -value "" -command [list pkgconf::nbpage_packages_change $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3222 grid $form.button-$row -row $row -column 2 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3223 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3224 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3225 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3226
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3227 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3228 # This routine gets invoked whenever there is a change to one of the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3229 # packages. It sets a flag indicating that the build tree is out of data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3230 # It will also update the appropriate config_data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3231 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3232 proc pkgconf::nbpage_packages_change { pkg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3233
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3234 variable build_tree_needs_update
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3235 set build_tree_needs_update 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3236
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3237 variable packages_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3238 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3239
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3240 set version $packages_page_data($pkg,version)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3241 if { $version == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3242
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3243 # This package is being explicitly disabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3244 set index [lsearch -exact $config_data(enabled_packages) $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3245 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3246 set config_data(enabled_packages) [lreplace $config_data(enabled_packages) $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3247 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3248
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3249 set index [lsearch -exact $config_data(disabled_packages) $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3250 if { $index == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3251 lappend config_data(disabled_packages) $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3252 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3253 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3254
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3255 # A package version is being changed, possibly causing it to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3256 # be enabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3257 set config_data($pkg,version) $version
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3258
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3259 set index [lsearch -exact $config_data(disabled_packages) $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3260 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3261 set config_data(disabled_packages) [lreplace $config_data(disabled_packages) $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3262 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3263
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3264 set index [lsearch -exact $config_data(enabled_packages) $pkg]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3265 if { $index == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3266 lappend config_data(enabled_packages) $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3267 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3268 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3269 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3270
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3271 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3272 # The packages page needs to be redrawn every time a different target is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3273 # selected, so that the user can select which version of the HAL packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3274 # should be used. The redraw can be achieved by deleting the existing
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3275 # contents of the window and re-invoking the initialise function.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3276
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3277 proc pkgconf::nbpage_packages_enter { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3278
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3279 variable packages_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3280 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3281
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3282 if { ($packages_page_data(current_target) != $config_data(target)) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3283 ($packages_page_data(current_platform) != $config_data(platform)) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3284
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3285 foreach subwin [winfo children $win] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3286 destroy $subwin
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3287 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3288 nbpage_packages_initialise $win
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3289 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3290
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3291 # If the target architecture is not yet known, remind the user.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3292 if { ($config_data(target) == "") || ($config_data(platform) == "") || ($config_data(startup) == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3293 set_status_line "Please select a target system."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3294 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3295 clear_status_line
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3296 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3297 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3298
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3299 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3300 # Currently this code does nothing, instead it is left to the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3301 # nbpage_packages_change routine above to update the appropriate
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3302 # global information. This is unfortunate in that if the user
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3303 # makes a mistake and undoes it pkgconf still thinks that the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3304 # build tree is out of date.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3305
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3306 proc pkgconf::nbpage_packages_leave { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3307 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3308
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3309 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3310 # {{{ Options page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3311
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3312 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3313 # The options page. This consists of two frame arranged vertically.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3314 # The top frame allows the user to select the editor to use, which is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3315 # initialised from the VISUAL environment variable. The bottom frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3316 # is another scrollable canvas allowing the user to select a header
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3317 # file to edit.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3318 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3319 # A number of special cases have to be allowed for. If there is no
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3320 # text editor then all the buttons to edit a text file have to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3321 # be disabled. If there is no pkgconf directory in the build tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3322 # yet then there will be no files to edit. Even if there is an
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3323 # an pkgconf directory it may not contain all the files it is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3324 # supposed to, especially if the build tree is not up to date.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3325 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3326
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3327 proc pkgconf::nbpage_options_initialise { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3328
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3329 # Start with the top frame. This contains a label, an entry field,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3330 # and a button that invokes a file selector.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3331 # NOTE: these borderwidths should not be hardwired.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3332 variable editor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3333 frame $win.top -relief raised -borderwidth 2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3334 label $win.top.label -text "Editor:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3335 entry $win.top.entry -relief sunken -borderwidth 2 -textvariable pkgconf::editor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3336 button $win.top.button -text "Browse..." -command pkgconf::nbpage_options_browse
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3337 pack $win.top.button -side right
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3338 pack $win.top.entry -side right -fill x -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3339 pack $win.top.label -side left
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3340 pack $win.top -side top -fill x
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3341
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3342 efftcl::balloonhelp_for $win.top.entry "The text editor that should be used."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3343 efftcl::balloonhelp_for $win.top.button "Select the text editor that should be used."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3344
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3345 # The entry widget does not support a command callback when
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3346 # a string has been typed in, so it is necessary to use the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3347 # trace facility instead to enable or disable the buttons.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3348 # Note that this routine may get invoked from the update routine,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3349 # so it is necessary to clean up the old trace.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3350 trace vdelete pkgconf::editor w pkgconf::nbpage_options_editor_changed
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3351 trace variable pkgconf::editor w pkgconf::nbpage_options_editor_changed
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3352
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3353 # At this point there are now button widgets in this page. The
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3354 # nbpage_options_editor_changed routine used this list.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3355 variable options_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3356 set options_page_data(buttons) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3357
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3358 # Now check for editable files in the pkgconf directory.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3359 # Three of the files, makefile, pkgconf.mak and system.h are generated
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3360 # and should not be edited by users. There may also be various .stamp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3361 # files used by the build system.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3362 variable build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3363 set files ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3364 foreach filename [glob -nocomplain [file join $build_tree "pkgconf" "*"]] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3365 set filename [file tail $filename]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3366 if { [string match {*.stamp} $filename] } continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3367 if { ($filename == "makefile") || ($filename == "pkgconf.mak") || ($filename == "system.h") } continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3368 lappend files $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3369 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3370
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3371 if { $files == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3372
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3373 # OK, just display a message. There is likely to be an appropriate
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3374 # warning in the message frame at the bottom of the window already.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3375 label $win.message -text "There are no configuration files to edit."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3376 pack $win.message -fill both -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3377
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3378 # A valid configuration always has a makevars file to edit, so the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3379 # implication is that the build tree is out of date. It probably
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3380 # makes sense to set the relevant flag here.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3381 variable build_tree_needs_update
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3382 set build_tree_needs_update 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3383 return
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3384 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3385
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3386 # The editable files are displayed in a scrollable frame, just
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3387 # like the targets and packages pages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3388 scrollbar $win.scrollbar -command "$win.viewport yview" -orient vertical
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3389 pack $win.scrollbar -side right -fill y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3390
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3391 canvas $win.viewport -height 10m -yscrollcommand "$win.scrollbar set"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3392 pack $win.viewport -fill both -expand 1 -padx 20 -pady 20
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3393
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3394 frame $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3395 $win.viewport create window 0 0 -anchor nw -window $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3396
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3397 bind $win.viewport.form <Configure> "pkgconf::nbpage_form_resized $win"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3398
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3399 # Now fill in the form with all the buttons.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3400 set form $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3401 set row 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3402
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3403 foreach file $files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3404
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3405 button $form.button-$row -text "<pkgconf/$file>" -anchor w \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3406 -command [list pkgconf::nbpage_options_edit $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3407 grid $form.button-$row -row $row -column 0 -sticky we -padx 10 -pady 5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3408 label $form.label-$row -anchor w -text "Edit [file join $build_tree pkgconf $file]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3409 grid $form.label-$row -row $row -column 1 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3410
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3411 efftcl::balloonhelp_for $form.button-$row "Edit this configuration file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3412 lappend options_page_data(buttons) $form.button-$row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3413 if { $editor == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3414 $form.button-$row configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3415 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3416 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3417 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3418 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3419
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3420 # The options page needs to be redrawn every time the build tree is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3421 # regenerated, since this may result in a different set of editable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3422 # configuration header files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3423
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3424 proc pkgconf::nbpage_options_enter { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3425
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3426 variable options_page_needs_refresh
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3427
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3428 if { $options_page_needs_refresh != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3429 set options_page_needs_refresh 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3430 foreach subwin [winfo children $win] { destroy $subwin }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3431 nbpage_options_initialise $win
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3432 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3433
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3434 # It is also desirable to display some warnings.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3435 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3436 variable build_tree_needs_update
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3437 variable editor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3438 variable options_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3439
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3440 set options_page_data(no_editor) 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3441
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3442 if { ($config_data(target) == "") || ($config_data(platform) == "") || ($config_data(startup) == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3443 set_status_line "The target hardware has not yet been selected."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3444 } elseif { $build_tree_needs_update } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3445 set_status_line "The build tree needs updating."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3446 } elseif { $editor == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3447 set options_page_data(no_editor) 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3448 set_status_line "No text editor has been defined yet."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3449 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3450 clear_status_line
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3451 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3452 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3453
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3454 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3455 # There are no obvious actions to be taken if the user switches to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3456 # a different tab. Even if the user has invoked the editor on a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3457 # configuration file there is no guarantee that anything has actually
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3458 # changed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3459 proc pkgconf::nbpage_options_leave { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3460 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3461
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3462 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3463 # This procedure allows the user to select a text editor. It gets invoked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3464 # from the browse button.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3465 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3466 # NOTE: on windows it might be desirable to specify a .exe extension as
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3467 # the type, but even that is optional under NT.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3468 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3469 proc pkgconf::nbpage_options_browse { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3470
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3471 variable editor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3472 variable build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3473 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3474
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3475 set filename [tk_getOpenFile -initialdir $build_tree -parent $toplevel -title "Select text editor"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3476 if { $filename == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3477 return
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3478 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3479 set editor $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3480 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3481
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3482 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3483 # This procedure is invoked whenever the editor variable is changed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3484 # Its purpose is to enable or disable the buttons for the various
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3485 # configuration headers.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3486 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3487 # The code does not actually check whether the current editor value corresponds
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3488 # to a valid executable. It is just about possible to check for an existing
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3489 # file somewhere in the path, but that is expensive and there is still no
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3490 # guarantee that the file is a valid executable.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3491 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3492
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3493 proc pkgconf::nbpage_options_editor_changed { name1 name2 mode } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3494
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3495 variable editor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3496 variable options_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3497 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3498
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3499 if { $editor == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3500
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3501 foreach button $options_page_data(buttons) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3502 $button configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3503 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3504 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3505 if { $options_page_data(no_editor) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3506 $toplevel.message configure -text ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3507 set options_page_data(no_editor) 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3508 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3509 foreach button $options_page_data(buttons) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3510 $button configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3511 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3512 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3513 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3514
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3515 # This routine gets invoked to edit a header file. It simply
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3516 # executes the current editor in the background. No attempt is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3517 # made to wait for command completion, to prevent a single file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3518 # from being edited multiple times, or anything like that.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3519
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3520 proc pkgconf::nbpage_options_edit { filename } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3521
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3522 variable editor
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3523 variable build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3524
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3525 run_command pkgconf::nbpage_options_ignore $editor [file join $build_tree pkgconf $filename]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3526 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3527
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3528 # This callback gets invoked from the run_command code whenever the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3529 # editor sends output. In the case of emacsclient such output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3530 # is the unfortunate string "Waiting for Emacs...Done". In the case
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3531 # of xterm -e vi there is no output.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3532 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3533 # On the whole it is better to ignore the output. This may mean
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3534 # that warning or error messages get discared.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3535
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3536 proc pkgconf::nbpage_options_ignore { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3537
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3538 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3539
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3540 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3541 # {{{ Flags page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3542
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3543 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3544 # The flags page. This consists of a big grid, arranged vertically into
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3545 # five separate categories of flags. Within each category there is a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3546 # label identifying the category and four separate entry fields for the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3547 # various variables.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3548 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3549 # The data for a given flag can come from two sources. The default value
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3550 # comes from the targets file, and in most cases this will be an empty
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3551 # string. Alternatively the user can overwrite it, e.g. as a command
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3552 # line argument or in the GUI, in which case the changed information
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3553 # gets saved in the pkgconf save file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3554 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3555
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3556 proc pkgconf::nbpage_flags_initialise { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3557
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3558 variable flags_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3559 variable known_compiler_flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3560 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3561
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3562 # Start by creating array entries for all the known compiler flags.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3563 if { ($config_data(target) != "") && ($config_data(platform) != "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3564 foreach flag $known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3565 set flags_page_data($flag) [get_platform_cflags $config_data(target) $config_data(platform) $flag]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3566 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3567 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3568 foreach flag $known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3569 set flags_page_data($flag) ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3570 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3571 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3572
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3573 # If the current configuration information contains any compiler flags,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3574 # update the appropriate variable.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3575 foreach flag $known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3576 if { [info exists config_data(cflags,$flag)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3577 set flags_page_data($flag) $config_data(cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3578 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3579 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3580
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3581 # Keep track of which target and platform the current settings correspond to.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3582 set flags_page_data(target) $config_data(target)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3583 set flags_page_data(platform) $config_data(platform)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3584
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3585 # Time to actually create the interface.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3586 # Again this tab uses a frame inside a scrolled canvas.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3587 scrollbar $win.scrollbar -command "$win.viewport yview" -orient vertical
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3588 pack $win.scrollbar -side right -fill y
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3589
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3590 canvas $win.viewport -height 10m -yscrollcommand "$win.scrollbar set"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3591 pack $win.viewport -fill both -expand 1 -padx 20 -pady 20
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3592
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3593 frame $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3594 $win.viewport create window 0 0 -anchor nw -window $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3595
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3596 bind $win.viewport.form <Configure> "pkgconf::nbpage_form_resized $win"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3597
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3598 # Now fill in the form with details of all the flags.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3599 # These are arranged in a simple grid.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3600 set form $win.viewport.form
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3601 set row 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3602
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3603 grid columnconfigure $form 1 -weight 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3604 label $form.archflags -text "Architecture-related compiler flags"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3605 grid $form.archflags -row $row -column 0 -columnspan 2 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3606 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3607 foreach flag { ARCHFLAGS CARCHFLAGS CXXARCHFLAGS LDARCHFLAGS } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3608 label $form.label-$flag -text $flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3609 grid $form.label-$flag -row $row -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3610 entry $form.entry-$flag -textvariable pkgconf::flags_page_data($flag) -width 60
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3611 grid $form.entry-$flag -row $row -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3612 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3613 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3614
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3615 label $form.errflags -text "Warnings and errors"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3616 grid $form.errflags -row $row -column 0 -columnspan 2 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3617 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3618 foreach flag { ERRFLAGS CERRFLAGS CXXERRFLAGS LDERRFLAGS } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3619 label $form.label-$flag -text $flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3620 grid $form.label-$flag -row $row -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3621 entry $form.entry-$flag -textvariable pkgconf::flags_page_data($flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3622 grid $form.entry-$flag -row $row -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3623 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3624 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3625
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3626 label $form.dbgflags -text "Debugging and optimization levels"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3627 grid $form.dbgflags -row $row -column 0 -columnspan 2 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3628 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3629 foreach flag { DBGFLAGS CDBGFLAGS CXXDBGFLAGS LDDBGFLAGS } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3630 label $form.label-$flag -text $flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3631 grid $form.label-$flag -row $row -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3632 entry $form.entry-$flag -textvariable pkgconf::flags_page_data($flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3633 grid $form.entry-$flag -row $row -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3634 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3635 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3636
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3637 label $form.langflags -text "Language-related flags"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3638 grid $form.langflags -row $row -column 0 -columnspan 2 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3639 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3640 foreach flag { LANGFLAGS CLANGFLAGS CXXLANGFLAGS LDLANGFLAGS } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3641 label $form.label-$flag -text $flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3642 grid $form.label-$flag -row $row -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3643 entry $form.entry-$flag -textvariable pkgconf::flags_page_data($flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3644 grid $form.entry-$flag -row $row -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3645 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3646 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3647
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3648 label $form.extraflags -text "Miscellaneous"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3649 grid $form.extraflags -row $row -column 0 -columnspan 2 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3650 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3651 foreach flag { EXTRAFLAGS CEXTRAFLAGS CXXEXTRAFLAGS LDEXTRAFLAGS } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3652 label $form.label-$flag -text $flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3653 grid $form.label-$flag -row $row -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3654 entry $form.entry-$flag -textvariable pkgconf::flags_page_data($flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3655 grid $form.entry-$flag -row $row -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3656 incr row
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3657 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3658 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3659
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3660 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3661 # There is nothing to be done on entry to this tab. If the target architecture
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3662 # has changed then there will have been a separate call to update_compiler_flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3663 # below. This cannot be delayed until the enter call because there is no
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3664 # guarantee that the user will switch to the flags tab after changing target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3665 # architecture.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3666 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3667 proc pkgconf::nbpage_flags_enter { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3668 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3669
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3670 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3671 # On leaving the page it is necessary to check for any flags that are
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3672 # different from the default settings, and update the config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3673 # settings appropriately.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3674 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3675 proc pkgconf::nbpage_flags_leave { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3676
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3677 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3678 variable flags_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3679 variable known_compiler_flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3680
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3681 if { ($config_data(target) == "") && ($config_data(platform) == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3682
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3683 # If no target has been defined then it is not possible to compare
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3684 # with the default setting. All that can be done is set or clear
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3685 # the current config setting.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3686 foreach flag $known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3687 if { $flags_page_data($flag) == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3688 if { [info exists config_data(cflags,$flag) ] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3689 unset config_data(cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3690 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3691 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3692 set config_data(cflags,$flag) $flags_page_data($flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3693 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3694 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3695 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3696
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3697 # For any flag which currently has default settings,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3698 # clear the appropriate config_data() entry. Otherwise store
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3699 # the flag data.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3700 foreach flag $known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3701
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3702 if { $flags_page_data($flag) == [get_platform_cflags $config_data(target) $config_data(platform) $flag] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3703 if { [info exists config_data(cflags,$flag) ] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3704 unset config_data(cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3705 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3706 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3707 set config_data(cflags,$flag) $flags_page_data($flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3708 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3709 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3710 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3711 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3712
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3713 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3714 # When the target architecture changes it is necessary to update the compiler
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3715 # flags appropriately. Basically any flag that was defined by the old target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3716 # has to be cleared, and then any flag defined for the new target has to be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3717 # installed. There is a risk that some user changes will be lost, but there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3718 # is no easy solution to this.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3719 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3720 proc pkgconf::update_compiler_flags { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3721
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3722 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3723 variable flags_page_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3724 variable known_compiler_flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3725
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3726 foreach flag $known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3727
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3728 if { ($flags_page_data(target) == "") || ($flags_page_data(platform) == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3729 set old_default_flag ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3730 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3731 set old_default_flag [get_platform_cflags $flags_page_data(target) $flags_page_data(platform) $flag]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3732 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3733 set new_default_flag [get_platform_cflags $config_data(target) $config_data(platform) $flag]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3734
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3735 # If there is no change to the default flags leave things well alone.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3736 # That way user changes will not get overwritten.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3737 if { $old_default_flag == $new_default_flag } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3738 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3739 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3740
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3741 # Otherwise always install the new settings, which may mean eliminating
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3742 # user changes.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3743 set flags_page_data($flag) $new_default_flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3744 if { [info exists config_data(cflags,$flag)] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3745 unset config_data(cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3746 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3747 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3748
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3749 set flags_page_data(target) $config_data(target)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3750 set flags_page_data(platform) $config_data(platform)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3751 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3752
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3753 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3754 # {{{ Build page
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3755
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3756 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3757 # The build page. This consists of the following buttons, gridded,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3758 # with explanatory text.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3759 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3760 # 1) Update build tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3761 # 2) Make
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3762 # 3) Make tests
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3763 # 4) Make misc
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3764 # 5) Make clean
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3765 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3766 # The make buttons should be disabled if the build tree is out of date.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3767 # This is controlled by the variable build_tree_needs_update, which
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3768 # may have got set during the options page creation. An additional
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3769 # check that needs to be made here is whether or not the makefile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3770 # exists. If the current config data does not specify the target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3771 # then even the "Update tree" button must be disabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3772 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3773 # Whenever a make is in progress all the buttons should be disabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3774 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3775
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3776 proc pkgconf::nbpage_build_initialise { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3777
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3778 # Update the variable build_tree_needs_update if there is no
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3779 # makefile in the build tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3780 variable build_tree_needs_update
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3781 variable component_repository
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3782 variable build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3783 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3784
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3785 if { [file isfile [file join $build_tree makefile]] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3786 set build_tree_needs_update 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3787 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3788 if { ($config_data(target) == "") || ($config_data(platform) == "") || ($config_data(startup) == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3789 set build_tree_needs_update 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3790 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3791
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3792 # Create three labels identifying the various trees.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3793 frame $win.top
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3794 label $win.top.source_label -anchor w -text "Component repository:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3795 label $win.top.source_value -anchor w -text "$component_repository"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3796 label $win.top.build_label -anchor w -text "Current build tree:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3797 label $win.top.build_value -anchor w -text "$build_tree"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3798 label $win.top.install_label -anchor w -text "Current install tree:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3799 label $win.top.install_value -anchor w -text "$config_data(prefix)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3800 grid $win.top.source_label -row 0 -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3801 grid $win.top.source_value -row 0 -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3802 grid $win.top.build_label -row 1 -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3803 grid $win.top.build_value -row 1 -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3804 grid $win.top.install_label -row 2 -column 0 -sticky w
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3805 grid $win.top.install_value -row 2 -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3806 grid columnconfigure $win.top 1 -weight 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3807 pack $win.top -side top -fill x -padx 5 -pady 5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3808
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3809 # Create a grid with the four buttons and with explanatory
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3810 # messages.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3811 frame $win.grid
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3812 pack $win.grid -fill both -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3813 set win $win.grid
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3814
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3815 button $win.tree -text "Update tree" -command pkgconf::nbpage_build_update_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3816 button $win.make -text "Make" -command pkgconf::nbpage_build_make
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3817 button $win.tests -text "Make tests" -command pkgconf::nbpage_build_tests
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3818 button $win.misc -text "Make misc" -command pkgconf::nbpage_build_misc
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3819 button $win.clean -text "Make clean" -command pkgconf::nbpage_build_clean
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3820
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3821 if { ($config_data(target) == "" ) || ($config_data(platform) == "") || ($config_data(startup) == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3822 $win.tree configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3823 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3824 if { $build_tree_needs_update } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3825 $win.make configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3826 $win.tests configure -state disabled
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3827 $win.misc configure -state disabled
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3828 $win.clean configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3829 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3830 grid $win.tree -row 0 -column 0 -sticky we -padx 5 -pady 5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3831 grid $win.make -row 1 -column 0 -sticky we -padx 5 -pady 5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3832 grid $win.tests -row 2 -column 0 -sticky we -padx 5 -pady 5
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3833 grid $win.misc -row 3 -column 0 -sticky we -padx 5 -pady 5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3834 grid $win.clean -row 4 -column 0 -sticky we -padx 5 -pady 5
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3835
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3836 message $win.treemsg -anchor w -justify left -width 300 -text \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3837 "Create or update the build and install trees."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3838 message $win.makemsg -anchor w -justify left -width 300 -text \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3839 "Build the current configuration, leaving libraries and header files in the install tree."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3840 message $win.testsmsg -anchor w -justify left -width 300 -text \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3841 "Build the test executables for the current configuration. These executables will be\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3842 placed in the install tree."
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3843 message $win.miscmsg -anchor w -justify left -width 300 -text \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3844 "Build the misc executables for the current configuration. These executables will be\
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3845 placed in the misc directory."
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3846 message $win.cleanmsg -anchor w -justify left -width 300 -text \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3847 "Perform a clean-up operation in the build and install trees."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3848 grid $win.treemsg -row 0 -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3849 grid $win.makemsg -row 1 -column 1 -sticky we
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3850 grid $win.testsmsg -row 2 -column 1 -sticky we
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3851 grid $win.miscmsg -row 3 -column 1 -sticky we
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3852 grid $win.cleanmsg -row 4 -column 1 -sticky we
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3853 grid columnconfigure $win 1 -weight 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3854 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3855
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3856 # The build page needs refreshing every time that the user changes the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3857 # target or one of the packages. The important question is whether or
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3858 # not the build tree needs to be updated before any builds can take place.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3859 # Of course the build tree can only be generated if the target architecture
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3860 # is known.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3861
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3862 proc pkgconf::nbpage_build_enter { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3863
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3864 variable build_tree_needs_update
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3865 variable build_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3866 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3867
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3868 if { $build_tree_needs_update } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3869 $build_frame.grid.make configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3870 $build_frame.grid.tests configure -state disabled
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3871 $build_frame.grid.misc configure -state disabled
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3872 $build_frame.grid.clean configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3873
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3874 set_status_line "The build tree must be updated before this configuration can be built."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3875 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3876 clear_status_line
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3877 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3878
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3879 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3880 if { ($config_data(target) == "") || ($config_data(platform) == "") || ($config_data(startup) == "") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3881 $build_frame.grid.tree configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3882 set_status_line "The target hardware has not yet been selected."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3883 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3884 $build_frame.grid.tree configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3885 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3886 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3887
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3888 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3889 # There are no actual settings that can be changed in this tab,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3890 # so no updates are required.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3891 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3892 proc pkgconf::nbpage_build_leave { win } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3893 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3894
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3895 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3896 # This callback function is invoked during the various makes.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3897 # If it is passed an empty string then the command has finished and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3898 # all the buttons can be reenabled. Otherwise it is necessary to send
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3899 # some text to the output window.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3900
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3901 proc pkgconf::nbpage_build_handle_output { mesg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3902
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3903 if { $mesg == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3904 output_add_text "Build has finished.\n"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3905 nbpage_build_control_buttons 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3906 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3907 output_add_text "$mesg\n"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3908 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3909 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3910
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3911
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3912 # This utility is used to control all the buttons in the build frame.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3913 proc pkgconf::nbpage_build_control_buttons { on } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3914
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3915 variable build_frame
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3916 set buttons [grid slaves $build_frame.grid -column 0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3917 foreach button $buttons {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3918 if { $on } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3919 $button configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3920 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3921 $button configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3922 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3923 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3924 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3925
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3926 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3927 # These functions get invoked for the buttons in the build page.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3928 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3929 proc pkgconf::nbpage_build_update_tree { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3930
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3931 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3932 variable options_page_needs_refresh
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3933 variable build_tree_needs_update
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3934
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3935 nbpage_build_control_buttons 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3936 produce_build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3937 nbpage_build_control_buttons 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3938 $toplevel.message configure -text ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3939 set options_page_needs_refresh 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3940 set build_tree_needs_update 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3941 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3942
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3943 proc pkgconf::nbpage_build_make { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3944
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3945 variable build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3946 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3947
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3948 nbpage_build_control_buttons 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3949 output_add_text "Building current configuration.\nBuild tree is $build_tree.\nInstall tree is $config_data(prefix)\n"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3950 run_command pkgconf::nbpage_build_handle_output make -C $build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3951 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3952
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3953 proc pkgconf::nbpage_build_tests { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3954
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3955 variable build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3956 variable config_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3957 nbpage_build_control_buttons 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3958 output_add_text \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3959 "Building test executables.\nBuild tree is $build_tree\nInstall tree is $config_data(prefix)\n"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3960 run_command pkgconf::nbpage_build_handle_output make -C $build_tree tests
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3961 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3962
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3963 proc pkgconf::nbpage_build_misc { } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3964
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3965 variable build_tree
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3966 variable config_data
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3967 nbpage_build_control_buttons 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3968 output_add_text \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3969 "Building misc executables.\nBuild tree is $build_tree\nInstall tree is $config_data(prefix)\n"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3970 run_command pkgconf::nbpage_build_handle_output make -C $build_tree misc
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3971 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3972
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3973 proc pkgconf::nbpage_build_clean { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3974
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3975 variable build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3976 nbpage_build_control_buttons 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3977 output_add_text "Cleaning build tree $build_tree.\n"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3978 run_command pkgconf::nbpage_build_handle_output make -C $build_tree clean
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3979 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3980
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3981 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3982
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3983 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3984 # {{{ Output window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3985
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3986 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3987 # These routines take care of the output window. There are two variables
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3988 # describing the current state of the window: output_docked and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3989 # output_visible. There are four commands which can be invoked from
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3990 # buttons, and a further command which can be invoked from the windows
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3991 # menu. There is also a routine which can be used to add text to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3992 # the current output window, making it visible if necessary.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3993 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3994 # The packing of the main .pkgconf window has to be redone every time
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3995 # the output window is displayed or hidden, if the output window is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3996 # currently docked. To avoid duplicating code there are auxiliary
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3997 # routine output_make_visible and output_make_invisible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3998 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3999
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4000 # This routine is invoked from the View menu. Its purpose is to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4001 # hide or display the output window, depending on the value of
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4002 # output_visible. Note that output_visible indicates the desired
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4003 # state of affairs, not the actual state of affairs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4004 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4005 proc pkgconf::output_menu { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4006
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4007 variable output_visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4008
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4009 if { $output_visible == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4010 output_make_invisible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4011 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4012 output_make_visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4013 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4014 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4015
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4016 proc pkgconf::output_make_visible { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4017
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4018 variable output_docked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4019 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4020
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4021 if { $output_docked == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4022 # The output is in a separate window. Deiconifying it should make
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4023 # it visible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4024 wm deiconify .pkgconf_output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4025 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4026 # It is necessary to repack the main window. This time it is the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4027 # output frame that should expand.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4028 pack forget $toplevel.notebook $toplevel.message
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4029 pack $toplevel.notebook -side top -fill x
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4030 pack $toplevel.message -side top -fill x
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4031 pack $toplevel.output -side top -fill both -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4032 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4033 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4034
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4035 proc pkgconf::output_make_invisible { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4036
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4037 variable output_docked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4038 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4039
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4040 if { $output_docked == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4041 # The output is in a separate window, just withdraw it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4042 wm withdraw .pkgconf_output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4043 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4044 # It is necessary to repack the .pkgconf window without
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4045 # the output window. This time it is the notebook which
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4046 # should expand to fit all available space.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4047 pack forget $toplevel.notebook $toplevel.message $toplevel.output
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4048 pack $toplevel.notebook -side top -fill both -expand 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4049 pack $toplevel.message -side top -fill x
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4050 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4051 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4052
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4053 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4054 # This routine is invoked when the output window is already visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4055 # and the user has pressed the button in that window to make it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4056 # invisible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4057 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4058 proc pkgconf::output_hide_window { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4059
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4060 variable output_visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4061 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4062 ASSERT { $output_visible != 0 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4063
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4064 output_make_invisible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4065 set output_visible 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4066 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4067
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4068 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4069 # Switch between a docked and an undocked window. The window must
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4070 # currently be visible. Any text must be copied across from
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4071 # one widget to the other.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4072 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4073 proc pkgconf::output_undock_window { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4074
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4075 variable output_visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4076 variable output_docked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4077 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4078
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4079 ASSERT { $output_visible != 0 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4080
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4081 output_make_invisible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4082
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4083 $toplevel.output.text configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4084 .pkgconf_output.text configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4085
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4086 if { $output_docked == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4087 $toplevel.output.text insert end [.pkgconf_output.text get 1.0 "end - 1 chars"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4088 .pkgconf_output.text delete 1.0 end
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4089 set output_docked 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4090 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4091 .pkgconf_output.text insert end [$toplevel.output.text get 1.0 "end - 1 chars"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4092 $toplevel.output.text delete 1.0 end
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4093 set output_docked 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4094 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4095
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4096 $toplevel.output.text configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4097 .pkgconf_output.text configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4098
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4099 output_make_visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4100 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4101
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4102 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4103 # Clear the text window, which should currently be visible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4104 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4105 proc pkgconf::output_clear_window { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4106
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4107 variable output_visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4108 variable output_docked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4109 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4110
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4111 ASSERT { $output_visible != 0 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4112 if { $output_docked == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4113 .pkgconf_output.text configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4114 .pkgconf_output.text delete 1.0 end
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4115 .pkgconf_output.text configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4116 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4117 $toplevel.output.text configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4118 $toplevel.output.text delete 1.0 end
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4119 $toplevel.output.text configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4120 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4121 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4122
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4123 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4124 # Save the current contents of the text window to a file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4125 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4126 proc pkgconf::output_save { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4127
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4128 variable build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4129 variable output_docked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4130 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4131
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4132 set filename [tk_getSaveFile -initialdir $build_tree -initialfile pkgconf.log \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4133 -parent [expr { $output_docked ? "$toplevel" : ".pkgconf_output" } ] ]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4134
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4135 if { $filename == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4136 return
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4137 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4138
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4139 if { [catch {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4140 set file [open $filename w]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4141 if { $output_docked == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4142 puts $file [.pkgconf_output.text get 1.0 "end - 1 chars"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4143 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4144 puts $file [$toplevel.output.text get 1.0 "end - 1 chars"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4145 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4146 close $file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4147 } message] != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4148 warning "Failed to save build output to $filename: $message"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4149 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4150 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4151
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4152 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4153 # Output some text. This gets invoked mainly during builds, but also
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4154 # by the report() function when generating a build tree. It is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4155 # necessary to make sure that the text widget is visible.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4156 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4157 proc pkgconf::output_add_text { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4158
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4159 variable output_visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4160 variable output_docked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4161 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4162
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4163 if { $output_visible == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4164 output_make_visible
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4165 set output_visible 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4166 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4167
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4168 if { $output_docked == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4169 .pkgconf_output.text configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4170 .pkgconf_output.text insert end $msg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4171 .pkgconf_output.text configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4172 .pkgconf_output.text see end
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4173 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4174 $toplevel.output.text configure -state normal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4175 $toplevel.output.text insert end $msg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4176 $toplevel.output.text configure -state disabled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4177 $toplevel.output.text see end
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4178 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4179 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4180
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4181 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4182 # {{{ Status line
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4183
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4184 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4185 # Some utility routines to update the status line.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4186
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4187 proc pkgconf::set_status_line { text } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4188 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4189 $toplevel.message configure -text $text
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4190 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4191
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4192 proc pkgconf::clear_status_line { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4193 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4194 $toplevel.message configure -text ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4195 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4196
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4197 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4198 # {{{ Diagnostics
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4199
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4200 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4201 # GUI versions of the same routines. For now tk_messageBox will have
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4202 # to suffice for fatal error
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4203 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4204 proc pkgconf::gui_fatal_error_handler { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4206 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4207
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4208 if { [winfo exists $toplevel] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4209 tk_messageBox -parent $toplevel -icon error -title "pkgconf: fatal error" -type ok -message $msg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4210 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4211 tk_messageBox -icon error -title "pkgconf: fatal error" -type ok -message $msg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4212 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4213 exit 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4214 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4215
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4216 proc pkgconf::gui_warning_handler { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4217
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4218 variable toplevel
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4219
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4220 if { [winfo exists $toplevel] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4221 tk_messageBox -parent $toplevel -icon error -title "pkgconf: fatal error" -type ok -message $msg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4222 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4223 tk_messageBox -icon error -title "pkgconf: fatal error" -type ok -message $msg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4224 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4225 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4226
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4227 proc pkgconf::gui_report_handler { msg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4228
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4229 output_add_text "$msg\n"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4230 update
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4231 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4232
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4233 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4234 # {{{ Executing external commands
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4235
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4236 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4237 # This code is responsible for executing external commands. The broken nature
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4238 # of pipes under Windows makes this somewhat more difficult than it should be.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4239
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4240 proc pkgconf::run_command { callback command args } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4241
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4242 # Start up the specified command. Actually the main command is run such that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4243 # both stdout and stderr are piped into cat, thus making sure that the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4244 # stderr output is not discarded.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4245 set result [catch { set pipe [open "|[concat $command $args] 2>@ stdout" "r"] } message]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4246 if { $result != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4247 warning "Failed to execute $command: $message"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4248 return
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4249 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4250
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4251 # Now set the pipe to non-blocking, to prevent the whole GUI from
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4252 # locking up by accident.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4253 fconfigure $pipe -blocking 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4254
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4255 # Set up an event handler to read back any output.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4256 fileevent $pipe readable [list pkgconf::handle_command_output $pipe $callback]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4257 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4258
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4259 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4260 # This routine gets invoked whenever there may be data waiting on the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4261 # pipe.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4262 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4263 proc pkgconf::handle_command_output { pipe callback } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4264
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4265 set data ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4266 set count [gets $pipe data]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4267 if { $count > 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4268 $callback $data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4269 } elseif { [eof $pipe] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4270 catch { close $pipe }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4271 $callback ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4272 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4273 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4274
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4275 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4276
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4277 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4278 # {{{ Produce build tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4279
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4280 # {{{ Description
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4281
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4282 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4283 # Producing the build tree. This requires the following information:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4284 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4285 # 1) the location of the component repository. This should be known.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4286 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4287 # 2) the location of the build tree. This should also be known.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4288 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4289 # 3) full details of the target architecture. These may not have been supplied
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4290 # yet, which would result in a fatal error.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4291 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4292 # 4) details of which packages are explicitly enabled or disabled.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4293 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4294 # 5) details of which version of each package should be used.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4295 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4296 # 6) prefix information, i.e. where the system will be installed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4297 # The default value "" indicates an install directory relative to the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4298 # build tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4299 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4300 # This routine may be called for an empty build tree, or it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4301 # may be used to update an existing build tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4302 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4303 # The steps that have to be taken are as follows:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4304 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4305 # 1) create a pkgconf directory, which is where all the editable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4306 # header files will end up. A few other files will end up there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4307 # as well.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4308 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4309 # 2) examine all packages, including the hal packages. For each package:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4310 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4311 # a) if there is a src directory in the component repository, reproduce
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4312 # this in the build tree. If this src directory has any
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4313 # sub-directories, these have to be created as well.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4314 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4315 # The src directory should contain a file PKGconf.mak. This has to be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4316 # copied across as makefile. There may also be PKGconf.mak files in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4317 # subdirectories which should also get copied across. Typically the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4318 # latter will be for internal development purposes.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4319 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4320 # b) if there is an include directory in the component repository,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4321 # make a matching directory in the build tree. Ditto for any
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4322 # subdirectories other than pkgconf.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4323 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4324 # The purpose of this include directory is to allow users to make
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4325 # editable copies of the header files in the build tree. A makefile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4326 # is generated in this directory which will take care of updating the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4327 # header files that actually get used for building, i.e. those in the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4328 # include directory. The header files are not actually copied across
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4329 # at this point, that will happen during the first make.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4330 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4331 # The pkgconf directory is handled differently. Every file in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4332 # pkgconf is copied across to the build tree's pkgconf directory,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4333 # unless there is already a matching file in the build tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4334 # This avoids overwriting edits made by the user in the build
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4335 # tree. The disadvantage is that if the version in the component
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4336 # repository is edited it will have to be copied by hand, or the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4337 # -force command line argument will have to be used.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4338 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4339 # c) if there is a tests directory in the component repository, make
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4340 # a matching directory in the build tree and copy
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4341 # across PKGconf.mak. If this tests directory has any subdirectories
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4342 # then these must be created as well.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4343 #
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4344 # d) similarly for any 'misc' directories
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4345 #
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4346 # 3) create the install directory tree, complete with lib, include, and tests
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4347 # directories, and the include/pkgconf sub-directory. Additional
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4348 # sub-directories within include need not be generated at this point,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4349 # that happens as such sub-directories are encountered within the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4350 # component repository.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4351 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4352 # 4) copy across the makevars file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4353 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4354 # 5) generate the files specific to this configuration.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4355 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4356 # Note that subdirectories corresponding to old packages are not
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4357 # deleted, they simply get ignored. Arguably this should change,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4358 # but then you run the risk of deleting user changes in a package
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4359 # that has been disabled only temporarily.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4360 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4361
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4362 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4363 # {{{ Check requirements
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4364
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4365 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4366 # It is not possible to generate a build tree unless certain requirements
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4367 # are satisfied. Most of these will have been checked elsewhere.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4368 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4369 proc pkgconf::check_requirements { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4370
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4371 ASSERT { $pkgconf::build_tree != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4372 ASSERT { $pkgconf::component_repository != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4373
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4374 if { $pkgconf::component_repository == $pkgconf::build_tree } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4375 report "Builds of eCos cannot happen in the same directory as the sources."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4376 report "Currently your build tree is $pkgconf::build_tree."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4377 report "This is the same directory as your component repository."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4378 fatal_error "Unable to proceed with builds in this directory."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4379 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4380
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4381 if { $pkgconf::config_data(target) == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4382 fatal_error "No target architecture has been specified."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4383 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4384 if { $pkgconf::config_data(platform) == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4385 fatal_error "No target platform has been specified."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4386 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4387 if { $pkgconf::config_data(startup) == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4388 fatal_error "No target startup mechanism has been specified."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4389 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4390 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4391
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4392 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4393 # {{{ Directory and file utilities
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4394
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4395 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4396 # Start with a number of utility routines to access all files in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4397 # a directory, stripping out well-known files such as makefile.am.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4398 # The routines take an optional pattern argument if only certain
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4399 # files are of interest.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4400 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4401 # Note that symbolic links are returned as well as files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4402 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4403 proc pkgconf::locate_files { dir { pattern "*"} } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4404
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4405 ASSERT { $dir != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4406
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4407 # Start by getting a list of all the files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4408 set filelist [glob -nocomplain -- [file join $dir $pattern]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4409
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4410 # Eliminate the pathnames from all of these files
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4411 set filenames ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4412 foreach file $filelist {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4413 if { [string range $file end end] != "~" } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4414 lappend filenames [file tail $file]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4415 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4416 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4417
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4418 # Eliminate any obviously spurious entries.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4419 foreach file { CVS Makefile.am Makefile.in makefile acinclude.m4 aclocal.m4 configure.in configure } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4420 set index [lsearch -exact $filenames $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4421 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4422 set filenames [lreplace $filenames $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4423 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4424 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4425
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4426 # Eliminate any subdirectories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4427 set subdirs ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4428 foreach name $filenames {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4429 if { [file isdir [file join $dir $name]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4430 lappend subdirs $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4431 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4432 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4433 foreach subdir $subdirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4434 set index [lsearch -exact $filenames $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4435 set filenames [lreplace $filenames $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4436 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4437
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4438 return $filenames
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4439 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4440
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4441 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4442 # This utility returns all sub-directories, as opposed to all files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4443 # A variant glob pattern is used here. This version is not recursive.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4444 proc pkgconf::locate_subdirs { dir { pattern "*" }} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4445
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4446 ASSERT { $dir != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4447
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4448 set dirlist [glob -nocomplain -- [file join $dir $pattern "."]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4449
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4450 # Eliminate the pathnames and the spurious /. at the end of each entry
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4451 set dirnames ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4452 foreach dir $dirlist {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4453 lappend dirnames [file tail [file dirname $dir]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4454 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4455
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4456 # Get rid of the CVS directory, if any
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4457 set index [lsearch -exact $dirnames "CVS"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4458 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4459 set dirnames [lreplace $dirnames $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4460 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4461
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4462 # That should be it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4463 return $dirnames
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4464 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4465
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4466 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4467 # A variant which is recursive. This one does not support a pattern.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4468 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4469 proc pkgconf::locate_all_subdirs { dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4470
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4471 ASSERT { $dir != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4472
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4473 set result ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4474 foreach subdir [locate_subdirs $dir] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4475 lappend result $subdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4476 foreach x [locate_all_subdirs [file join $dir $subdir]] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4477 lappend result [file join $subdir $x]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4478 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4479 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4480 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4481 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4482
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4483 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4484 # This routine returns a list of all the files in a given directory and in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4485 # all subdirectories, preserving the subdirectory name.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4486 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4487 proc pkgconf::locate_all_files { dir { pattern "*" } } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4488
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4489 ASSERT { $dir != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4490
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4491 set files [locate_files $dir $pattern]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4492 set subdirs [locate_subdirs $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4493
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4494 foreach subdir $subdirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4495 set subfiles [locate_all_files [file join $dir $subdir] $pattern]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4496 foreach file $subfiles {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4497 lappend files [file join $subdir $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4498 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4499 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4500
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4501 return $files
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4502 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4503
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4504 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4505 # Sometimes a directory may be empty, or contain just a CVS subdirectory,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4506 # in which case there is no point in copying it across.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4507 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4508 proc pkgconf::is_empty_directory { dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4509
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4510 ASSERT { $dir != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4511
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4512 set contents [glob -nocomplain -- [file join $dir "*"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4513 if { [llength $contents] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4514 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4515 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4516 if { ([llength $contents] == 1) && [string match {*CVS} $contents] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4517 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4518 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4519 return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4520 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4521
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4522 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4523 # Given a pathname such as kernel/current/include, this routine returns
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4524 # a string which points at the build tree's pkgconf directory
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4525 # complete with the appropriate number of ..'s in the pathname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4526 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4527 proc pkgconf::get_dotdots_pkgconf { dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4528
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4529 set result ".."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4530
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4531 while { 1} {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4532 set dir [file dirname $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4533 if { ($dir == ".") || ($dir == ":") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4534 break
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4535 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4536 set result [file join $result ".."]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4537 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4538
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4539 set result [file join $result "pkgconf"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4540 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4541 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4542
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4543 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4544 # Internally this script works using native path names. When outputting the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4545 # makefile information it is necessary to output the paths in a format that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4546 # is understood by GnuMake.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4547 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4548 proc pkgconf::get_pathname_for_make { dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4549
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4550 # First of all, handle directory separators. Under Unix this is a no-op.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4551 # Under Windows the current directory separator may be \ instead of /.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4552 # It is not entirely clear under what circumstances Tcl's "file nativename"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4553 # facility uses / vs. \, but converting all existing backslashes to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4554 # forward slashes should be harmless.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4555 if { $pkgconf::windows_host != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4556 regsub -all -- {\\} $dir "/" dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4557 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4558
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4559 # Next cope with spaces in pathnames. GnuMake does not always cope
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4560 # sensibly with these, even if backslash quoting is used - there
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4561 # are known problems with VPATH and with the wildcard function. Under
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4562 # Unix there is no simple solution, but it is unlikely that the problem
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4563 # will arise in the first place. Under Windows it is quite likely that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4564 # the problem will arise, but it is possible to work around it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4565 # by using a short file name.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4566
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4567 set index [string first " " $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4568 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4569 if { $pkgconf::windows_host != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4570
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4571 # This call will only work if the specified object already exists.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4572 # This should not be a problem, as the pathnames are likely to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4573 # be relative to the component repository, the build tree, or the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4574 # install tree. The component repository must already exist. The
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4575 # build tree must already exist, since this call will only be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4576 # invoked when generating makefiles inside the build tree. The
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4577 # install tree will have been created before pkgconf/pkgconf.mak
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4578 # is written out, and that is the only place that needs to refer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4579 # to it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4580
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4581 set dir [file attribute $dir -shortname]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4582 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4583 fatal_error "Cannot cope with pathname \"$pathname\".\nPathnames with spaces are not supported on this platform."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4584 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4585 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4586
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4587 # Other characters that have special meaning include: []*?()$^|&#<>"'`;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4588 # At least, that is the list used within vmake. $ has to be quoted as $$,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4589 # the others should be quoted with a single backslash.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4590 regsub -all -- {\$} $dir {$$} dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4591 foreach char { {\[} {\]} {\*} {\?} {\(} {\)} {\^} {\|} {\&} {\#} {\<} {\>} {\"} {\'} {\`} {\;} } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4592 regsub -all -- $char $dir "\\$char" dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4593 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4594
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4595 # Now cope with Windows drive names.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4596 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4597 # First, volume-relative filenames. If the directory string begins with
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4598 # c:xxx, as opposed to c:/xxx, it is necessary to figure out what the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4599 # current directory is on drive c: and use this as prefix for the rest
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4600 # of the string.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4601 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4602 # Once volume-relative filenames have been handled the directory may be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4603 # along the lines of c:/Cygnus/eCos/whatever. This is problematical for
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4604 # GnuMake since the colon character has special meaning in various places,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4605 # e.g. to identify static pattern rules. cygwin32 uses //c/ as an alias
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4606 # for c:/ wherever appropriate.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4607 if { $pkgconf::windows_host != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4608
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4609 set dummy ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4610 set match1 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4611 set match2 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4612 set match3 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4613
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4614 if { [regexp -- {^([a-zA-Z]:)(/)?(.*)} $dir dummy match1 match2 match3] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4615 if { $match2 == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4616 set result [catch {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4617 set current_dir [pwd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4618 cd $match1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4619 set dir [pwd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4620 regsub -all -- {\\} $dir "/" dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4621 set dir [file join $dir $match3]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4622 cd $current_dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4623 } message]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4624 if { $result != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4625 fatal_error "Failed to determine current directory on drive $match1"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4626 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4627 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4628 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4629
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4630 if { [regexp -- {^([a-zA-Z]):} $dir dummy match1] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4631 set dir "//$match1[string range $dir 2 end]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4632 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4633 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4634
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4635 return $dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4636 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4637
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4638 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4639 # Take a cygwin32 filename such as //d/tmp/pkgobj and turn it into something
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4640 # acceptable to Tcl, i.e. d:/tmp/pkgobj. There are a few other complications...
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4641
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4642 proc pkgconf::get_pathname_for_tcl { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4643
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4644 if { $pkgconf::windows_host } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4645 set dummy ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4646 set match1 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4647 set match2 ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4648
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4649 # If the pathname is relative to ~, expand it now.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4650 if { [regexp -- {^~(.*)$} $name dummy match1] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4651 set name [file nativename $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4652 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4653
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4654 # For consistency, get rid of any backslashes in the pathname.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4655 # Especially since the file nativename command above may have
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4656 # introduced some.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4657 regsub -all -- {\\} $name "/" name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4658
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4659 # And now replace //d/tmp/pkgobj with d:/tmp/pkgobj
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4660 if { [regexp -- {^//([a-zA-Z])(/.*)$} $name dummy match1 match2] == 1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4661 set name "$match1:$match2"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4662 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4663
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4664 # If the pathname is relative to the cygwin root, get hold of the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4665 # drive name.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4666 if { ([regexp -- {^/(.*)$} $name dummy match1] == 1) && ([regexp -- {^//.*$} $name dummy] == 0) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4667 set saved_dir [pwd]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4668 cd /
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4669 set name [file join [pwd] $match1]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4670 cd $saved_dir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4671 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4672 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4673 return $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4674 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4675
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4676 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4677 # Output a standard banner to a generated file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4678 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4679
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4680 proc pkgconf::output_banner { file name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4681
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4682 puts $file \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4683 "#
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4684 # File $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4685 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4686 # This file is generated automatically by the pkgconf program.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4687 # It should not be edited. Any changes made to this file may
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4688 # be overwritten by pkgconf.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4689 #"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4690 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4691
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4692 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4693 # Make sure that a newly created or copied file is writable. This operation
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4694 # is platform-specific. Under Unix at most the current user is given
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4695 # permission, since there does not seem to be any easy way to get hold
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4696 # of the real umask.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4697
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4698 proc pkgconf::make_writable { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4699
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4700 ASSERT { $name != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4701 ASSERT { [file isfile $name] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4702
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4703 if { [file writable $name] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4704 if { $pkgconf::windows_host != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4705 file attributes $name -readonly 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4706 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4707 set mask [file attributes $name -permissions]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4708 set mask [expr $mask | 0200]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4709 file attributes $name -permissions $mask
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4710 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4711 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4712 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4713
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4714 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4715 # {{{ Other utilities
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4716
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4717 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4718 # This code works out what packages should go into the current configuration.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4719 # The rules are as follows:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4720 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4721 # 1) all hardware-specific packages should be disabled, unless they are
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4722 # mentioned explicitly in the targets file for the current target or
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4723 # platform, or unless they are enabled explicitly by the user.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4724 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4725 # 2) all other packages which are enabled by default should be included,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4726 # unless they are disabled explicitly by the user.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4727 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4728 # 3) all non-hardware packages which are disabled by default should be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4729 # left out, unless they are enabled explicitly by the user.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4730
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4731 proc pkgconf::get_current_packages { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4732
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4733 ASSERT { $pkgconf::config_data(target) != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4734 ASSERT { $pkgconf::config_data(platform) != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4735 ASSERT { [info exists pkgconf::target_data($pkgconf::config_data(target),packages)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4736 ASSERT { [info exists pkgconf::target_data($pkgconf::config_data(target),$pkgconf::config_data(platform),packages)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4737 ASSERT { [info exists pkgconf::config_data(enabled_packages)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4738 ASSERT { [info exists pkgconf::config_data(disabled_packages)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4739
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4740 set result ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4741 set target_packages $pkgconf::target_data($pkgconf::config_data(target),packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4742 set platform_packages $pkgconf::target_data($pkgconf::config_data(target),$pkgconf::config_data(platform),packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4743 set enabled_packages $pkgconf::config_data(enabled_packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4744 set disabled_packages $pkgconf::config_data(disabled_packages)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4745
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4746 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4747
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4748 ASSERT { [info exists pkgconf::package_data($pkg,hardware)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4749
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4750 if { $pkgconf::package_data($pkg,hardware) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4751
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4752 if { [lsearch -exact $disabled_packages $pkg] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4753 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4754 } elseif { [lsearch -exact $target_packages $pkg] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4755 lappend result $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4756 } elseif { [lsearch -exact $platform_packages $pkg] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4757 lappend result $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4758 } elseif { [lsearch -exact $enabled_packages $pkg] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4759 lappend result $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4760 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4761
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4762 } elseif { $pkgconf::package_data($pkg,default) != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4763 if { [lsearch -exact $disabled_packages $pkg] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4764 lappend result $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4765 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4766 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4767 if { [lsearch -exact $enabled_packages $pkg] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4768 lappend result $pkg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4769 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4770 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4771 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4772
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4773 return $result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4774 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4775
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4776 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4777 # A utility to determine whether or not a particular setting has changed relative to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4778 # what is currently in the build tree. Information about the latter comes from
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4779 # the save file, but may not exist the first time that the build tree is generated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4780 # The config_data array itself may be sparsely populated, especially when it comes
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4781 # to compiler flags.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4782
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4783 proc pkgconf::value_has_changed { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4784
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4785 ASSERT {$name != ""}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4786
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4787 if { [info exists pkgconf::config_data($name)] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4788
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4789 if { [info exists pkgconf::saved_data($name)] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4790 return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4791 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4792 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4793 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4794
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4795 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4796
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4797 if { [info exists pkgconf::saved_data($name)] == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4798 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4799 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4800 if { $pkgconf::saved_data($name) != $pkgconf::config_data($name) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4801 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4802 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4803 return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4804 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4805 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4806
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4807 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4808 # Has there been a change in the packages in the system, either which packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4809 # are present or any of their versions ? If there has been a change in the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4810 # packages then the amount of work that has to be done inside pkgconf is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4811 # increased significantly.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4812
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4813 proc pkgconf::packages_have_changed { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4814
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4815 if { [value_has_changed "target"] || [value_has_changed "platform"] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4816 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4817 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4818 if { [value_has_changed "enabled_packages"] || [value_has_changed "disabled_packages"] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4819 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4820 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4821 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4822 if { [value_has_changed "$pkg,version"] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4823 return 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4824 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4825 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4826
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4827 return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4828 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4829
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4830
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4831 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4832 # Given the name of a package, e.g. CYGPKG_KERNEL, return something which is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4833 # more acceptable in the build tree. Creating directories and files with
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4834 # names containing lots of upper case characters is unacceptable.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4835
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4836 proc pkgconf::get_build_alias { name } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4837
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4838 ASSERT { $name != ""}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4839
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4840 set index [string first "_" $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4841 if { $index != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4842 set new_name [string range $name [incr index] end]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4843 if { $new_name != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4844 set name $new_name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4845 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4846 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4847 set name [string tolower $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4848 return $name
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4849 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4850
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4851 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4852 # {{{ Process a package
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4853
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4854 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4855 # Process an entire package. The header files, the src directory, and the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4856 # tests directory are all handled separately.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4857
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4858 proc pkgconf::process_package { name dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4859
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4860 report "Processing package $dir"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4861
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4862 set incdir [file join $dir "include"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4863 if { [file isdir [file join $pkgconf::component_repository $incdir]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4864 lappend pkgconf::inc_dirs $incdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4865 process_package_includes $name $incdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4866 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4867
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4868 set srcdir [file join $dir "src"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4869 if { [file isdir [file join $pkgconf::component_repository $srcdir]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4870 if { [file isfile [file join $pkgconf::component_repository $srcdir PKGconf.mak]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4871 lappend pkgconf::src_dirs $srcdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4872 process_package_src $srcdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4873 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4874 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4875
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4876 set testsdir [file join $dir "tests"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4877 if { [file isdir [file join $pkgconf::component_repository $testsdir]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4878 if { [file isfile [file join $pkgconf::component_repository $testsdir PKGconf.mak]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4879 lappend pkgconf::tests_dirs $testsdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4880 process_package_tests $name $testsdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4881 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4882 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4883
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4884 set miscdir [file join $dir "misc"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4885 if { [file isdir [file join $pkgconf::component_repository $miscdir]] } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4886 if { [file isfile [file join $pkgconf::component_repository $miscdir PKGconf.mak]] } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4887 lappend pkgconf::misc_dirs $miscdir
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4888 process_package_misc $miscdir
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4889 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4890 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4891 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4892
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4893 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4894 # Processing the header files is somewhat complicated. The include directories
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4895 # and any subdirectories except pkgconf have to be created in the build tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4896 # Details of these subdirectories get stored in the variable header_subdirs.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4897 # A pro-forma makefile has to be generated in the build tree, using details
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4898 # of all the header files. These header files must also be appended to the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4899 # variable header_files. Any files in pkgconf have to be copied across
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4900 # to the pkgconf directory, but must not overwrite the files that are
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4901 # already there.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4902 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4903 # As an additional complication, each package may define its own header
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4904 # file directory. For example a package xyz may specify that all of its
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4905 # exported header files should go into the xyz subdirectory of the install
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4906 # include tree, not at the top level. There are special cases for the HAL.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4907 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4908 # Note that if there are any spurious directories already present, these
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4909 # do not get deleted. However the generated makefile will not reference
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4910 # them so it should be harmless.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4911 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4912
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4913 proc pkgconf::process_package_includes { name dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4914
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4915 # What subdirectory in the install tree should be used ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4916 ASSERT { [info exists pkgconf::package_data($name,incdir)] }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4917 set pkg_incdir $pkgconf::package_data($name,incdir)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4918
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4919 # Get information about the package's include directory.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4920 set pkg_inc_dirs [locate_all_subdirs [file join $pkgconf::component_repository $dir]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4921 set pkg_pkgconf_files [locate_files [file join $pkgconf::component_repository $dir "pkgconf"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4922 set pkg_inc_files [locate_all_files [file join $pkgconf::component_repository $dir]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4923
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4924 # Remove all pkgconf headers from the all_headers list. pkgconf headers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4925 # are handled by a separate makefile in the pkgconf directory.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4926 foreach hdr $pkg_pkgconf_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4927 set index [lsearch -exact $pkg_inc_files [file join pkgconf $hdr]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4928 ASSERT { $index != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4929 set pkg_inc_files [lreplace $pkg_inc_files $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4930 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4931
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4932 # Remove all unwanted subdirectories. These include pkgconf (which is handled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4933 # specially) and any empty subdirectories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4934 set tmp ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4935 foreach subdir $pkg_inc_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4936 if { ($subdir == "pkgconf") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4937 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4938 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4939 if { [is_empty_directory [file join $pkgconf::component_repository $dir $subdir] ] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4940 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4941 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4942 lappend tmp $subdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4943 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4944 set pkg_inc_dirs $tmp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4945
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4946 # Create the include directory in the build tree, plus any subdirectories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4947 # This directory tree must map the structure of the source tree, so there is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4948 # no need to worry about thispkg_incdir.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4949 file mkdir [file join $pkgconf::build_tree $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4950 foreach subdir $pkg_inc_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4951 file mkdir [file join $pkgconf::build_tree $dir $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4952 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4953
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4954 # Copy across the pkgconf files that are not already present.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4955 # Also keep track of this information globally.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4956 foreach hdr $pkg_pkgconf_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4957 if { [lsearch -exact $pkgconf::pkgconf_files $hdr] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4958 return -code error "Duplicate configuration header file $hdr"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4959 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4960 lappend pkgconf::pkgconf_files $hdr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4961
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4962 set src [file join $pkgconf::component_repository $dir "pkgconf" $hdr]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4963 set dest [file join $pkgconf::build_tree "pkgconf" $hdr]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4964 if { (! [file isfile $dest]) || ($pkgconf::force_arg != 0) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4965 file copy -force -- $src $dest
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4966 make_writable $dest
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4967 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4968 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4969
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4970 # Keep track of all the subdirectories that should be generated
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4971 # in the install tree. Note that packages may share these
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4972 # subdirectories, e.g. the sys subdirectory will be used by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4973 # both the C library and by a POSIX compatibily layer.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4974 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4975 # It is necessary to list pkg_incdir separately, and all
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4976 # of its parent directories. Otherwise it is not possible to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4977 # clean up the install tree correctly when packages get removed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4978 if { $pkg_incdir != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4979 set current_path ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4980 foreach field [file split $pkg_incdir] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4981 set current_path [file join $current_path $field]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4982 if { [lsearch -exact $pkgconf::install_inc_dirs $current_path] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4983 lappend pkgconf::install_inc_dirs $current_path
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4984 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4985 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4986 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4987 foreach subdir $pkg_inc_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4988 set dest [file join $pkg_incdir $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4989 if { [lsearch -exact $pkgconf::install_inc_dirs $dest] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4990 lappend pkgconf::install_inc_dirs $dest
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4991 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4992 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4993
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4994 # Keep track of all header files, checking for duplicates.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4995 foreach hdr $pkg_inc_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4996 set dest [file join $pkg_incdir $hdr]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4997 if { [lsearch -exact $pkgconf::install_inc_files $dest] != -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4998 return -code error "Duplicate header file $dest"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4999 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5000 lappend pkgconf::install_inc_files $dest
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5001 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5002
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5003 # Generate the makefile in the target directory. First set up
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5004 # some variables to contain the right sort of data for a makefile.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5005 if { $pkg_incdir == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5006 set pkg_incdir "."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5007 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5008 set pkg_incdir [get_pathname_for_make $pkg_incdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5009 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5010 set tmp ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5011 foreach file $pkg_inc_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5012 lappend tmp [get_pathname_for_make $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5013 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5014 set pkg_inc_files $tmp
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5015
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5016 set filename [file join $dir "makefile"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5017 set makefile [open [file join $pkgconf::build_tree $filename] "w"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5018 output_banner $makefile $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5019 puts $makefile \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5020 "
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5021 include [get_pathname_for_make [file join [get_dotdots_pkgconf $dir] "pkgconf.mak"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5022
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5023 include [get_pathname_for_make [file join [get_dotdots_pkgconf $dir] "system.mak"]]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5024
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5025 HEADERS := $pkg_inc_files
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5026 TARGETS := \$(foreach hdr,\$(HEADERS),\$(PREFIX)/include/$pkg_incdir/\$(hdr))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5027 .PHONY : build clean
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5028 VPATH := . [file join \$(COMPONENT_REPOSITORY) $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5029
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5030 build: \$(TARGETS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5031
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5032 "
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5033 foreach hdr $pkg_inc_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5034 puts $makefile "\$(PREFIX)/include/$pkg_incdir/$hdr : $hdr"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5035 if { $pkgconf::config_data(use_links) == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5036 puts $makefile "\t@\$(CP) \$< \$@"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5037 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5038 puts $makefile "\t@\$(RM) \$@; ln -s \$< \$@"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5039 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5040 puts $makefile ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5041 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5042
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5043 puts $makefile "clean:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5044 foreach hdr $pkg_inc_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5045 puts $makefile "\t@\$(RM) \$(PREFIX)/include/$pkg_incdir/$hdr"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5046 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5047 puts $makefile "\n# End of $filename"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5048 close $makefile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5049 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5050
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5051 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5052 # Processing the src directory is relatively straightforward. It is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5053 # necessary to create the src directory in the build tree, plus any
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5054 # subdirectories. It is also necessary to copy across the PKGconf.mak
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5055 # file from the component repository to the build tree, assuming the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5056 # destination file does not already exist, and do the same in any
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5057 # subdirectories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5058 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5059 proc pkgconf::process_package_src { dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5060
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5061 set srcdir [file join $pkgconf::component_repository $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5062 set destdir [file join $pkgconf::build_tree $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5063
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5064 file mkdir $destdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5065 set subdirs [locate_all_subdirs $srcdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5066 foreach subdir $subdirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5067 if { [is_empty_directory [file join $srcdir $subdir] ] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5068 continue
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5069 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5070 file mkdir [file join $destdir $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5071 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5072
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5073 set makefiles [locate_all_files $srcdir "PKGconf.mak"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5074 foreach makefile $makefiles {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5075 set destname [file join $destdir [file dirname $makefile] "makefile"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5076
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5077 if { ([file isfile $destname] == 0) || $pkgconf::force_arg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5078 file copy -force -- [file join $srcdir $makefile] $destname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5079 make_writable $destname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5080 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5081 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5082 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5083
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5084 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5085 # Processing the tests directories is just the same as the source
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5086 # directories, for now. There is one additional complication in that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5087 # the test executables have to get installed, so it is necessary to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5088 # keep track of which directories are needed in the install tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5089
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5090 proc pkgconf::process_package_tests { name dir } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5091
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5092 set srcdir [file join $pkgconf::component_repository $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5093 set destdir [file join $pkgconf::build_tree $dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5094
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5095 lappend pkgconf::install_test_dirs [get_build_alias $name]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5096
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5097 file mkdir $destdir
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5098 set subdirs [locate_all_subdirs $srcdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5099
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5100 foreach subdir $subdirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5101 lappend pkgconf::install_test_dirs [file join [get_build_alias $name] $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5102 file mkdir [file join $destdir $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5103 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5104
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5105 set makefiles [locate_all_files $srcdir "PKGconf.mak"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5106 foreach makefile $makefiles {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5107 set destname [file join $destdir [file dirname $makefile] "makefile"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5108 if { ([file isfile $destname] == 0) || $pkgconf::force_arg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5109 file copy -force -- [file join $srcdir $makefile] $destname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5110 make_writable $destname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5111 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5112 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5113 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5114
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5115 # ----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5116 # Processing the misc directory is just like the src directory.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5117 #
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5118 proc pkgconf::process_package_misc { dir } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5119
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5120 set miscdir [file join $pkgconf::component_repository $dir]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5121 set destdir [file join $pkgconf::build_tree $dir]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5122
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5123 file mkdir $destdir
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5124 set subdirs [locate_all_subdirs $miscdir]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5125 foreach subdir $subdirs {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5126 if { [is_empty_directory [file join $miscdir $subdir] ] } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5127 continue
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5128 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5129 file mkdir [file join $destdir $subdir]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5130 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5131
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5132 set makefiles [locate_all_files $miscdir "PKGconf.mak"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5133 foreach makefile $makefiles {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5134 set destname [file join $destdir [file dirname $makefile] "makefile"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5135
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5136 if { ([file isfile $destname] == 0) || $pkgconf::force_arg } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5137 file copy -force -- [file join $miscdir $makefile] $destname
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5138 make_writable $destname
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5139 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5140 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5141 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5142
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5143 # }}}
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5144 # {{{ Package debug options
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5145
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5146 # ----------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5147 # Enable appropriate debug options in various packages. Currently the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5148 # only option that is affected is CYGPKG_INFRA_DEBUG in pkgconf/infra.h
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5149
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5150 proc pkgconf::enable_package_debug_options { } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5151
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5152 report "Enabling debug-related options"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5153
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5154 set fd [open [file join $pkgconf::build_tree "pkgconf" "infra.h"] "r"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5155 set data [read $fd]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5156 close $fd
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5157
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5158 if { [regexp -- {undef[ ]+CYGPKG_INFRA_DEBUG} $data] } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5159 regsub -- {undef[ ]+CYGPKG_INFRA_DEBUG} $data {define CYGPKG_INFRA_DEBUG} data
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5160 set fd [open [file join $pkgconf::build_tree "pkgconf" "infra.h"] "w"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5161 puts $fd $data
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5162 close $fd
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5163 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5164 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5165
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5166 # Or the inverse.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5167 proc pkgconf::disable_package_debug_options { } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5168
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5169 report "Disabling debug-related options"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5170
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5171 set fd [open [file join $pkgconf::build_tree "pkgconf" "infra.h"] "r"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5172 set data [read $fd]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5173 close $fd
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5174
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5175 if { [regexp -- {define[ ]+CYGPKG_INFRA_DEBUG} $data] } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5176 regsub -- {define[ ]+CYGPKG_INFRA_DEBUG} $data {undef CYGPKG_INFRA_DEBUG} data
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5177 set fd [open [file join $pkgconf::build_tree "pkgconf" "infra.h"] "w"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5178 puts $fd $data
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5179 close $fd
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5180 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5181 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5182
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5183 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5184 # {{{ Install tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5185
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5186 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5187 # These routines take care of the install tree. The routine
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5188 # produce_install_tree gets invoked after details of all the packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5189 # are known, and hence after details of all the subdirectories
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5190 # are known.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5191 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5192 # Currently this routine will empty out the lib and tests directory
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5193 # completely. It will also get rid of any files and subdirectories in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5194 # include which are no longer of interest.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5195 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5196 # Clearing out libtarget.a and any similar libraries avoids problems
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5197 # if the target architecture has changed. Such a change should cause
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5198 # all source files to be rebuilt via a dependency on the makefile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5199 # auxiliary files. However it would result in an attempt to create
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5200 # a library archive containing a mixture of architectures, which could
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5201 # cause all sorts of problems. To make sure that the library gets
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5202 # regenerated during the next build all the stamp files have to be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5203 # deleted.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5204 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5205 # It is not a good idea to manipulate header files unnecessarily,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5206 # since changing these would result in application code being
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5207 # recompiled as well as system code. However if the old and new
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5208 # configurations involve a header file with the same name but coming
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5209 # from different packages, (e.g. a standard HAL header if you switch
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5210 # targets or platforms, or a package header if you change the version
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5211 # of that package) then there are complications.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5212 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5213 # For now the code is draconian and just deletes everything. This
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5214 # needs to be optimised.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5215 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5216
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5217 proc pkgconf::produce_install_tree { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5218
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5219 ASSERT { $pkgconf::build_tree != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5220
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5221 if { $pkgconf::config_data(prefix) != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5222 set prefix $pkgconf::config_data(prefix)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5223 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5224 set prefix [file join $pkgconf::build_tree "install"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5225 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5226 ASSERT { $prefix != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5227
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5228 # There should be at least an include/pkgconf subdirectory
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5229 ASSERT { $pkgconf::install_inc_dirs != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5230
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5231 # In Tcl the mkdir call is a no-op if the directory already exists.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5232 report "Generating install directory $prefix"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5233 file mkdir $prefix
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5234 file mkdir [file join $prefix "include"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5235 file mkdir [file join $prefix "lib"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5236 file mkdir [file join $prefix "tests"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5237
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5238 foreach subdir $pkgconf::install_inc_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5239 file mkdir [file join $prefix "include" $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5240 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5241 foreach subdir $pkgconf::install_test_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5242 file mkdir [file join $prefix "tests" $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5243 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5244
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5245 if { 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5246
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5247 # BLV - this code does not work with the makefiles that are now
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5248 # generated for the various include directories. If the old
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5249 # configuration involved a header file xyz.h from package A and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5250 # the new configuration involves a header file xyz.h from a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5251 # different package (or a different version of the same package)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5252 # then the old header file would hang around. A temporary
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5253 # work-around is to delete all header files. A proper fix is
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5254 # rather more complicated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5255
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5256 # Examine all the files currently in the include directory. If
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5257 # any of them are not recognised then they should be deleted.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5258 # Typically this happens if a package is removed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5259 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5260 # There may be problems if users put the install tree under
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5261 # source code control, in that files just disappear. However even if
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5262 # the source code control system restores an old file this should be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5263 # harmless. The directory routines ignore CVS subdirectories and all
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5264 # hidden files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5265 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5266 # Files in pkgconf have to be treated specially. These are listed
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5267 # in pkgconf_files, not header_files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5268
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5269 set existing_headers [locate_all_files [file join $prefix "include"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5270 set pkgconf_headers [locate_all_files [file join $prefix "include" pkgconf]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5271
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5272 foreach file $pkgconf_headers {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5273 if { [lsearch -exact $pkgconf::pkgconf_files $file] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5274 set filename [file join $prefix "include" $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5275 report "Deleting unnecessary file $filename"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5276 file delete -- $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5277 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5278
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5279 # Make sure that this file does not get processed again in the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5280 # next loop.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5281 set file [file join "pkgconf" $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5282 set index [lsearch -exact $existing_headers $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5283 ASSERT { $index != -1 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5284 set existing_headers [lreplace $existing_headers $index $index]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5285 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5286
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5287 foreach file $existing_headers {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5288 if { [lsearch -exact $pkgconf::install_inc_files $file] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5289 set filename [file join $prefix "include" $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5290 report "Deleting unnecessary file $filename"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5291 file delete -- $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5292 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5293 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5294
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5295 # If the user has switched from symbolic links to file copies then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5296 # it is also necessary to delete the old symbolic links. The reverse
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5297 # also applies.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5298 set existing_headers [locate_all_files [file join $prefix "include"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5299 set files_removed 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5300 foreach file $existing_headers {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5301
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5302 set filename [file join $prefix "include" $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5303 set type [file type $filename]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5304
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5305 if { ($pkgconf::config_data(use_links) == 0 ) && ($type == "link") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5306 file delete -- $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5307 set files_removed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5308 } elseif { ($pkgconf::config_data(use_links) == 1 ) && ($type == "file") } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5309 file delete -- $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5310 set files_removed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5311 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5312 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5313 if { $files_removed != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5314 if { $pkgconf::config_data(use_links) == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5315 report "Symbolic links in [file join $prefix include] deleted."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5316 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5317 report "Header file copies in [file join $prefix include] deleted."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5318 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5319 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5320
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5321 # Now get rid of any unwanted subdirectories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5322 set existing_subdirs [locate_all_subdirs [file join $prefix "include"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5323 foreach subdir $existing_subdirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5324 if { [lsearch -exact $pkgconf::install_inc_dirs $subdir] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5325 set dirname [file join $prefix "include" $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5326 report "Deleting unnecessary directory $dirname"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5327 file delete -force -- $dirname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5328 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5329 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5330
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5331 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5332
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5333 # BLV - delete all header files for now. This is inefficient but safe.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5334
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5335 set existing_headers [locate_all_files [file join $prefix "include"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5336 foreach file $existing_headers {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5337 set filename [file join $prefix "include" $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5338 file delete -- $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5339 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5340
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5341 # Now get rid of any unwanted subdirectories.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5342 set existing_subdirs [locate_all_subdirs [file join $prefix "include"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5343 foreach subdir $existing_subdirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5344 if { [lsearch -exact $pkgconf::install_inc_dirs $subdir] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5345 set dirname [file join $prefix "include" $subdir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5346 report "Deleting unnecessary directory $dirname"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5347 file delete -force -- $dirname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5348 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5349 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5350 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5351
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5352 # Get rid of all the files in lib.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5353 set lib_files [locate_files [file join $prefix "lib"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5354 if { $lib_files != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5355 report "Deleting old library files $lib_files"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5356 foreach file $lib_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5357 file delete -- [file join $prefix "lib" $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5358 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5359 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5360
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5361 # And get rid of any stamp files spread around the object tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5362 foreach src_dir $pkgconf::src_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5363 set dirname [file join $pkgconf::build_tree $src_dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5364 set stamp_files [locate_files $dirname "*.stamp"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5365 foreach file $stamp_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5366 file delete -- [file join $dirname $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5367 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5368 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5369
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5370 # Ditto for tests
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5371 set test_files [locate_all_files [file join $prefix "tests"]]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5372 if { $test_files != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5373 report "Deleting old test executables."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5374 foreach file $test_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5375 file delete -- [file join $prefix "tests" $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5376 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5377 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5378 foreach test_dir $pkgconf::tests_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5379 set dirname [file join $pkgconf::build_tree $test_dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5380 set stamp_files [locate_files $dirname "*.stamp"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5381 foreach file $stamp_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5382 file delete -- [file join $dirname $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5383 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5384 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5385
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5386 # If there has been a change in the packages in the system
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5387 # then the various makefile.deps files currently in the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5388 # build tree may contain references to header files that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5389 # are no longer present. Therefore it is necessary to
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5390 # get rid of the makefile.deps files. Any changes to the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5391 # packages will result in a new pkgconf/pkgconf.mak file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5392 # and all object files depend on this, so everything that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5393 # needs to be rebuilt will still be rebuilt and new
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5394 # dependency files will be generated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5395 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5396 # If there has not been a change to the packages then the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5397 # makefile.deps files must not be deleted, or there would
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5398 # be problems when just a header file is changed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5399 if { [packages_have_changed] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5400
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5401 foreach src_dir $pkgconf::src_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5402 set dirname [file join $pkgconf::build_tree $src_dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5403 set dep_files [locate_files $dirname "makefile.deps"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5404 foreach file $dep_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5405 file delete -- [file join $dirname $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5406 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5407 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5408
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5409 foreach test_dir $pkgconf::tests_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5410 set dirname [file join $pkgconf::build_tree $test_dir]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5411 set dep_files [locate_files $dirname "makefile.deps"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5412 foreach file $dep_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5413 file delete -- [file join $dirname $file]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5414 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5415 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5416 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5417 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5418
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5419 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5420 # {{{ Produce misc. files
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5421
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5422 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5423 # Three files have to be generated, and one additional file can be copied.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5424 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5425 # 1) pkgconf/makevars has to be copied from the component repository.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5426 # 2) pkgconf/makevars relies on pkgconf/pkgconf.mak, which is generated
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5427 # 3) pkgconf/system.h has to be generated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5428 # 5) pkgconf/makefile has to be generated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5429 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5430
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5431 proc pkgconf::produce_misc_files { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5432
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5433 report "Generating miscellaneous files."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5434
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5435 # Start by copying across pkgconf/makevars unless these files
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5436 # already exist in the build tree. Note that these files are
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5437 # user-editable so they cannot be overwritten automatically.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5438 set destname [file join $pkgconf::build_tree "pkgconf" "makevars"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5439 set sourcename [file join $pkgconf::component_repository "pkgconf" "makevars"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5440 if { (![file isfile $destname]) || ($pkgconf::force_arg != 0) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5441 file copy -force -- $sourcename $destname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5442 make_writable $destname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5443 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5444
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5445 # Next generate the file pkgconf.mak. This should only happen if any
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5446 # of the data in the file is changed, because there are file-level
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5447 # dependencies in the various makefiles. Additions to the packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5448 # file will normally be caught by a missing version number. Other
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5449 # changes to the packages or targets file may not be caught.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5450
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5451 set config_changed 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5452 if { [packages_have_changed] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5453 set config_changed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5454 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5455 if { [value_has_changed "prefix"] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5456 set config_changed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5457 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5458 foreach flag $pkgconf::known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5459 if { [value_has_changed "cflags,$flag"] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5460 set config_changed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5461 break
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5462 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5463 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5464 if { ![file isfile [file join $pkgconf::build_tree "pkgconf" "pkgconf.mak"]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5465 set config_changed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5466 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5467 if { $pkgconf::force_arg != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5468 set config_changed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5469 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5470
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5471 if { $config_changed != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5472
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5473 set filename [file join "pkgconf" "pkgconf.mak"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5474 set file [open [file join $pkgconf::build_tree $filename] "w"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5475 output_banner $file $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5476
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5477 # All PKGconf.mak files should include the master pkgconf.mak
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5478 # file ASAP. It is desirable to have a goal at the top of that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5479 # file. This is likely to be the first goal detected by make,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5480 # and hence the default.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5481 puts $file "\ndefault: build\n"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5482
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5483 set platform $pkgconf::config_data(platform)
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5484 if [info exists pkgconf::target_data($pkgconf::config_data(target),$platform,prefix)] {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5485 set command_prefix $pkgconf::target_data($pkgconf::config_data(target),$platform,prefix)
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5486 } else {
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5487 set command_prefix $pkgconf::target_data($pkgconf::config_data(target),prefix)
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5488 }
44
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5489 if {"" != $command_prefix} {
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5490 set command_prefix "${command_prefix}-"
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5491 }
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5492
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5493 puts $file ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5494 puts $file "COMPONENT_REPOSITORY\t\t:= [get_pathname_for_make $pkgconf::component_repository]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5495 puts $file "BUILD_TREE\t\t\t:= [get_pathname_for_make $pkgconf::build_tree]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5496
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5497 # Provide details of target etc. so that packages can specify
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5498 # per-target files.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5499 puts $file "TARGET\t\t\t\t:= $pkgconf::config_data(target)"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5500 puts $file "PLATFORM\t\t\t:= $pkgconf::config_data(platform)"
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5501 puts $file "BASE_PLATFORM\t\t\t:= $pkgconf::config_data(base_platform)"
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5502 puts $file "STARTUP\t\t\t\t:= $pkgconf::config_data(startup)"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5503
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5504 # The prefix (i.e. install directory) should default to somewhere
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5505 # relative to the build tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5506 set prefix $pkgconf::config_data(prefix)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5507 if { $prefix == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5508 set prefix [file join $pkgconf::build_tree "install"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5509 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5510 puts $file "PREFIX\t\t\t\t:= [get_pathname_for_make $prefix]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5511 if { $pkgconf::windows_host != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5512 puts $file "EXEEXT\t\t\t\t:= .exe"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5513 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5514 puts $file ""
44
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5515 puts $file "PKGCONF_CC\t\t\t:= ${command_prefix}gcc"
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5516 puts $file "PKGCONF_CXX\t\t\t:= ${command_prefix}gcc"
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5517 puts $file "PKGCONF_AR\t\t\t:= ${command_prefix}ar"
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5518 puts $file "PKGCONF_LD\t\t\t:= ${command_prefix}ld"
41bd4f3a90de Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents: 14
diff changeset
5519 puts $file "PKGCONF_OBJCOPY\t\t\t:= ${command_prefix}objcopy"
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5520 puts $file ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5521
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5522 foreach flag $pkgconf::known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5523 set value ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5524 if { [info exists pkgconf::config_data(cflags,$flag)] != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5525 set value $pkgconf::config_data(cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5526 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5527 set value [get_platform_cflags $pkgconf::config_data(target) $pkgconf::config_data(platform) $flag]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5528 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5529 if { $value != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5530 puts $file "PKGCONF_[set flag]\t\t:= $value"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5531 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5532 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5533 puts $file ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5534
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5535 foreach pkg [get_current_packages] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5536 set varname "[get_build_alias $pkg]_DIR"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5537 set dirname [file join $pkgconf::package_data($pkg,dir) $pkgconf::config_data($pkg,version)]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5538 puts $file "$varname\t\t:= $dirname"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5539 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5540
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5541 # There are several files containing information about make variables
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5542 # rules. The current file, pkgconf.mak, contains information that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5543 # is known to the pkgconf script and should not be edited by users.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5544 # There may be a per-package file in the build tree's pkgconf
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5545 # directory, containing per-package settings. And there is the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5546 # makevars file which users can edit to override anything else.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5547 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5548 # The makefiles for the various packages should only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5549 # need to include one of these files, the rest can be handled
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5550 # automatically. Since pkgconf.mak is generated it knows the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5551 # location of the build tree, making it a lot easier to find
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5552 # the others. Therefore pkgconf.mak is included first, then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5553 # the per-package file, and finally the makevars file.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5554
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5555 puts $file "
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5556 PACKAGE_RULES_FILE := \$(wildcard \$(BUILD_TREE)/pkgconf/\$(PACKAGE).mak)
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 44
diff changeset
5557 ifneq (\$(PACKAGE_RULES_FILE),)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 44
diff changeset
5558 include \$(PACKAGE_RULES_FILE)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5559 endif"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5560
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5561 puts $file "\ninclude \$(BUILD_TREE)/pkgconf/makevars"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5562
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5563 puts $file "\n# End of $filename"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5564 close $file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5565 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5566
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5567 # And the file system.h
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5568 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5569 # Again, because of file-level dependencies this file should only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5570 # be written out if anything has actually changed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5571 set config_changed 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5572 if { [packages_have_changed] || [value_has_changed "startup"] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5573 set config_changed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5574 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5575 if { ![file isfile [file join $pkgconf::build_tree "pkgconf" "system.h"]] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5576 set config_changed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5577 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5578 if { $pkgconf::force_arg != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5579 set config_changed 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5580 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5581
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5582 if { $config_changed != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5583
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5584 set filename [file join "pkgconf" "system.h"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5585 set file [open [file join $pkgconf::build_tree $filename] "w"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5586 puts $file \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5587 "#ifndef CYGONCE_PKGCONF_SYSTEM_H
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5588 #define CYGONCE_PKGCONF_SYSTEM_H
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5589 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5590 * File $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5591 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5592 * This file is generated automatically by the pkgconf program.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5593 * It should not be edited. Any changes to this file may be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5594 * overwritten by pkgconf.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5595 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5596 "
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5597 puts $file "#define CYG_HAL_[string toupper $pkgconf::config_data(target)]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5598 puts $file \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5599 "#define CYG_HAL_[string toupper $pkgconf::config_data(target)]_[string toupper $pkgconf::config_data(platform)]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5600 puts $file "#define CYG_HAL_STARTUP_[string toupper $pkgconf::config_data(startup)]"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5601 puts $file ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5602 set current_packages [get_current_packages]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5603 foreach pkg $pkgconf::known_packages {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5604 if { [lsearch -exact $current_packages $pkg] == -1 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5605 puts $file "#undef $pkg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5606 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5607 puts $file "#define $pkg"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5608 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5609 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5610
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5611 # Additions for the MLT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5612 puts $file "\n"
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 12
diff changeset
5613 puts $file "#define CYGHWR_MEMORY_LAYOUT_LDI <pkgconf/mlt_[set pkgconf::config_data(target)]_[set pkgconf::config_data(platform)]_[set pkgconf::config_data(startup)].ldi>"
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 12
diff changeset
5614 puts $file "#define CYGHWR_MEMORY_LAYOUT_H <pkgconf/mlt_[set pkgconf::config_data(target)]_[set pkgconf::config_data(platform)]_[set pkgconf::config_data(startup)].h>"
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
5615
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
5616 # Also output details of the HAL header files that should be included
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
5617 puts $file "\n"
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
5618 puts $file "#define CYGBLD_HAL_TARGET_H <pkgconf/hal_[set pkgconf::config_data(target)].h>"
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5619 puts $file "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_[set pkgconf::config_data(target)]_[set pkgconf::config_data(base_platform)].h>"
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5620
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5621 puts $file "\
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5622 \n#endif /* CYGONCE_PKGCONF_SYSTEM_H */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5623 /* EOF $filename */"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5624 close $file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5625 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5626
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5627 # 'system.mak' has the same basic information, but in a form
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5628 # that can be used by makefile fragments.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5629
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5630 if { $config_changed != 0 } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5631
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5632 set filename [file join "pkgconf" "system.mak"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5633 set file [open [file join $pkgconf::build_tree $filename] "w"]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5634 puts $file \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5635 "#
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5636 # File $filename
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5637 #
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5638 # This file is generated automatically by the pkgconf program.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5639 # It should not be edited. Any changes to this file may be
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5640 # overwritten by pkgconf.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5641 #
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5642 "
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5643 puts $file "CYG_HAL_[string toupper $pkgconf::config_data(target)]=1"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5644 puts $file \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5645 "CYG_HAL_[string toupper $pkgconf::config_data(target)]_[string toupper $pkgconf::config_data(platform)]=1"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5646 puts $file "CYG_HAL_STARTUP_[string toupper $pkgconf::config_data(startup)]=1"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5647 puts $file ""
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5648 set current_packages [get_current_packages]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5649 foreach pkg $pkgconf::known_packages {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5650 if { [lsearch -exact $current_packages $pkg] != -1 } {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5651 puts $file "$pkg=1"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5652 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5653 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5654 puts $file "\n# /* EOF $filename */"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5655 close $file
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5656 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5657
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5658 # Always output a makefile in the pkgconf directory. This is harmless
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5659 # because there should be no file-level dependencies on this file (just
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5660 # like the toplevel makefile).
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5661 set filename [file join "pkgconf" "makefile"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5662 set makefile [open [file join $pkgconf::build_tree $filename] "w"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5663 output_banner $makefile $filename
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5664
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5665 puts $makefile \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5666 "include pkgconf.mak
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5667
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5668 .PHONY : build clean
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5669 HEADERS := $pkgconf::pkgconf_files
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5670 TARGETS := \$(foreach hdr,\$(HEADERS),\$(PREFIX)/include/pkgconf/\$(hdr))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5671
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5672 build: \$(TARGETS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5673 "
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5674
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5675 foreach hdr $pkgconf::pkgconf_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5676 puts $makefile "\$(PREFIX)/include/pkgconf/$hdr : $hdr"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5677 if { $pkgconf::config_data(use_links) == 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5678 puts $makefile "\t@\$(CP) \$< \$@"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5679 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5680 puts $makefile "\t@\$(RM) \$@; ln -s \$< \$@"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5681 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5682 puts $makefile ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5683 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5684
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5685 puts $makefile "clean:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5686 foreach hdr $pkgconf::pkgconf_files {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5687 puts $makefile "\t@\$(RM) \$(PREFIX)/include/pkgconf/$hdr"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5688 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5689 puts $makefile "\n# End of $filename"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5690 close $makefile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5691
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5692 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5693
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5694 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5695 # {{{ Produce the master makefile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5696
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5697 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5698 # This routine is responsible for generating the master makefile that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5699 # exists at the top of a build tree. This makefile supports three main
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5700 # targets: default, tests and clean. There is a subsidiary target
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5701 # "headers" which takes care of the header files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5702 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5703
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5704 proc pkgconf::produce_makefile { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5705
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5706 report "Generating toplevel makefile."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5707
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5708 ASSERT { $pkgconf::build_tree != "" }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5709 set filename [file join $pkgconf::build_tree "makefile"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5710 set makefile [open $filename "w"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5711 output_banner $makefile "makefile"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5712
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5713 puts $makefile \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5714 "
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5715 include pkgconf/pkgconf.mak
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
5716 .PHONY: default build clean tests headers"
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5717
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 44
diff changeset
5718 puts $makefile "\nbuild: \$(PREFIX)/lib/extras.o"
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5719 puts $makefile "\t@echo Build finished."
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5720
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 44
diff changeset
5721 puts $makefile "\n\$(PREFIX)/lib/extras.o: \$(PREFIX)/lib/libextras.a"
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 44
diff changeset
5722 puts $makefile "\t\$(CC) \$(ARCHFLAGS) \$(LDARCHFLAGS) -nostdlib -Wl,-r -Wl,--whole-archive \$(PREFIX)/lib/libextras.a -o \$(PREFIX)/lib/extras.o"
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5723
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 44
diff changeset
5724 puts $makefile "\n\$(PREFIX)/lib/libextras.a: headers"
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5725 foreach src_dir $pkgconf::src_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5726 puts $makefile "\t\$(MAKE) -C $src_dir"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5727 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5728
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5729 puts $makefile "\ntests: build"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5730 foreach tests_dir $pkgconf::tests_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5731 puts $makefile "\t\$(MAKE) -C $tests_dir"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5732 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5733 puts $makefile "\t@echo Tests build finished."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5734
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5735 puts $makefile "\nmisc: build"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5736 foreach misc_dir $pkgconf::misc_dirs {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5737 puts $makefile "\t\$(MAKE) -C $misc_dir"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5738 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5739 puts $makefile "\t@echo Misc build finished."
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5740
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5741 puts $makefile \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5742 "\nlibobjs := \$(wildcard \$(PREFIX)/lib/*)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5743 clean:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5744 ifneq (\$(libobjs),)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5745 \t\$(RM) \$(libobjs)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5746 endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5747 \tmake -C pkgconf clean"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5748 foreach src_dir $pkgconf::src_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5749 puts $makefile "\t\$(MAKE) -C $src_dir clean"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5750 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5751 foreach misc_dir $pkgconf::misc_dirs {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5752 puts $makefile "\t\$(MAKE) -C $misc_dir clean"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5753 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5754 foreach tests_dir $pkgconf::tests_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5755 puts $makefile "\t\$(MAKE) -C $tests_dir clean"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5756 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5757 foreach inc_dir $pkgconf::inc_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5758 puts $makefile "\t@\$(MAKE) -silent -C $inc_dir clean"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5759 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5760 puts $makefile "\t@echo Clean finished."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5761
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5762 puts $makefile "\nheaders:"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5763 puts $makefile "\t@echo Checking header files."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5764 puts $makefile "\t@\$(MAKE) -silent -C pkgconf"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5765 foreach inc_dir $pkgconf::inc_dirs {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5766 puts $makefile "\t@\$(MAKE) -silent -C $inc_dir"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5767 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5768
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5769 puts $makefile ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5770 puts $makefile "# End of makefile"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5771 close $makefile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5772 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5773
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5774 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5775
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5776 # {{{ Produce_build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5777
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5778 proc pkgconf::produce_build_tree { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5779
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5780 # First, check that all the requirements have been satisfied. Normally
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5781 # this will have been taken care of earlier.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5782 check_requirements
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5783
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5784 # What is the install tree ?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5785 set prefix $pkgconf::config_data(prefix)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5786 if { $prefix == "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5787 set prefix [file join $pkgconf::build_tree "install"]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5788 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5789 set target $pkgconf::config_data(target)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5790 set platform $pkgconf::config_data(platform)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5791 set startup $pkgconf::config_data(startup)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5792
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5793 # Report the configuration that is being built.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5794 report "Generating build tree."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5795 report "Component repository is $pkgconf::component_repository"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5796 report "Build tree is $pkgconf::build_tree"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5797 report "Install directory is $prefix"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5798 report "Architecture $target, platform $platform, startup $startup."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5799 if { $pkgconf::config_data(use_links) != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5800 report "Using symbolic links for the header files."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5801 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5802
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5803 # Reset the list of all the header files that should be in the install
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5804 # tree, and related variables.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5805 set pkgconf::inc_dirs ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5806 set pkgconf::src_dirs ""
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5807 set pkgconf::misc_dirs ""
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5808 set pkgconf::tests_dirs ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5809 set pkgconf::install_inc_dirs "pkgconf"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5810 set pkgconf::install_inc_files ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5811 set pkgconf::pkgconf_files "makevars pkgconf.mak system.h"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5812 set pkgconf::install_test_dirs ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5813
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5814 set status [catch {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5815
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5816 # Create the toplevel build tree directory, if necessary.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5817 if { ! [file exists $pkgconf::build_tree] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5818 report "Creating build tree $pkgconf::build_tree"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5819 file mkdir $pkgconf::build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5820 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5821 # Create the pkgconf subdirectory. A failure here indicates that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5822 # the build tree is not writable, and it is useful to detect this
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5823 # before too much processing takes place.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5824 set dirname [file join $pkgconf::build_tree pkgconf]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5825 if { ! [file exists $dirname] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5826 report "Creating directory $dirname"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5827 file mkdir $dirname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5828 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5829
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5830 # Process each package that is part of the current configuration
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5831 foreach pkg [get_current_packages] {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5832 set dirname $pkgconf::package_data($pkg,dir)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5833 set dirname [file join $dirname $pkgconf::config_data($pkg,version)]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5834 process_package $pkg $dirname
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5835 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5836
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5837 # If this is a debug build (according to the --debug command line
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5838 # option), update the appropriate packages.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5839 if {$pkgconf::debug_arg != 0} {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5840 enable_package_debug_options
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5841 } elseif {$pkgconf::nodebug_arg != 0} {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5842 disable_package_debug_options
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5843 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5844
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5845 # The install tree must exist before the misc files are generated.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5846 # See get_pathname_for_make for details.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5847 produce_install_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5848 produce_misc_files
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5849 produce_makefile
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5850
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5851 report "Generating save file."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5852 write_save_file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5853 report "The Build tree is ready."
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5854
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5855 } message]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5856
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5857 if { $status != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5858 fatal_error "An unexpected error occurred while generating the build tree: $message"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5859 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5860 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5861
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5862 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5863
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5864 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5865 # {{{ main()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5866
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5867 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5868 # Initialise data. This routine is responsible for reading in the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5869 # packages file and the targets file, setting up the default data,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5870 # reading in the save file if any, and processing the command line
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5871 # arguments if any.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5872 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5873
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5874 proc pkgconf::initialise_data { } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5875
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5876 # First, read the packages and targets files. These routines will
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5877 # also deal with the --packages and --targets arguments, and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5878 # they will check for any invalid packages or targets that may
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5879 # have been passed. The order of these two calls should not be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5880 # changed since read_targets needs to know about the available
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5881 # packages for some of its validations.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5882 pkgconf::read_packages
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5883 pkgconf::read_targets
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5884
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5885 # If either or both of the --packages or --targets arguments
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5886 # were used, do not go any further. The user was just asking
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5887 # for information. Ditto for --pkgdata, which can be used by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5888 # other programs to get information about the various
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5889 # packages in a format more appropriate for them.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5890 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5891 # NOTE: the parsing code does not actually check that no
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5892 # further arguments were passed, but it is unlikely that the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5893 # user would both ask for a list of packages and expect
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5894 # something to happen.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5895 if { ( $pkgconf::list_packages_arg != 0 ) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5896 ( $pkgconf::list_targets_arg != 0 ) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5897 ( $pkgconf::list_pkgdata_arg != 0 ) } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5898 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5899 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5900
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5901 # Set up default values for all options which are managed directly
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5902 # by this program.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5903 pkgconf::setup_defaults
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5904
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5905 # Check for a save file in the existing build tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5906 # If so read it in, updating the default values.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5907 pkgconf::read_save_file
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5908
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5909 # Now process the command line arguments, which will again result
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5910 # in updates to the default values.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5911 pkgconf::process_arguments
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5912
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5913 # If the -flags argument was used, list the compiler flags currently
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5914 # in use. This could not be done earlier since the compiler flags
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5915 # may depend on the save file and on other command line arguments.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5916 if { $pkgconf::list_flags_arg != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5917 foreach flag $pkgconf::known_compiler_flags {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5918 set value ""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5919 if { [info exists pkgconf::config_data(cflags,$flag)] != 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5920 set value $pkgconf::config_data(cflags,$flag)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5921 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5922 set value [get_platform_cflags $pkgconf::config_data(target) $pkgconf::config_data(platform) $flag]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5923 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5924 if { $value != "" } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5925 puts "$flag\t\"$value\""
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5926 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5927 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5928 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5929 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5930
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5931 if { 0 } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5932 puts "target: $pkgconf::config_data(target)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5933 puts "platform: $pkgconf::config_data(platform)"
12
4cc3eff958ab Merge from eCos master repository on 1999-06-04-22:24:56-BST
jlarmour
parents: 4
diff changeset
5934 puts "base_platform: $pkgconf::config_data(base_platform)"
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5935 puts "startup: $pkgconf::config_data(startup)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5936 puts "prefix: $pkgconf::config_data(prefix)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5937 puts "packages: $pkgconf::config_data(packages)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5938 foreach pkg $pkgconf::config_data(packages) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5939 puts "$pkg version $pkgconf::config_data($pkg,version)"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5940 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5941 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5942 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5943 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5944
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5945 # ----------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5946 # Main(). This code only runs if the script is being run stand-alone rather
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5947 # than as part of a larger application. The controlling predicate is the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5948 # existence of the variable pkgconf_not_standalone which can be set by
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5949 # the containing program if any.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5950 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5951
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5952 if { ! [info exists pkgconf_not_standalone] } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5953
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5954 # Do some necessary GUI initialisation such as hiding the main window
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5955 # during startup.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5956 pkgconf::gui_standalone_init
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5957
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5958 # Decide where warnings and fatal errors should go.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5959 pkgconf::initialise_error_handling
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5960
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5961 # Parse the arguments and set the global variables appropriately.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5962 pkgconf::parse_arguments $argv0 $argv
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5963
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5964 # Initialise all the data, e.g. by reading in the packages and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5965 # targets files.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5966 pkgconf::initialise_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5967
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5968 # At this stage the code can do one of two things: run the GUI,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5969 # or build/update the build tree.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5970 # The GUI can be run if the necessary commands are available and
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5971 # if the user did not pass -nw.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5972 if { $pkgconf::gui_possible && ! $pkgconf::no_windows_arg } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5973 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5974 set pkgconf::gui_mode 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5975 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5976
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5977 # Reset error handling to the correct mode
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5978 pkgconf::initialise_error_handling
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5979
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5980 # Either enter GUI mode, or produce the build tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5981 if { $pkgconf::gui_mode } {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5982 pkgconf::gui
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5983 } else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5984 pkgconf::produce_build_tree
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5985 exit 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5986 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5987 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5988
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5989 # }}}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5990
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5991