]> git.ipfire.org Git - thirdparty/snort3.git/blame - configure_cmake.sh
Pull request #4256: dce_smb: Fixing an ASAN memory corruption issue
[thirdparty/snort3.git] / configure_cmake.sh
CommitLineData
3541adc1
J
1#!/bin/sh
2# Convenience wrapper for easily viewing/setting options that
3# the project's CMake scripts will recognize
5f341c40 4
3541adc1
J
5set -e
6command="$0 $*"
7
8# check for `cmake` command
9type cmake > /dev/null 2>&1 || {
10 echo "\
11This package requires CMake, please install it first, then you may
12use this configure script to access CMake equivalent functionality.\
13" >&2;
14 exit 1;
15}
16
17usage="\
18Usage: $0 [OPTION]... [VAR=VALUE]...
19
efd30273
J
20 --builddir= The build directory
21 --generator= run cmake --help for a list of generators
22 --prefix= Snort++ installation prefix
3541adc1 23
efd30273 24Optional Features:
77a49715
MA
25 --build-type=[Debug|Release|RelWithDebInfo|MinSizeRel]
26 set cmake build type (defaults to RelWithDebInfo if neither
27 CFLAGS nor CXXFLAGS are set)
efd30273
J
28 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
29 --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
92a8b166
RC
30 --enable-code-coverage Whether to enable code coverage support
31 --enable-hardened-build Detect and use compile-time hardening options
32 --enable-pie Attempt to produce a position-independent executable
051f5360 33 --disable-safec do not use libsafec bounds checking even if available
92a8b166
RC
34 --disable-static-ips-actions
35 do not include ips actions in binary
36 --disable-static-inspectors
37 do not include inspectors in binary
38 --disable-static-loggers
39 do not include loggers in binary
40 --disable-static-ips-options
41 do not include ips options in binary
42 --disable-static-search-engines
43 do not include search engines in binary
44 --disable-static-codecs do not include codecs in binary
45 --enable-shell enable command line shell support
46 --enable-large-pcap enable support for pcaps larger than 2 GB
3d760936 47 --enable-stdlog use file descriptor 3 instead of stdout for alerts
a8dd0cd8 48 --enable-tsc-clock use timestamp counter register clock (x86 and arm only)
92a8b166
RC
49 --enable-debug-msgs enable debug printing options (bugreports and
50 developers only)
51 --enable-debug enable debugging options (bugreports and developers
52 only)
4b21a2ca 53 --disable-gdb disable gdb debugging information
92a8b166 54 --enable-gprof-profile enable gprof profiling options (developers only)
d284ef2b
MA
55 --disable-snort-profiler
56 disable snort performance profiling (cpu and memory) (developers only)
5b4d8219
RC
57 --enable-memory-profiler
58 enable memory profiler
59 --enable-rule-profiler enable rule keyword profiler (developers only)
60 --enable-deep-profiling enable deep (multi-level) profiling (developers only)
92a8b166
RC
61 --disable-corefiles prevent Snort from generating core files
62 --enable-address-sanitizer
63 enable address sanitizer support
b2c1b572
RC
64 --enable-thread-sanitizer
65 enable thread sanitizer support
5b4d8219
RC
66 --enable-ub-sanitizer enable undefined behavior sanitizer support
67 --enable-tcmalloc enable using tcmalloc for dynamic memory management
68 --enable-jemalloc enable using jemalloc for dynamic memory management
69 --enable-jemalloc-static
70 same as --enable-jemalloc but linked statically
ef599435 71 --enable-luajit-static enable luajit linked statically
3e367c0e
MA
72 --enable-appid-third-party
73 enable third party appid
92a8b166 74 --enable-unit-tests build unit tests
11398131 75 --enable-ccache enable ccache support
92a8b166
RC
76 --disable-static-daq link static DAQ modules
77 --disable-html-docs don't create the HTML documentation
78 --disable-pdf-docs don't create the PDF documentation
7f05859b
TP
79 --disable-text-docs don't create the TEXT documentation
80 --disable-docs don't create documentation
76719be3 81
8dff7f34 82Optional Packages:
efd30273
J
83 --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
84 --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
92a8b166
RC
85 --with-pcap-includes=DIR
86 libpcap include directory
87 --with-pcap-libraries=DIR
88 libpcap library directory
89 --with-luajit-includes=DIR
90 luajit include directory
91 --with-luajit-libraries=DIR
92 luajit library directory
93 --with-pcre-includes=DIR
94 libpcre include directory
95 --with-pcre-libraries=DIR
96 libpcre library directory
97 --with-dnet-includes=DIR
98 libdnet include directory
99 --with-dnet-libraries=DIR
100 libdnet library directory
101 --with-daq-includes=DIR DAQ include directory
102 --with-daq-libraries=DIR
103 DAQ library directory
104 --with-openssl=DIR openssl installation root directory
105 --with-hyperscan-includes=DIR
106 libhs include directory
107 --with-hyperscan-libraries=DIR
108 libhs library directory
4e14cb53
MS
109 --with-atomic-libraries=DIR
110 atomic library directory
90d56049
MS
111 --with-flex-prefix=DIR
112 flex prefix directory
113 --with-flex-includes=DIR
114 flex include directory
560f3804
MA
115 --with-iconv-includes=DIR
116 libiconv include directory
117 --with-iconv-libraries=DIR
118 libiconv library directory
bb298f4c
HC
119 --with-uuid-includes=DIR
120 libuuid include directory
121 --with-uuid-libraries=DIR
122 libuuid library directory
e85ae49a
OSSIC
123 --with-libml-includes=DIR
124 libml include directory
125 --with-libml-libraries=DIR
126 libml library directory
fc8ecb43 127 --without-libml build Snort ML with mock of LibML
3541adc1 128
94a08676
RC
129Some influential variable definitions:
130 SIGNAL_SNORT_RELOAD=<int>
131 override the signal used to reload configuration (default: SIGHUP)
132 SIGNAL_SNORT_DUMP_STATS=<int>
133 override the signal used to dump run-time statistics (default: SIGUSR1)
134 SIGNAL_SNORT_ROTATE_STATS=<int>
135 override the signal used to force rotation of stats files (default: SIGUSR2)
136 SIGNAL_SNORT_READ_ATTR_TBL=<int>
137 override the signal used to reload the host attributes table (default: SIGURG)
138 SNORT_BUILD_NUMBER=<int>
139 define a build number for this build of Snort
3541adc1
J
140"
141
142sourcedir="$( cd "$( dirname "$0" )" && pwd )"
143
144# Function to append a CMake cache entry definition to the
145# CMakeCacheEntries variable
146# $1 is the cache entry variable name
147# $2 is the cache entry variable type
148# $3 is the cache entry variable value
149append_cache_entry () {
150 CMakeCacheEntries="$CMakeCacheEntries -D $1:$2=$3"
151}
152
3541adc1
J
153# set defaults
154builddir=build
155prefix=/usr/local/snort
156CMakeCacheEntries=""
157append_cache_entry CMAKE_INSTALL_PREFIX PATH $prefix
158
77a49715
MA
159build_type=""
160[ -z "$CFLAGS" ] && [ -z "$CXXFLAGS" ] && build_type="RelWithDebInfo"
161
3541adc1
J
162
163# parse arguments
164while [ $# -ne 0 ]; do
165 case "$1" in
e04e9ad2 166 *=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
3541adc1
J
167 *) optarg= ;;
168 esac
169
170 case "$1" in
171 --help|-h)
172 echo "${usage}" 1>&2
173 exit 1
174 ;;
175 --builddir=*)
176 builddir=$optarg
177 ;;
3a6cccea
RC
178 --define=*)
179 CMakeCacheEntries="$CMakeCacheEntries -D$optarg"
180 ;;
3541adc1
J
181 --generator=*)
182 CMakeGenerator="$optarg"
183 ;;
184 --prefix=*)
185 prefix=$optarg
186 append_cache_entry CMAKE_INSTALL_PREFIX PATH $optarg
187 ;;
92a8b166
RC
188 --enable-code-coverage)
189 append_cache_entry ENABLE_CODE_COVERAGE BOOL true
3541adc1 190 ;;
92a8b166
RC
191 --disable-code-coverage)
192 append_cache_entry ENABLE_CODE_COVERAGE BOOL false
193 ;;
194 --enable-hardened-build)
195 append_cache_entry ENABLE_HARDENED_BUILD BOOL true
196 ;;
197 --disable-hardened-build)
198 append_cache_entry ENABLE_HARDENED_BUILD BOOL false
199 ;;
200 --enable-pie)
201 append_cache_entry ENABLE_PIE BOOL true
202 ;;
203 --disable-pie)
204 append_cache_entry ENABLE_PIE BOOL false
205 ;;
b2606dd7
RC
206 --disable-safec)
207 append_cache_entry ENABLE_SAFEC BOOL false
208 ;;
209 --enable-safec)
210 append_cache_entry ENABLE_SAFEC BOOL true
211 ;;
92a8b166
RC
212 --disable-static-ips-actions)
213 append_cache_entry STATIC_IPS_ACTIONS BOOL false
214 ;;
215 --enable-static-ips-actions)
216 append_cache_entry STATIC_IPS_ACTIONS BOOL true
3541adc1
J
217 ;;
218 --disable-static-inspectors)
92a8b166 219 append_cache_entry STATIC_INSPECTORS BOOL false
3541adc1
J
220 ;;
221 --enable-static-inspectors)
92a8b166 222 append_cache_entry STATIC_INSPECTORS BOOL true
3541adc1
J
223 ;;
224 --disable-static-loggers)
92a8b166 225 append_cache_entry STATIC_LOGGERS BOOL false
3541adc1
J
226 ;;
227 --enable-static-loggers)
92a8b166 228 append_cache_entry STATIC_LOGGERS BOOL true
3541adc1 229 ;;
efd30273 230 --disable-static-ips-options)
92a8b166 231 append_cache_entry STATIC_IPS_OPTIONS BOOL false
efd30273
J
232 ;;
233 --enable-static-ips-options)
92a8b166 234 append_cache_entry STATIC_IPS_OPTIONS BOOL true
3541adc1
J
235 ;;
236 --disable-static-search-engines)
92a8b166 237 append_cache_entry STATIC_SEARCH_ENGINES BOOL false
3541adc1
J
238 ;;
239 --enable-static-search-engines)
92a8b166 240 append_cache_entry STATIC_SEARCH_ENGINES BOOL true
3541adc1 241 ;;
92a8b166
RC
242 --disable-static-codecs)
243 append_cache_entry STATIC_CODECS BOOL false
3541adc1 244 ;;
92a8b166
RC
245 --enable-static-codecs)
246 append_cache_entry STATIC_CODECS BOOL true
3541adc1 247 ;;
92a8b166
RC
248 --enable-shell)
249 append_cache_entry ENABLE_SHELL BOOL true
3541adc1 250 ;;
92a8b166
RC
251 --disable-shell)
252 append_cache_entry ENABLE_SHELL BOOL false
3541adc1 253 ;;
92a8b166
RC
254 --enable-large-pcap)
255 append_cache_entry ENABLE_LARGE_PCAP BOOL true
256 ;;
3d760936
RC
257 --enable-stdlog)
258 append_cache_entry ENABLE_STDLOG BOOL true
d4a237e3 259 ;;
4c0373da 260 --enable-tsc-clock)
261 append_cache_entry ENABLE_TSC_CLOCK BOOL true
262 ;;
d284ef2b 263 --disable-snort-profiler)
5b4d8219 264 append_cache_entry DISABLE_SNORT_PROFILER BOOL false
d284ef2b 265 ;;
5b4d8219
RC
266 --enable-memory-profiler)
267 append_cache_entry ENABLE_MEMORY_PROFILER BOOL true
268 ;;
269 --enable-rule-profiler)
270 append_cache_entry ENABLE_RULE_PROFILER BOOL true
271 ;;
272 --enable-deep-profiling)
273 append_cache_entry DEEP_PROFILING BOOL true
d284ef2b 274 ;;
92a8b166
RC
275 --disable-large-pcap)
276 append_cache_entry ENABLE_LARGE_PCAP BOOL false
3541adc1 277 ;;
efd30273 278 --enable-debug-msgs)
92a8b166 279 append_cache_entry ENABLE_DEBUG_MSGS BOOL true
3541adc1 280 ;;
92a8b166
RC
281 --disable-debug-msgs)
282 append_cache_entry ENABLE_DEBUG_MSGS BOOL false
283 ;;
284 --enable-debug)
285 append_cache_entry ENABLE_DEBUG BOOL true
286 ;;
287 --disable-debug)
288 append_cache_entry ENABLE_DEBUG BOOL false
3541adc1
J
289 ;;
290 --enable-gdb)
92a8b166 291 append_cache_entry ENABLE_GDB BOOL true
3541adc1 292 ;;
92a8b166
RC
293 --disable-gdb)
294 append_cache_entry ENABLE_GDB BOOL false
3541adc1 295 ;;
c96a052f 296 --enable-gprof-profile)
92a8b166 297 append_cache_entry ENABLE_PROFILE BOOL true
3541adc1 298 ;;
92a8b166
RC
299 --disable-gprof-profile)
300 append_cache_entry ENABLE_PROFILE BOOL false
3541adc1 301 ;;
efd30273 302 --disable-corefiles)
92a8b166 303 append_cache_entry ENABLE_COREFILES BOOL false
efd30273
J
304 ;;
305 --enable-corefiles)
92a8b166 306 append_cache_entry ENABLE_COREFILES BOOL true
3541adc1 307 ;;
16407934 308 --enable-address-sanitizer)
92a8b166 309 append_cache_entry ENABLE_ADDRESS_SANITIZER BOOL true
16407934
RC
310 ;;
311 --disable-address-sanitizer)
92a8b166 312 append_cache_entry ENABLE_ADDRESS_SANITIZER BOOL false
b74f286c 313 ;;
b2c1b572
RC
314 --enable-thread-sanitizer)
315 append_cache_entry ENABLE_THREAD_SANITIZER BOOL true
316 ;;
317 --disable-thread-sanitizer)
318 append_cache_entry ENABLE_THREAD_SANITIZER BOOL false
319 ;;
5f341c40 320 --enable-ub-sanitizer)
bd1e4c8b 321 append_cache_entry ENABLE_UB_SANITIZER BOOL true
5f341c40
MA
322 ;;
323 --disable-ub-sanitizer)
bd1e4c8b
MA
324 append_cache_entry ENABLE_UB_SANITIZER BOOL false
325 ;;
326 --enable-tcmalloc)
327 append_cache_entry ENABLE_TCMALLOC BOOL true
9ac428d8 328 tcm=1
bd1e4c8b
MA
329 ;;
330 --disable-tcmalloc)
331 append_cache_entry ENABLE_TCMALLOC BOOL false
5f341c40 332 ;;
5b4d8219
RC
333 --enable-jemalloc)
334 append_cache_entry ENABLE_JEMALLOC BOOL true
335 append_cache_entry STATIC_JEMALLOC BOOL false
9ac428d8 336 jem=1
5b4d8219
RC
337 ;;
338 --disable-jemalloc)
339 append_cache_entry ENABLE_JEMALLOC BOOL false
340 ;;
341 --enable-jemalloc-static)
342 append_cache_entry ENABLE_JEMALLOC BOOL true
343 append_cache_entry STATIC_JEMALLOC BOOL true
344 ;;
ef599435
SB
345 --enable-luajit-static)
346 append_cache_entry STATIC_LUAJIT BOOL true
347 ;;
5b4d8219
RC
348 --disable-jemalloc-static)
349 append_cache_entry ENABLE_JEMALLOC BOOL false
350 ;;
3e367c0e 351 --enable-appid-third-party)
3e367c0e 352 ;;
92a8b166
RC
353 --enable-unit-tests)
354 append_cache_entry ENABLE_UNIT_TESTS BOOL true
76719be3 355 ;;
3541adc1 356 --disable-unit-tests)
92a8b166 357 append_cache_entry ENABLE_UNIT_TESTS BOOL false
3541adc1 358 ;;
571cbf61
MS
359 --enable-benchmark-tests)
360 append_cache_entry ENABLE_BENCHMARK_TESTS BOOL true
361 ;;
362 --disable-benchmark-tests)
363 append_cache_entry ENABLE_BENCHMARK_TESTS BOOL false
364 ;;
11398131
MA
365 --enable-ccache)
366 append_cache_entry CMAKE_CXX_COMPILER_LAUNCHER STRING ccache
367 append_cache_entry CMAKE_C_COMPILER_LAUNCHER STRING ccache
368 ;;
92a8b166
RC
369 --disable-static-daq)
370 append_cache_entry ENABLE_STATIC_DAQ BOOL false
371 ;;
372 --enable-static-daq)
373 append_cache_entry ENABLE_STATIC_DAQ BOOL true
3835a1cd 374 ;;
3541adc1 375 --disable-html-docs)
92a8b166 376 append_cache_entry MAKE_HTML_DOC BOOL false
3541adc1
J
377 ;;
378 --enable-html-docs)
92a8b166 379 append_cache_entry MAKE_HTML_DOC BOOL true
3541adc1
J
380 ;;
381 --disable-pdf-docs)
92a8b166 382 append_cache_entry MAKE_PDF_DOC BOOL false
3541adc1
J
383 ;;
384 --enable-pdf-docs)
92a8b166 385 append_cache_entry MAKE_PDF_DOC BOOL true
3541adc1 386 ;;
7f05859b
TP
387 --disable-text-docs)
388 append_cache_entry MAKE_TEXT_DOC BOOL false
389 ;;
390 --enable-text-docs)
391 append_cache_entry MAKE_TEXT_DOC BOOL true
392 ;;
393 --disable-docs)
394 append_cache_entry MAKE_DOC BOOL false
395 ;;
396 --enable-docs)
397 append_cache_entry MAKE_DOC BOOL true
398 ;;
77a49715
MA
399 --build-type=*)
400 if [ $optarg = "Debug" ] || [ $optarg = "Release" ] ||
401 [ $optarg = "RelWithDebInfo" ] || [ $optarg = "MinSizeRel" ]; then
402 build_type=$optarg
403 else
404 echo "Invalid build type '$optarg'. Try $0 --help to see available build types."
405 exit 1
406 fi
407 ;;
3541adc1 408 --with-pcap-includes=*)
bc1de874 409 append_cache_entry PCAP_INCLUDE_DIR_HINT PATH $optarg
3541adc1
J
410 ;;
411 --with-pcap-libraries=*)
bc1de874 412 append_cache_entry PCAP_LIBRARIES_DIR_HINT PATH $optarg
3541adc1
J
413 ;;
414 --with-luajit-includes=*)
92a8b166 415 append_cache_entry LUAJIT_INCLUDE_DIR_HINT PATH $optarg
3541adc1
J
416 ;;
417 --with-luajit-libraries=*)
92a8b166 418 append_cache_entry LUAJIT_LIBRARIES_DIR_HINT PATH $optarg
3541adc1
J
419 ;;
420 --with-pcre-includes=*)
92a8b166 421 append_cache_entry PCRE_INCLUDE_DIR_HINT PATH $optarg
3541adc1
J
422 ;;
423 --with-pcre-libraries=*)
92a8b166 424 append_cache_entry PCRE_LIBRARIES_DIR_HINT PATH $optarg
3541adc1
J
425 ;;
426 --with-dnet-includes=*)
92a8b166 427 append_cache_entry DNET_INCLUDE_DIR_HINT PATH $optarg
3541adc1
J
428 ;;
429 --with-dnet-libraries=*)
92a8b166 430 append_cache_entry DNET_LIBRARIES_DIR_HINT PATH $optarg
3541adc1
J
431 ;;
432 --with-daq-includes=*)
304c62df 433 append_cache_entry DAQ_INCLUDE_DIR_HINT PATH $optarg
3541adc1
J
434 ;;
435 --with-daq-libraries=*)
304c62df 436 append_cache_entry DAQ_LIBRARIES_DIR_HINT PATH $optarg
3541adc1 437 ;;
92a8b166
RC
438 --with-openssl=*)
439 append_cache_entry OPENSSL_ROOT_DIR PATH $optarg
440 ;;
eb3cf1d9
MA
441 --with-hyperscan-includes=*)
442 append_cache_entry HS_INCLUDE_DIR PATH $optarg
443 ;;
444 --with-hyperscan-libraries=*)
445 append_cache_entry HS_LIBRARIES_DIR PATH $optarg
446 ;;
4e14cb53
MS
447 --with-atomic-libraries=*)
448 append_cache_entry ATOMIC_LIBRARIES_DIR_HINT PATH $optarg
449 ;;
90d56049
MS
450 --with-flex-prefix=*)
451 append_cache_entry CMAKE_PREFIX_PATH PATH $optarg
452 ;;
453 --with-flex-includes=*)
454 append_cache_entry FLEX_INCLUDE_DIR_HINT PATH $optarg
455 ;;
560f3804
MA
456 --with-iconv-includes=*)
457 append_cache_entry ICONV_INCLUDE_DIR_HINT PATH $optarg
458 ;;
459 --with-iconv-libraries=*)
460 append_cache_entry ICONV_LIBRARIES_DIR_HINT PATH $optarg
461 ;;
bb298f4c
HC
462 --with-uuid-includes=*)
463 append_cache_entry UUID_INCLUDE_DIR_HINT PATH $optarg
464 ;;
465 --with-uuid-libraries=*)
466 append_cache_entry UUID_LIBRARIES_DIR_HINT PATH $optarg
467 ;;
52525148
NPXCC
468 --with-toolchain=*)
469 append_cache_entry CMAKE_TOOLCHAIN_FILE PATH $optarg
470 ;;
e85ae49a
OSSIC
471 --with-libml-includes=*)
472 append_cache_entry ML_INCLUDE_DIR_HINT PATH $optarg
473 ;;
474 --with-libml-libraries=*)
475 append_cache_entry ML_LIBRARIES_DIR_HINT PATH $optarg
476 ;;
ea7dcd2d
YVSIC
477 --without-libml)
478 append_cache_entry ENABLE_KAIZEN_MOCK BOOL true
479 ;;
3541adc1
J
480 SIGNAL_SNORT_RELOAD=*)
481 append_cache_entry SIGNAL_SNORT_RELOAD STRING $optarg
482 ;;
483 SIGNAL_SNORT_DUMP_STATS=*)
484 append_cache_entry SIGNAL_SNORT_DUMP_STATS STRING $optarg
485 ;;
486 SIGNAL_SNORT_ROTATE_STATS=*)
487 append_cache_entry SIGNAL_SNORT_ROTATE_STATS STRING $optarg
488 ;;
489 SIGNAL_SNORT_READ_ATTR_TBL=*)
490 append_cache_entry SIGNAL_SNORT_READ_ATTR_TBL STRING $optarg
491 ;;
94a08676
RC
492 SNORT_BUILD_NUMBER=*)
493 append_cache_entry VERSION_BUILD STRING $optarg
494 ;;
3541adc1
J
495 *)
496 echo "Invalid option '$1'. Try $0 --help to see available options."
497 exit 1
498 ;;
499 esac
500 shift
501done
502
a45c240a 503if [ "$tcm" -eq 1 -a "$jem" -eq 1 ] ; then
d1ada90b 504 echo "--enable-jemalloc and --enable-tcmalloc are mutually exclusive; enable at most one"
9ac428d8
RC
505 exit 2
506fi
507
3541adc1
J
508if [ -d $builddir ]; then
509 # If build directory exists, check if it has a CMake cache
510 if [ -f $builddir/CMakeCache.txt ]; then
511 # If the CMake cache exists, delete it so that this configuration
512 # is not tainted by a previous one
513 rm -f $builddir/CMakeCache.txt
514 fi
515else
516 # Create build directory
517 mkdir -p $builddir
518fi
519
520echo "Build Directory : $builddir"
521echo "Source Directory: $sourcedir"
522cd $builddir
523
ee0a8631 524[ "$CMakeGenerator" ] && gen="-G $CMakeGenerator"
9f57fea3 525
5d19768a 526cmake "$gen" \
9f57fea3
RC
527 -DCMAKE_CXX_FLAGS:STRING="$CXXFLAGS $CPPFLAGS" \
528 -DCMAKE_C_FLAGS:STRING="$CFLAGS $CPPFLAGS" \
ccfa1626 529 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
77a49715 530 -DCMAKE_BUILD_TYPE:STRING=$build_type \
9f57fea3 531 $CMakeCacheEntries $sourcedir
3541adc1
J
532
533echo "# This is the command used to configure this build" > config.status
534echo $command >> config.status
535chmod u+x config.status
9f57fea3 536