Browse code

* new mulle-bootstrap shell command to make life in a virtual env even easier

Nat! authored on 25-07-2017 19:54:46
Showing 7 changed files
... ...
@@ -56,6 +56,7 @@ src/mulle-bootstrap-repositories.sh
56 56
 src/mulle-bootstrap-scm.sh
57 57
 src/mulle-bootstrap-scripts.sh
58 58
 src/mulle-bootstrap-settings.sh
59
+src/mulle-bootstrap-shell.sh
59 60
 src/mulle-bootstrap-show.sh
60 61
 src/mulle-bootstrap-snip.sh
61 62
 src/mulle-bootstrap-status.sh
... ...
@@ -75,6 +75,9 @@ dependencies with **cmake**. It will place the headers and the produced
75 75
 libraries into the `dependencies/lib`  and `dependencies/include` folders.
76 76
 
77 77
 
78
+Now you can enter your new "virtual environment" with `mulle-bootstrap shell`.
79
+
80
+
78 81
 ## Tell me more
79 82
 
80 83
 * [How to install](dox/INSTALL.md)
... ...
@@ -1,5 +1,6 @@
1
-## 3.9.0
1
+### 3.9.0
2 2
 
3
+* new mulle-bootstrap shell command to make life in a virtual env even easier
3 4
 * fix various xcode related build bugs
4 5
 * mulle-bootstrap doesn't do kill 0 anymore
5 6
 * add `mulle-bootstrap-core-options.sh` for external script users
... ...
@@ -9,20 +9,25 @@ in it and you are all set:
9 9
 
10 10
 ```console
11 11
 mulle-bootstrap
12
+mulle-bootstrap shell
12 13
 ```
14
+
13 15
 `mulle-bootstrap` is the shortened command of `mulle-bootstrap bootstrap`, which
14
-in turn executes:
16
+in turn executes
17
+
18
+1. `mulle-bootstrap fetch` to download all required dependencies.
19
+2. `mulle-bootstrap build` to install those dependencies into `./dependencies`.
15 20
 
16 21
 
17
-#### mulle-bootstrap fetch
22
+#### mulle-bootstrap upgrade
18 23
 
19
-Downloads all required libraries into a `.repos` folder.
24
+Upgrade all dependencies. You need to build afterwards again.
20 25
 
21 26
 
22
-#### mulle-bootstrap build
27
+#### mulle-bootstrap shell
23 28
 
24
-Compiles the required libraries contained in the `.repos` folder into
25
-`./dependencies`.
29
+Start a shell with the environment set up, asto execute binaries from
30
+`dependencies/bin`.
26 31
 
27 32
 
28 33
 ## Commands for a project maintainer
... ...
@@ -57,6 +57,7 @@ SHOWN_COMMANDS="\
57 57
    clean         : cleans mulle-bootstrap produced files.
58 58
    defer         : join a master mulle-bootstrap project
59 59
    emancipate    : emancipate from a master mulle-bootstrap project
60
+   shell         : create a shell based on SHELL with PATH set
60 61
    paths         : get include and library paths
61 62
    init          : initializes a bootstrap project
62 63
    update        : updates repositories (fetch).
... ...
@@ -563,6 +564,12 @@ bootstrap_main()
563 564
          setting_main "$@" || exit 1
564 565
       ;;
565 566
 
567
+      shell)
568
+         . mulle-bootstrap-shell.sh
569
+
570
+         shell_main "$@" || exit 1
571
+      ;;
572
+
566 573
       systeminstall)
567 574
          . mulle-bootstrap-systeminstall.sh
568 575
 
... ...
@@ -152,13 +152,13 @@ collect_frameworks()
152 152
 
153 153
 
154 154
 #
155
-# Construct FLAGS paths
155
+# These _value suffixed functions are values emitters, without any "KEY=" prefix
156 156
 #
157
-_flags_emit_path()
157
+_flags_emit_path_value()
158 158
 {
159 159
    local directory="$1"
160 160
 
161
-   if [ "${OPTION_WITH_MISSING_PATHS}" = "YES" -o -d "${directory}" ]
161
+   if [ "${OPTION_WITH_MISSING_PATHS}" = "YES" ] || [ -d "${directory}" ]
162 162
    then
163 163
       if [ "${OPTION_USE_ABSOLUTE_PATHS}" = "YES" ]
164 164
       then
... ...
@@ -174,25 +174,34 @@ _flags_binpath_value()
174 174
    local pathline
175 175
    local line
176 176
 
177
-   pathline="`_flags_emit_path "${DEPENDENCIES_DIR}/bin"`"
178
-   line="`_flags_emit_path "${ADDICTIONS_DIR}/bin"`"
177
+   pathline="`_flags_emit_path_value "${DEPENDENCIES_DIR}/bin"`"
178
+   line="`_flags_emit_path_value "${ADDICTIONS_DIR}/bin"`"
179 179
 
180 180
    add_path "${pathline}" "${line}"
181 181
 }
182 182
 
183 183
 
184
-_flags_emit_option()
184
+_flags_expanded_binpath_value()
185
+{
186
+   local pathline
187
+
188
+   pathline="`_flags_binpath_value`"
189
+   add_path "${pathline}" "${PATH}"
190
+}
191
+
192
+
193
+
194
+_flags_emit_option_value()
185 195
 {
186 196
    local prefix="$1"
187 197
    local directory="$2"
188 198
 
189
-   if [ "${OPTION_WITH_MISSING_PATHS}" = "YES" -o -d "${directory}" ]
199
+   local value
200
+
201
+   value="`_flags_emit_path_value "${directory}"`"
202
+   if [ ! -z "${value}" ]
190 203
    then
191
-      if [ "${OPTION_USE_ABSOLUTE_PATHS}" = "YES" ]
192
-      then
193
-         directory="`absolutepath "${directory}"`"
194
-      fi
195
-      echo "${prefix}${OPTION_QUOTE}${directory}${OPTION_QUOTE}"
204
+      echo "${prefix}${OPTION_QUOTE}${value}${OPTION_QUOTE}"
196 205
    fi
197 206
 }
198 207
 
... ...
@@ -203,11 +212,11 @@ _flags_cppflags_value()
203 212
    then
204 213
       if [ "${OPTION_WITH_DEPENDENCIES}" = "YES" ]
205 214
       then
206
-         _flags_emit_option "-I" "${DEPENDENCIES_DIR}/include"
215
+         _flags_emit_option_value "-I" "${DEPENDENCIES_DIR}/include"
207 216
       fi
208 217
       if [ "${OPTION_WITH_ADDICTIONS}" = "YES" ]
209 218
       then
210
-         _flags_emit_option "-I" "${ADDICTIONS_DIR}/include"
219
+         _flags_emit_option_value "-I" "${ADDICTIONS_DIR}/include"
211 220
       fi
212 221
    fi
213 222
 
... ...
@@ -215,11 +224,11 @@ _flags_cppflags_value()
215 224
    then
216 225
       if [ "${OPTION_WITH_DEPENDENCIES}" = "YES" ]
217 226
       then
218
-         _flags_emit_option "-F" "${DEPENDENCIES_DIR}/Frameworks"
227
+         _flags_emit_option_value "-F" "${DEPENDENCIES_DIR}/Frameworks"
219 228
       fi
220 229
       if [ "${OPTION_WITH_ADDICTIONS}" = "YES" ]
221 230
       then
222
-         _flags_emit_option "-F" "${ADDICTIONS_DIR}/Frameworks"
231
+         _flags_emit_option_value "-F" "${ADDICTIONS_DIR}/Frameworks"
223 232
       fi
224 233
    fi
225 234
 }
... ...
@@ -231,11 +240,11 @@ _flags_ldflags_value()
231 240
    then
232 241
       if [ "${OPTION_WITH_DEPENDENCIES}" = "YES" ]
233 242
       then
234
-         _flags_emit_option "-L" "${DEPENDENCIES_DIR}/lib"
243
+         _flags_emit_option_value "-L" "${DEPENDENCIES_DIR}/lib"
235 244
       fi
236 245
       if [ "${OPTION_WITH_ADDICTIONS}" = "YES" ]
237 246
       then
238
-         _flags_emit_option "-L" "${ADDICTIONS_DIR}/lib"
247
+         _flags_emit_option_value "-L" "${ADDICTIONS_DIR}/lib"
239 248
       fi
240 249
    fi
241 250
 
... ...
@@ -243,11 +252,11 @@ _flags_ldflags_value()
243 252
    then
244 253
       if [ "${OPTION_WITH_DEPENDENCIES}" = "YES" ]
245 254
       then
246
-         _flags_emit_option "-F" "${DEPENDENCIES_DIR}/Frameworks"
255
+         _flags_emit_option_value "-F" "${DEPENDENCIES_DIR}/Frameworks"
247 256
       fi
248 257
       if [ "${OPTION_WITH_ADDICTIONS}" = "YES" ]
249 258
       then
250
-         _flags_emit_option "-F" "${ADDICTIONS_DIR}/Frameworks"
259
+         _flags_emit_option_value "-F" "${ADDICTIONS_DIR}/Frameworks"
251 260
       fi
252 261
    fi
253 262
 
... ...
@@ -297,7 +306,7 @@ _flags_cflags_value()
297 306
 #
298 307
 # Construct search paths
299 308
 #
300
-_flags_add_search_path()
309
+_flags_add_search_path_value()
301 310
 {
302 311
    local result="$1"
303 312
    local searchpath="$2"
... ...
@@ -323,11 +332,11 @@ _flags_frameworkpath_value()
323 332
    then
324 333
       if [ "${OPTION_WITH_DEPENDENCIES}" = "YES" ]
325 334
       then
326
-         result="`_flags_add_search_path "${result}" "${DEPENDENCIES_DIR}/Frameworks"`"
335
+         result="`_flags_add_search_path_value "${result}" "${DEPENDENCIES_DIR}/Frameworks"`"
327 336
       fi
328 337
       if [ "${OPTION_WITH_ADDICTIONS}" = "YES" ]
329 338
       then
330
-         result="`_flags_add_search_path "${result}" "${ADDICTIONS_DIR}/Frameworks"`"
339
+         result="`_flags_add_search_path_value "${result}" "${ADDICTIONS_DIR}/Frameworks"`"
331 340
       fi
332 341
    fi
333 342
 
... ...
@@ -346,11 +355,11 @@ _flags_headerpath_value()
346 355
    then
347 356
       if [ "${OPTION_WITH_DEPENDENCIES}" = "YES" ]
348 357
       then
349
-         result="`_flags_add_search_path "${result}" "${DEPENDENCIES_DIR}/include"`"
358
+         result="`_flags_add_search_path_value "${result}" "${DEPENDENCIES_DIR}/include"`"
350 359
       fi
351 360
       if [ "${OPTION_WITH_ADDICTIONS}" = "YES" ]
352 361
       then
353
-         result="`_flags_add_search_path "${result}" "${ADDICTIONS_DIR}/include"`"
362
+         result="`_flags_add_search_path_value "${result}" "${ADDICTIONS_DIR}/include"`"
354 363
       fi
355 364
    fi
356 365
 
... ...
@@ -371,12 +380,12 @@ _flags_librarypath_value()
371 380
       then
372 381
          if [ "${OPTION_WITH_MISSING_PATHS}" = "YES" -o -d "${DEPENDENCIES_DIR}/lib" ]
373 382
          then
374
-            result="`_flags_add_search_path "${result}" "${DEPENDENCIES_DIR}/lib"`"
383
+            result="`_flags_add_search_path_value "${result}" "${DEPENDENCIES_DIR}/lib"`"
375 384
          fi
376 385
       fi
377 386
       if [ "${OPTION_WITH_ADDICTIONS}" = "YES" ]
378 387
       then
379
-         result="`_flags_add_search_path "${result}" "${ADDICTIONS_DIR}/lib"`"
388
+         result="`_flags_add_search_path_value "${result}" "${ADDICTIONS_DIR}/lib"`"
380 389
       fi
381 390
    fi
382 391
 
... ...
@@ -387,6 +396,28 @@ _flags_librarypath_value()
387 396
 }
388 397
 
389 398
 
399
+#
400
+# Construct output from values now
401
+#
402
+_flags_do_path()
403
+{
404
+   local result="$1"
405
+
406
+   local values
407
+   local line
408
+   local tmppath
409
+
410
+   values="`_flags_expanded_binpath_value`"
411
+   if [ ! -z "${values}" ]
412
+   then
413
+      line="PATH=${OPTION_QUOTE}${values}${OPTION_QUOTE}"
414
+      result="`add_line "${result}" "${line}"`"
415
+   fi
416
+
417
+   printf "%s" "$result"
418
+}
419
+
420
+
390 421
 _flags_do_cmake_flags()
391 422
 {
392 423
    local result="$1"
... ...
@@ -452,39 +483,24 @@ _flags_do_cmake_paths()
452 483
 }
453 484
 
454 485
 
455
-
456
-_flags_do_path()
486
+_flags_do_make_environment()
457 487
 {
458 488
    local result="$1"
459 489
 
460 490
    local values
461 491
    local line
462
-   local tmppath
463 492
 
464
-   values="`_flags_binpath_value`"
493
+   values="`_flags_emit_path_value "${ADDICTIONS_DIR}"`"
465 494
    if [ ! -z "${values}" ]
466 495
    then
467
-      tmppath="`add_path "${values}" "${PATH}"`"
468
-      line="PATH=${OPTION_QUOTE}${tmppath}${OPTION_QUOTE}"
469
-      result="`add_line "${result}" "${line}"`"
496
+      result="`add_line "${result}" "ADDICTIONS_DIR=${OPTION_QUOTE}${values}${OPTION_QUOTE}"`"
470 497
    fi
471 498
 
472
-   printf "%s" "$result"
473
-}
474
-
475
-
476
-_flags_do_make_environment()
477
-{
478
-   local result="$1"
479
-
480
-   local values
481
-   local line
482
-
483
-   values="`_flags_emit_path "${ADDICTIONS_DIR}"`"
484
-   result="`add_line "${result}" "ADDICTIONS_DIR=${OPTION_QUOTE}${values}${OPTION_QUOTE}"`"
485
-
486
-   values="`_flags_emit_path "${DEPENDENCIES_DIR}"`"
487
-   result="`add_line "${result}" "DEPENDENCIES_DIR=${OPTION_QUOTE}${values}${OPTION_QUOTE}"`"
499
+   values="`_flags_emit_path_value "${DEPENDENCIES_DIR}"`"
500
+   if [ ! -z "${values}" ]
501
+   then
502
+      result="`add_line "${result}" "DEPENDENCIES_DIR=${OPTION_QUOTE}${values}${OPTION_QUOTE}"`"
503
+   fi
488 504
 
489 505
    values="`_flags_cppflags_value`"
490 506
    if [ ! -z "${values}" ]
... ...
@@ -502,14 +518,7 @@ _flags_do_make_environment()
502 518
       result="`add_line "${result}" "${line}"`"
503 519
    fi
504 520
 
505
-   values="`_flags_binpath_value`"
506
-   if [ ! -z "${values}" ]
507
-   then
508
-      result="`_flags_do_path`"
509
-      result="`add_line "${result}" "${line}"`"
510
-   fi
511
-
512
-   printf "%s" "$result"
521
+   _flags_do_path "${result}"
513 522
 }
514 523
 
515 524
 
... ...
@@ -520,27 +529,27 @@ _flags_do_run_environment()
520 529
    local values
521 530
    local line
522 531
 
523
-   values="`_flags_emit_path "${ADDICTIONS_DIR}"`"
532
+   values="`_flags_emit_path_value "${ADDICTIONS_DIR}"`"
524 533
    if [ ! -z "${values}" ]
525 534
    then
526 535
       result="`add_line "${result}" "ADDICTIONS_DIR=${OPTION_QUOTE}${values}${OPTION_QUOTE}"`"
527 536
    fi
528
-   values="`_flags_emit_path "${DEPENDENCIES_DIR}"`"
529 537
 
538
+   values="`_flags_emit_path_value "${DEPENDENCIES_DIR}"`"
530 539
    if [ ! -z "${values}" ]
531 540
    then
532 541
       result="`add_line "${result}" "DEPENDENCIES_DIR=${OPTION_QUOTE}${values}${OPTION_QUOTE}"`"
533 542
    fi
534
-   values="`_flags_librarypath_value`"
535 543
 
544
+   values="`_flags_librarypath_value`"
536 545
    if [ ! -z "${values}" ]
537 546
    then
538 547
       case "${UNAME}" in
539 548
          darwin)
540
-            line="DYLD_FALLBACK_LIBRARY_PATH=${OPTION_QUOTE}${values}:${HOME}/lib:/usr/local/lib:/lib:/usr/lib${OPTION_QUOTE}"
549
+            line="DYLD_LIBRARY_PATH=${OPTION_QUOTE}${values}${OPTION_QUOTE}"
541 550
          ;;
542 551
 
543
-         *)
552
+         linux|*)
544 553
             line="LD_LIBRARY_PATH=${OPTION_QUOTE}${values}:${LD_LIBRARY_PATH}${OPTION_QUOTE}"
545 554
          ;;
546 555
       esac
... ...
@@ -552,20 +561,13 @@ _flags_do_run_environment()
552 561
    then
553 562
       case "${UNAME}" in
554 563
          darwin)
555
-            line="DYLD_FALLBACK_FRAMEWORK_PATH=${OPTION_QUOTE}${values}:/Library/Frameworks:/Network/Library/Frameworks:/System/Library/Frameworks${OPTION_QUOTE}"
564
+            line="DYLD_FRAMEWORK_PATH=${OPTION_QUOTE}${values}${OPTION_QUOTE}"
556 565
             result="`add_line "${result}" "${line}"`"
557 566
          ;;
558 567
       esac
559 568
    fi
560 569
 
561
-   values="`_flags_binpath_value`"
562
-   if [ ! -z "${values}" ]
563
-   then
564
-      result="`_flags_do_path`"
565
-      result="`add_line "${result}" "${line}"`"
566
-   fi
567
-
568
-   printf "%s" "$result"
570
+   _flags_do_path "${result}"
569 571
 }
570 572
 
571 573
 
... ...
@@ -616,6 +618,7 @@ paths_main()
616 618
    local OPTION_WITH_MISSING_PATHS="NO"
617 619
    local OPTION_PATH_SEPARATOR=":"
618 620
    local OPTION_QUOTE=""
621
+   local OPTION_SHELL_QUOTE="\""
619 622
    local OPTION_LINE_SEPERATOR=" "
620 623
 
621 624
    log_debug ":paths_main:"
... ...
@@ -672,6 +675,10 @@ paths_main()
672 675
             OPTION_LINE_SEPERATOR="\n"
673 676
          ;;
674 677
 
678
+         -r|--relative-paths)
679
+            OPTION_USE_ABSOLUTE_PATHS="NO"
680
+         ;;
681
+
675 682
          -na|--no-addictions)
676 683
             OPTION_WITH_ADDICTIONS="NO"
677 684
          ;;
... ...
@@ -696,6 +703,13 @@ paths_main()
696 703
             OPTION_WITH_LIBRARYPATHS="NO"
697 704
          ;;
698 705
 
706
+         --shell-quote)
707
+            shift
708
+            [ $# -eq 0 ] && fail "quote missing"
709
+
710
+            OPTION_SHELL_QUOTE="$1"
711
+         ;;
712
+
699 713
          -q|--quote)
700 714
             shift
701 715
             [ $# -eq 0 ] && fail "quote missing"
... ...
@@ -746,12 +760,12 @@ paths_main()
746 760
 
747 761
       case "${type}" in
748 762
          "addictions")
749
-            values="`_flags_emit_path "${ADDICTIONS_DIR}"`"
763
+            values="`_flags_emit_path_value "${ADDICTIONS_DIR}"`"
750 764
             result="`add_line "${result}" "${values}"`"
751 765
          ;;
752 766
 
753 767
          "dependencies")
754
-            values="`_flags_emit_path "${DEPENDENCIES_DIR}"`"
768
+            values="`_flags_emit_path_value "${DEPENDENCIES_DIR}"`"
755 769
             result="`add_line "${result}" "${values}"`"
756 770
          ;;
757 771
 
... ...
@@ -789,6 +803,8 @@ paths_main()
789 803
       type="$1"
790 804
    done
791 805
 
806
+   result="`sort -u <<< "${result}"`"
807
+
792 808
    if [ ! -z "${result}" ]
793 809
    then
794 810
       if [ "${OPTION_LINE_SEPERATOR}" = " " ]
795 811
new file mode 100644
... ...
@@ -0,0 +1,121 @@
1
+#! /usr/bin/env bash
2
+#
3
+#   Copyright (c) 2015 Nat! - Mulle kybernetiK
4
+#   All rights reserved.
5
+#
6
+#   Redistribution and use in source and binary forms, with or without
7
+#   modification, are permitted provided that the following conditions are met:
8
+#
9
+#   Redistributions of source code must retain the above copyright notice, this
10
+#   list of conditions and the following disclaimer.
11
+#
12
+#   Redistributions in binary form must reproduce the above copyright notice,
13
+#   this list of conditions and the following disclaimer in the documentation
14
+#   and/or other materials provided with the distribution.
15
+#
16
+#   Neither the name of Mulle kybernetiK nor the names of its contributors
17
+#   may be used to endorse or promote products derived from this software
18
+#   without specific prior written permission.
19
+#
20
+#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+#   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+#   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
+#   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
24
+#   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
+#   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
+#   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+#   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
+#   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
+#   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
+#   POSSIBILITY OF SUCH DAMAGE.
31
+#
32
+MULLE_BOOTSTRAP_SHELL_SH="included"
33
+
34
+
35
+setting_usage()
36
+{
37
+    cat <<EOF >&2
38
+Usage:
39
+   ${MULLE_EXECUTABLE} shell [options]
40
+
41
+Options:
42
+   -m   : set CPPFLAGS and LDFLAGS in environment for make
43
+
44
+EOF
45
+  exit 1
46
+}
47
+
48
+
49
+shell_main()
50
+{
51
+   local env_string
52
+   local cmd_string
53
+   local prompt_string
54
+
55
+   local OPTION_MAKE_FLAGS="NO"
56
+
57
+   while [ $# -ne 0 ]
58
+   do
59
+      case "$1" in
60
+         -h|--help)
61
+            shell_usage
62
+         ;;
63
+
64
+         -m|--make)
65
+            OPTION_MAKE_FLAGS="YES"
66
+         ;;
67
+
68
+
69
+         # argument gitflags
70
+         -*)
71
+            fail "unknown option $1"
72
+         ;;
73
+
74
+         *)
75
+            break
76
+         ;;
77
+      esac
78
+
79
+      shift
80
+   done
81
+
82
+
83
+   #
84
+   # could pimp this up with CPPFLAGS and LDFLAGS too
85
+   # but do I want this ?
86
+   #
87
+   local options
88
+
89
+   options="run"
90
+   if [ "${OPTION_MAKE_FLAGS}" = "YES" ]
91
+   then
92
+      options="${options} make"
93
+   fi
94
+
95
+   set -x
96
+   env_string="`mulle-bootstrap paths -m -1 -q "'" ${options}`"
97
+   cmd_string="${SHELL:-/usr/bin/env bash}"
98
+
99
+   case "${cmd_string}" in
100
+      *bash|*dash)
101
+         prompt_string="`mulle-bootstrap project-path`"
102
+         prompt_string="PS1='\u@\h[`basename -- "${prompt_string}"`] \W$ '"
103
+      ;;
104
+   esac
105
+
106
+   eval_exekutor ${env_string} "${prompt_string}" "'${cmd_string}'"
107
+}
108
+
109
+
110
+#
111
+# read some config stuff now
112
+#
113
+shell_initialize()
114
+{
115
+   log_debug ":shell_initialize:"
116
+
117
+   [ -z "${MULLE_BOOTSTRAP_FUNCTIONS_SH}" ] && . mulle-bootstrap-functions.sh
118
+}
119
+
120
+
121
+shell_initialize