summaryrefslogtreecommitdiffstats
path: root/scripts/oe-setup-builddir
blob: dcb384c33a6b29beffbd6e66734501681a3da75f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/bin/sh

# OE Build Environment Setup Script
#
# Copyright (C) 2006-2011 Linux Foundation
#
# SPDX-License-Identifier: GPL-2.0-or-later
#

die() {
    echo Error: "$@" >&2
    exit 1
}

[ -n "$BUILDDIR" ] || die "The build directory (BUILDDIR) must be set!"

if [ "$1" = '--help' ] || [ "$1" = '-h' ]; then
    echo 'Usage: oe-setup-builddir'
    echo ''
    echo "OpenEmbedded setup-builddir - setup build directory $BUILDDIR"
    echo ''
    exit 2
fi

mkdir -p "$BUILDDIR/conf"

[ -d "$BUILDDIR" ] || die "The build directory ($BUILDDIR) does not exist!"
[ -w "$BUILDDIR" ] ||
    die "Cannot write to $BUILDDIR, perhaps try sourcing with a writable path? i.e. . oe-init-build-env ~/my-build"

# Attempting removal of sticky,setuid bits from BUILDDIR, BUILDDIR/conf
chmod -st "$BUILDDIR" 2>/dev/null || echo "WARNING: unable to chmod $BUILDDIR"
chmod -st "$BUILDDIR/conf" 2>/dev/null || echo "WARNING: unable to chmod $BUILDDIR/conf"

cd "$BUILDDIR" || die "Failed to change directory to $BUILDDIR!"

. "$OEROOT/.templateconf"

# Keep the original TEMPLATECONF before possibly prefixing it with $OEROOT below.
ORG_TEMPLATECONF=$TEMPLATECONF

#
# $TEMPLATECONF can point to a directory for the template local.conf & bblayers.conf
#
if [ -n "$TEMPLATECONF" ]; then
    if [ ! -d "$TEMPLATECONF" ]; then
        # Allow TEMPLATECONF=meta-xyz/conf as a shortcut
        if [ -d "$OEROOT/$TEMPLATECONF" ]; then
            TEMPLATECONF="$OEROOT/$TEMPLATECONF"
        fi
        [ -d "$TEMPLATECONF" ] ||
            die "TEMPLATECONF value points to nonexistent directory '$TEMPLATECONF'"
    fi
    templatesdir=$(python3 -c "import sys; print(sys.argv[1].strip('/').split('/')[-2])" "$TEMPLATECONF")
    if [ "$templatesdir" != templates ] || [ ! -f "$TEMPLATECONF/../../layer.conf" ]; then
        die "TEMPLATECONF value (which is $TEMPLATECONF) must point to meta-some-layer/conf/templates/template-name"
    fi
    OECORELAYERCONF="$TEMPLATECONF/bblayers.conf.sample"
    OECORELOCALCONF="$TEMPLATECONF/local.conf.sample"
    OECORESUMMARYCONF="$TEMPLATECONF/conf-summary.txt"
    OECORENOTESCONF="$TEMPLATECONF/conf-notes.txt"
fi

unset SHOWYPDOC
if [ -z "$OECORELOCALCONF" ]; then
    OECORELOCALCONF="$OEROOT/meta/conf/templates/default/local.conf.sample"
fi
if [ ! -r "$BUILDDIR/conf/local.conf" ]; then
    cat <<EOM
You had no conf/local.conf file. This configuration file has therefore been
created for you from $OECORELOCALCONF
You may wish to edit it to, for example, select a different MACHINE (target
hardware).

EOM
    cp -f "$OECORELOCALCONF" "$BUILDDIR/conf/local.conf"
    SHOWYPDOC=yes
fi

if [ -z "$OECORELAYERCONF" ]; then
    OECORELAYERCONF="$OEROOT/meta/conf/templates/default/bblayers.conf.sample"
fi
if [ ! -r "$BUILDDIR/conf/bblayers.conf" ]; then
    cat <<EOM
You had no conf/bblayers.conf file. This configuration file has therefore been
created for you from $OECORELAYERCONF
To add additional metadata layers into your configuration please add entries
to conf/bblayers.conf.

EOM

    # Put the absolute path to the layers in bblayers.conf so we can run
    # bitbake without the init script after the first run.
    # ##COREBASE## is deprecated as its meaning was inconsistent, but continue
    # to replace it for compatibility.
    sed -e "s|##OEROOT##|$OEROOT|g" \
        -e "s|##COREBASE##|$OEROOT|g" \
        "$OECORELAYERCONF" > "$BUILDDIR/conf/bblayers.conf"
    SHOWYPDOC=yes
fi

if [ -z "$OECORESUMMARYCONF" ]; then
    OECORESUMMARYCONF="$OEROOT/meta/conf/templates/default/conf-summary.txt"
fi
if [ ! -r "$BUILDDIR/conf/conf-summary.txt" ]; then
    [ ! -r "$OECORESUMMARYCONF" ] || cp "$OECORESUMMARYCONF" "$BUILDDIR/conf/conf-summary.txt"
fi

if [ -z "$OECORENOTESCONF" ]; then
    OECORENOTESCONF="$OEROOT/meta/conf/templates/default/conf-notes.txt"
fi
if [ ! -r "$BUILDDIR/conf/conf-notes.txt" ]; then
    [ ! -r "$OECORENOTESCONF" ] || cp "$OECORENOTESCONF" "$BUILDDIR/conf/conf-notes.txt"
fi

# Prevent disturbing a new GIT clone in same console
unset OECORELOCALCONF
unset OECORELAYERCONF
unset OECORESUMMARYCONF
unset OECORENOTESCONF

# Ending the first-time run message. Show the YP Documentation banner.
if [ -n "$SHOWYPDOC" ]; then
    cat <<EOM
The Yocto Project has extensive documentation about OE including a reference
manual which can be found at:
    https://docs.yoctoproject.org

For more information about OpenEmbedded see the website:
    https://www.openembedded.org/

EOM
#    unset SHOWYPDOC
fi

[ ! -r "$BUILDDIR/conf/conf-summary.txt" ] || cat "$BUILDDIR/conf/conf-summary.txt"
[ ! -r "$BUILDDIR/conf/conf-notes.txt" ] || cat "$BUILDDIR/conf/conf-notes.txt"

if [ ! -f "$BUILDDIR/conf/templateconf.cfg" ]; then
    echo "$ORG_TEMPLATECONF" >"$BUILDDIR/conf/templateconf.cfg"
fi