summaryrefslogtreecommitdiffstats
path: root/configure
blob: 91af417098ffc204e945274e2300f11f999fa62e (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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#!/bin/bash

# We don't support srcdir != builddir
echo \#buildapi-variable-no-builddir > /dev/null

prefix=/usr

enable_documentation=yes
enable_dracut_cpio=no

CC="${CC:-cc}"
PKG_CONFIG="${PKG_CONFIG:-pkg-config}"

# Little helper function for reading args from the commandline.
# it automatically handles -a b and -a=b variants, and returns 1 if
# we need to shift $3.
read_arg() {
    # $1 = arg name
    # $2 = arg value
    # $3 = arg parameter
    local rematch='^[^=]*=(.*)$'
    if [[ $2 =~ $rematch ]]; then
        read -r "$1" <<< "${BASH_REMATCH[1]}"
    else
        read -r "$1" <<< "$3"
        # There is no way to shift our callers args, so
        # return 1 to indicate they should do it instead.
        return 1
    fi
    return 0
}

while (($# > 0)); do
    case "${1%%=*}" in
        --prefix) read_arg prefix "$@" || shift ;;
        --libdir) read_arg libdir "$@" || shift ;;
        --datadir) read_arg datadir "$@" || shift ;;
        --sysconfdir) read_arg sysconfdir "$@" || shift ;;
        --sbindir) read_arg sbindir "$@" || shift ;;
        --mandir) read_arg mandir "$@" || shift ;;
        --disable-documentation) enable_documentation=no ;;
        --program-prefix) read_arg programprefix "$@" || shift ;;
        --exec-prefix) read_arg execprefix "$@" || shift ;;
        --bindir) read_arg bindir "$@" || shift ;;
        --includedir) read_arg includedir "$@" || shift ;;
        --libexecdir) read_arg libexecdir "$@" || shift ;;
        --localstatedir) read_arg localstatedir "$@" || shift ;;
        --sharedstatedir) read_arg sharedstatedir "$@" || shift ;;
        --infodir) read_arg infodir "$@" || shift ;;
        --systemdsystemunitdir) read_arg systemdsystemunitdir "$@" || shift ;;
        --bashcompletiondir) read_arg bashcompletiondir "$@" || shift ;;
        --enable-dracut-cpio) enable_dracut_cpio=yes ;;
        *) echo "Ignoring unknown option '$1'" ;;
    esac
    shift
done

if ! ${PKG_CONFIG} --exists --print-errors " libkmod >= 23 "; then
    echo "dracut needs pkg-config and libkmod >= 23." >&2
    exit 1
fi

cat << EOF > conftest.c
#include <fts.h>
int main() {
	return 0;
}
EOF

# shellcheck disable=SC2086
${CC} $CFLAGS $LDFLAGS conftest.c > /dev/null 2>&1
ret=$?
rm -f conftest.c a.out

# musl doesn't have fts.h included
if test $ret -ne 0; then
    echo "dracut needs fts development files." >&2
    exit 1
fi

cat << EOF > conftest.c
#include <fts.h>
int main(void) {
	fts_open(0, 0, 0);
	return 0;
}
EOF

found=no
for lib in "-lc" "-lfts"; do
    # shellcheck disable=SC2086
    ${CC} $CFLAGS $LDFLAGS conftest.c -Wl,$lib > /dev/null 2>&1
    ret=$?
    if test $ret -eq 0; then
        FTS_LIBS="$lib"
        found=yes
        break
    fi
done
rm -f conftest.c a.out

if test $found = no; then
    echo "dracut couldn't find usable fts library" >&2
    exit 1
fi

cat << EOF > conftest.c
#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>

#ifndef SYS_gettid
#error "SYS_gettid unavailable on this system"
#endif

#define gettid()    ((pid_t) syscall(SYS_gettid))

int main(void) {
  return getpid() == gettid() ? 0 : -1;
}
EOF

# shellcheck disable=SC2086
${CC} $CFLAGS $LDFLAGS conftest.c > /dev/null 2>&1
ret=$?
rm -f conftest.c a.out

if test $ret -ne 0; then
    echo "dracut needs SYS_gettid support." >&2
    exit 1
fi

if test "$enable_dracut_cpio" = "yes"; then
    cargo --version > /dev/null
    ret=$?
    if test $ret -ne 0; then
        echo "dracut couldn't find cargo for dracut-cpio build"
        exit 1
    fi
fi

cat > Makefile.inc.$$ << EOF
prefix ?= ${prefix}
libdir ?= ${libdir:-${prefix}/lib}
datadir ?= ${datadir:-${prefix}/share}
sysconfdir ?= ${sysconfdir:-${prefix}/etc}
sbindir ?= ${sbindir:-${prefix}/sbin}
mandir ?= ${mandir:-${prefix}/share/man}
enable_documentation ?= ${enable_documentation:-yes}
enable_dracut_cpio ?= ${enable_dracut_cpio}
bindir ?= ${bindir:-${prefix}/bin}
KMOD_CFLAGS ?= $(${PKG_CONFIG} --cflags " libkmod >= 23 ")
KMOD_LIBS ?= $(${PKG_CONFIG} --libs " libkmod >= 23 ")
FTS_LIBS ?= ${FTS_LIBS}
EOF

{
    [[ $programprefix ]] && echo "programprefix ?= ${programprefix}"
    [[ $execprefix ]] && echo "execprefix ?= ${execprefix}"
    [[ $includedir ]] && echo "includedir ?= ${includedir}"
    [[ $libexecdir ]] && echo "libexecdir ?= ${libexecdir}"
    [[ $localstatedir ]] && echo "localstatedir ?= ${localstatedir}"
    [[ $sharedstatedir ]] && echo "sharedstatedir ?= ${sharedstatedir}"
    [[ $infodir ]] && echo "infodir ?= ${infodir}"
    [[ $systemdsystemunitdir ]] && echo "systemdsystemunitdir ?= ${systemdsystemunitdir}"
    [[ $bashcompletiondir ]] && echo "bashcompletiondir ?= ${bashcompletiondir}"
} >> Makefile.inc.$$

mv Makefile.inc.$$ Makefile.inc