]>
Commit | Line | Data |
---|---|---|
103281f3 | 1 | #!/bin/bash |
103281f3 CW |
2 | |
3 | # We don't support srcdir != builddir | |
9a52c3fd | 4 | echo \#buildapi-variable-no-builddir > /dev/null |
103281f3 CW |
5 | |
6 | prefix=/usr | |
7 | ||
2692a422 | 8 | enable_documentation=yes |
51d21c6b | 9 | enable_dracut_cpio=no |
2692a422 | 10 | |
62f27ee6 | 11 | CC="${CC:-cc}" |
699414f5 MAP |
12 | PKG_CONFIG="${PKG_CONFIG:-pkg-config}" |
13 | ||
103281f3 CW |
14 | # Little helper function for reading args from the commandline. |
15 | # it automatically handles -a b and -a=b variants, and returns 1 if | |
16 | # we need to shift $3. | |
17 | read_arg() { | |
18 | # $1 = arg name | |
19 | # $2 = arg value | |
20 | # $3 = arg parameter | |
21 | local rematch='^[^=]*=(.*)$' | |
22 | if [[ $2 =~ $rematch ]]; then | |
f4053eb0 | 23 | read -r "$1" <<< "${BASH_REMATCH[1]}" |
103281f3 | 24 | else |
f4053eb0 | 25 | read -r "$1" <<< "$3" |
103281f3 CW |
26 | # There is no way to shift our callers args, so |
27 | # return 1 to indicate they should do it instead. | |
28 | return 1 | |
29 | fi | |
1d4b3375 | 30 | return 0 |
103281f3 CW |
31 | } |
32 | ||
33 | while (($# > 0)); do | |
34 | case "${1%%=*}" in | |
9a52c3fd HH |
35 | --prefix) read_arg prefix "$@" || shift ;; |
36 | --libdir) read_arg libdir "$@" || shift ;; | |
37 | --datadir) read_arg datadir "$@" || shift ;; | |
38 | --sysconfdir) read_arg sysconfdir "$@" || shift ;; | |
39 | --sbindir) read_arg sbindir "$@" || shift ;; | |
40 | --mandir) read_arg mandir "$@" || shift ;; | |
41 | --disable-documentation) enable_documentation=no ;; | |
42 | --program-prefix) read_arg programprefix "$@" || shift ;; | |
43 | --exec-prefix) read_arg execprefix "$@" || shift ;; | |
44 | --bindir) read_arg bindir "$@" || shift ;; | |
45 | --includedir) read_arg includedir "$@" || shift ;; | |
46 | --libexecdir) read_arg libexecdir "$@" || shift ;; | |
47 | --localstatedir) read_arg localstatedir "$@" || shift ;; | |
48 | --sharedstatedir) read_arg sharedstatedir "$@" || shift ;; | |
49 | --infodir) read_arg infodir "$@" || shift ;; | |
50 | --systemdsystemunitdir) read_arg systemdsystemunitdir "$@" || shift ;; | |
51 | --bashcompletiondir) read_arg bashcompletiondir "$@" || shift ;; | |
51d21c6b | 52 | --enable-dracut-cpio) enable_dracut_cpio=yes ;; |
9a52c3fd | 53 | *) echo "Ignoring unknown option '$1'" ;; |
103281f3 CW |
54 | esac |
55 | shift | |
56 | done | |
57 | ||
7bb80835 YW |
58 | if ! ${PKG_CONFIG} --exists --print-errors " libkmod >= 23 "; then |
59 | echo "dracut needs pkg-config and libkmod >= 23." >&2 | |
607fec3e HH |
60 | exit 1 |
61 | fi | |
62 | ||
4980bad3 AAF |
63 | if ! command -v "${CC}" > /dev/null; then |
64 | echo "dracut needs a C compiler (${CC} not found)." >&2 | |
65 | exit 1 | |
66 | fi | |
67 | ||
9a52c3fd | 68 | cat << EOF > conftest.c |
62f27ee6 DTCD |
69 | #include <fts.h> |
70 | int main() { | |
71 | return 0; | |
72 | } | |
73 | EOF | |
74 | ||
f4053eb0 | 75 | # shellcheck disable=SC2086 |
9a52c3fd | 76 | ${CC} $CFLAGS $LDFLAGS conftest.c > /dev/null 2>&1 |
62f27ee6 DTCD |
77 | ret=$? |
78 | rm -f conftest.c a.out | |
79 | ||
80 | # musl doesn't have fts.h included | |
81 | if test $ret -ne 0; then | |
9a52c3fd HH |
82 | echo "dracut needs fts development files." >&2 |
83 | exit 1 | |
62f27ee6 DTCD |
84 | fi |
85 | ||
9a52c3fd | 86 | cat << EOF > conftest.c |
62f27ee6 DTCD |
87 | #include <fts.h> |
88 | int main(void) { | |
89 | fts_open(0, 0, 0); | |
90 | return 0; | |
91 | } | |
92 | EOF | |
93 | ||
94 | found=no | |
95 | for lib in "-lc" "-lfts"; do | |
9a52c3fd HH |
96 | # shellcheck disable=SC2086 |
97 | ${CC} $CFLAGS $LDFLAGS conftest.c -Wl,$lib > /dev/null 2>&1 | |
98 | ret=$? | |
99 | if test $ret -eq 0; then | |
100 | FTS_LIBS="$lib" | |
101 | found=yes | |
102 | break | |
103 | fi | |
62f27ee6 DTCD |
104 | done |
105 | rm -f conftest.c a.out | |
106 | ||
107 | if test $found = no; then | |
9a52c3fd HH |
108 | echo "dracut couldn't find usable fts library" >&2 |
109 | exit 1 | |
62f27ee6 DTCD |
110 | fi |
111 | ||
0ef40d88 SS |
112 | cat << EOF > conftest.c |
113 | #include <stdio.h> | |
114 | #include <unistd.h> | |
115 | #include <sys/syscall.h> | |
116 | ||
117 | #ifndef SYS_gettid | |
118 | #error "SYS_gettid unavailable on this system" | |
119 | #endif | |
120 | ||
121 | #define gettid() ((pid_t) syscall(SYS_gettid)) | |
122 | ||
123 | int main(void) { | |
124 | return getpid() == gettid() ? 0 : -1; | |
125 | } | |
126 | EOF | |
127 | ||
128 | # shellcheck disable=SC2086 | |
129 | ${CC} $CFLAGS $LDFLAGS conftest.c > /dev/null 2>&1 | |
130 | ret=$? | |
131 | rm -f conftest.c a.out | |
132 | ||
133 | if test $ret -ne 0; then | |
134 | echo "dracut needs SYS_gettid support." >&2 | |
135 | exit 1 | |
136 | fi | |
137 | ||
51d21c6b DD |
138 | if test "$enable_dracut_cpio" = "yes"; then |
139 | cargo --version > /dev/null | |
140 | ret=$? | |
141 | if test $ret -ne 0; then | |
142 | echo "dracut couldn't find cargo for dracut-cpio build" | |
143 | exit 1 | |
144 | fi | |
145 | fi | |
146 | ||
9a52c3fd | 147 | cat > Makefile.inc.$$ << EOF |
103281f3 CW |
148 | prefix ?= ${prefix} |
149 | libdir ?= ${libdir:-${prefix}/lib} | |
150 | datadir ?= ${datadir:-${prefix}/share} | |
151 | sysconfdir ?= ${sysconfdir:-${prefix}/etc} | |
152 | sbindir ?= ${sbindir:-${prefix}/sbin} | |
153 | mandir ?= ${mandir:-${prefix}/share/man} | |
1d4b3375 | 154 | enable_documentation ?= ${enable_documentation:-yes} |
51d21c6b | 155 | enable_dracut_cpio ?= ${enable_dracut_cpio} |
1d4b3375 | 156 | bindir ?= ${bindir:-${prefix}/bin} |
2a0da60e HH |
157 | KMOD_CFLAGS ?= $(${PKG_CONFIG} --cflags " libkmod >= 23 ") |
158 | KMOD_LIBS ?= $(${PKG_CONFIG} --libs " libkmod >= 23 ") | |
62f27ee6 | 159 | FTS_LIBS ?= ${FTS_LIBS} |
103281f3 | 160 | EOF |
1d4b3375 HH |
161 | |
162 | { | |
163 | [[ $programprefix ]] && echo "programprefix ?= ${programprefix}" | |
164 | [[ $execprefix ]] && echo "execprefix ?= ${execprefix}" | |
165 | [[ $includedir ]] && echo "includedir ?= ${includedir}" | |
166 | [[ $libexecdir ]] && echo "libexecdir ?= ${libexecdir}" | |
167 | [[ $localstatedir ]] && echo "localstatedir ?= ${localstatedir}" | |
168 | [[ $sharedstatedir ]] && echo "sharedstatedir ?= ${sharedstatedir}" | |
169 | [[ $infodir ]] && echo "infodir ?= ${infodir}" | |
170 | [[ $systemdsystemunitdir ]] && echo "systemdsystemunitdir ?= ${systemdsystemunitdir}" | |
171 | [[ $bashcompletiondir ]] && echo "bashcompletiondir ?= ${bashcompletiondir}" | |
172 | } >> Makefile.inc.$$ | |
173 | ||
174 | mv Makefile.inc.$$ Makefile.inc |