Branch :
#!/bin/sh
## c3
## Copyright 2022-2024 kmx.io <contact@kmx.io>
##
## Permission is hereby granted to use this software granted the above
## copyright notice and this permission paragraph are included in all
## copies and substantial portions of this software.
##
## THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
## PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
## AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
## THIS SOFTWARE.
set -e
cd "$(dirname "$0")"
build_lib() {
echo >> ${CONFIG_MK}
echo "$LIB_ASAN: $OBJECTS_ASAN .build_ld_asan" >> ${CONFIG_MK}
echo " ./.build_ld_asan $LIB_ASAN" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
echo "$LIB_COV: $OBJECTS_COV .build_ld_cov" >> ${CONFIG_MK}
echo " ./.build_ld_cov $LIB_COV" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
echo "$LIB_DEBUG: $OBJECTS_DEBUG .build_ld_debug" >> ${CONFIG_MK}
echo " ./.build_ld_debug $LIB_DEBUG" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
echo "$LIB: $OBJECTS .build_ld_main" >> ${CONFIG_MK}
echo " ./.build_ld_main $LIB" >> ${CONFIG_MK}
}
build_lo() {
for SRC in $SOURCES; do
echo >> ${CONFIG_MK}
SRC_ASAN_LO="$(c2ext .asan.lo "$SRC")"
c_ext_rule .asan.lo "$SRC" .build_cc_asan >> ${CONFIG_MK}
echo " ./.build_cc_asan $SRC $SRC_ASAN_LO" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
SRC_COV_LO="$(c2ext .cov.lo "$SRC")"
c_ext_rule .cov.lo "$SRC" .build_cc_cov >> ${CONFIG_MK}
echo " ./.build_cc_cov $SRC $SRC_COV_LO" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
SRC_DEBUG_LO="$(c2ext .debug.lo "$SRC")"
c_ext_rule .debug.lo "$SRC" .build_cc_debug >> ${CONFIG_MK}
echo " ./.build_cc_debug $SRC $SRC_DEBUG_LO" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
SRC_LO="$(c2ext .main.lo "$SRC")"
c_ext_rule .main.lo "$SRC" .build_cc_main >> ${CONFIG_MK}
echo " ./.build_cc_main $SRC $SRC_LO" >> ${CONFIG_MK}
done
}
build_lo_objc() {
for SRC in $OBJC_SOURCES; do
echo >> ${CONFIG_MK}
SRC_LO="$(objc2ext .main.lo "$SRC")"
objc_ext_rule .main.lo "$SRC" .build_objcc_main >> ${CONFIG_MK}
echo " ./.build_objcc_main $SRC $SRC_LO" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
SRC_LO="$(objc2ext .asan.lo "$SRC")"
objc_ext_rule .asan.lo "$SRC" .build_objcc_asan >> ${CONFIG_MK}
echo " ./.build_objcc_asan $SRC $SRC_LO" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
SRC_LO="$(objc2ext .cov.lo "$SRC")"
objc_ext_rule .cov.lo "$SRC" .build_objcc_cov >> ${CONFIG_MK}
echo " ./.build_objcc_cov $SRC $SRC_LO" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
SRC_LO="$(objc2ext .debug.lo "$SRC")"
objc_ext_rule .debug.lo "$SRC" .build_objcc_debug >> ${CONFIG_MK}
echo " ./.build_objcc_debug $SRC $SRC_LO" >> ${CONFIG_MK}
done
}
build_prog() {
echo >> ${CONFIG_MK}
echo "$PROG_ASAN: $LOCAL_LIBS_ASAN $OBJECTS_ASAN .build_ld_asan" \
>> ${CONFIG_MK}
echo " ./.build_ld_asan $PROG_ASAN" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
echo "$PROG_COV: $LOCAL_LIBS_COV $OBJECTS_COV .build_ld_cov" \
>> ${CONFIG_MK}
echo " ./.build_ld_cov $PROG_COV" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
echo "$PROG_DEBUG: $LOCAL_LIBS_DEBUG $OBJECTS_DEBUG .build_ld_debug" \
>> ${CONFIG_MK}
echo " ./.build_ld_debug $PROG_DEBUG" >> ${CONFIG_MK}
echo >> ${CONFIG_MK}
echo "$PROG: $LOCAL_LIBS $OBJECTS .build_ld_main" >> ${CONFIG_MK}
echo " ./.build_ld_main $PROG" >> ${CONFIG_MK}
}
c_o_rule() {
"$CC" $CPPFLAGS $CFLAGS -M "$1" || {
echo "$1" | sed -e 's/^\(.*\)\.c$/\1.o: \1.c/'
}
echo "$1: $2" | sed -e 's/^\(.*\)\.c:/\1.o:/'
}
c_ext_rule() {
c_o_rule "$2" "$3" | sed -e "s/\.o:/$1:/"
}
c_lo_rule() {
c_ext_rule .lo "$1"
}
c_prog_rule() {
{ c_o_rule "$1" || exit 1; } | sed -e 's/[.]o:/:/'
}
c2ext() {
EXT="$1"; shift
echo "$@" | sed -e "s/[.]c$/${EXT}/" -e "s/[.]c /${EXT} /g"
}
c2la() {
c2ext .la "$@"
}
c2lo() {
c2ext .lo "$@"
}
c2o() {
c2ext .o "$@"
}
c2prog() {
echo "$@" | sed -e 's/[.]c$//' -e 's/[.]c / /g'
}
config_asan() {
config_lib_have ASAN -lasan
}
config_define() {
echo "#define $1 $2" >> "${CONFIG_H}"
}
config_have_stat_mtim() {
OUT=".config_have_stat_mtim"
OUT_C=".config_have_stat_mtim.c"
echo "/* generated by configure */" > "$OUT_C"
echo "#include <sys/stat.h>" >> "$OUT_C"
echo "#ifdef __APPLE__" >> "$OUT_C"
echo "# define st_mtim st_mtimespec" >> "$OUT_C"
echo "#endif" >> "$OUT_C"
echo "int main (void) {" >> "$OUT_C"
echo " struct stat tmp;" >> "$OUT_C"
echo " tmp.st_mtim.tv_sec = 0;" >> "$OUT_C"
echo " tmp.st_mtim.tv_nsec = 0;" >> "$OUT_C"
echo " return tmp.st_mtim.tv_sec + tmp.st_mtim.tv_nsec;" \
>> "$OUT_C"
echo "}" >> "$OUT_C"
if $LIBTOOL --tag CC --mode link ${CC} ${CPPFLAGS} ${CFLAGS} \
"$OUT_C" -o "$OUT"; then
echo "#define HAVE_STAT_MTIM 1" >> "${CONFIG_H}"
HAVE_STAT_MTIM=true
else
echo "#define HAVE_STAT_MTIM 0" >> "${CONFIG_H}"
HAVE_STAT_MTIM=false
fi
rm -f "$OUT_C"
rm -f "$OUT"
}
config_gnu() {
if grep -q _GNU_SOURCE /usr/include/features.h 2>/dev/null; then
CFLAGS="$CFLAGS -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_BSD_SOURCE"
fi
}
config_include() {
OUT=".config_$1"
OUT_C=".config_$1.c"
shift
echo "/* generated by configure */" > "$OUT_C"
while [ $# -gt 1 ]; do
echo "#include <$1>" >> "$OUT_C"
shift
done
echo "int main (void) { return 0; }" >> "$OUT_C"
if $LIBTOOL --tag CC --mode link ${CC} ${CPPFLAGS} ${CFLAGS} \
"$OUT_C" -o "$OUT" >/dev/null 2>&1; then
echo "#define $1 1" >> "${CONFIG_H}"
eval "$1=Yes"
else
echo "#define $1 0" >> "${CONFIG_H}"
eval "$1=No"
fi
rm -f "$OUT_C"
rm -f "$OUT"
}
config_include_have() {
NAME="$1"
shift
OUT_C=".config_$NAME.c"
OUT=".config_$NAME"
echo "/* generated by configure */" > "$OUT_C"
echo "$@" >> "$OUT_C"
echo "int main (void) { return 0; }" >> "$OUT_C"
if $LIBTOOL --tag CC --mode link ${CC} ${CPPFLAGS} ${CFLAGS} \
"$OUT_C" ${LIBS} -o "$OUT"; then
eval "HAVE_$NAME=true"
echo "HAVE_$NAME = true" >> ${CONFIG_MK}
else
eval "HAVE_$NAME=false"
echo "HAVE_$NAME = false" >> ${CONFIG_MK}
fi
rm -f "$OUT" "$OUT_C"
}
config_lib() {
NAME="$1"
shift
OUT_C=".config_$NAME.c"
OUT=".config_$NAME"
echo "/* generated by configure */" > "$OUT_C"
echo "int main (void) { return 0; }" >> "$OUT_C"
if $LIBTOOL --tag CC --mode link ${CC} ${CPPFLAGS} ${CFLAGS} \
"$OUT_C" ${LDFLAGS} ${LIBS} $@ -o "$OUT" \
>/dev/null 2>&1; then
LIBS="$LIBS $@"
eval "HAVE_$NAME=true"
echo "HAVE_$NAME = true" >> ${CONFIG_MK}
else
eval "HAVE_$NAME=false"
echo "HAVE_$NAME = false" >> ${CONFIG_MK}
fi
rm -f "$OUT" "$OUT_C"
}
config_lib_have() {
NAME="$1"
shift
OUT_C=".config_$NAME.c"
OUT=".config_$NAME"
echo "/* generated by configure */" > "$OUT_C"
echo "int main (void) { return 0; }" >> "$OUT_C"
if $LIBTOOL --tag CC --mode link ${CC} ${CPPFLAGS} ${CFLAGS} \
"$OUT_C" ${LIBS} $@ -o "$OUT" >/dev/null 2>&1; then
eval "HAVE_$NAME=true"
echo "HAVE_$NAME = true" >> ${CONFIG_MK}
else
eval "HAVE_$NAME=false"
echo "HAVE_$NAME = false" >> ${CONFIG_MK}
fi
rm -f "$OUT" "$OUT_C"
}
config_no_undefined() {
OUT_C=".config_no_undefined.c"
OUT=".config_no_undefined"
echo "/* generated by configure */" > "$OUT_C"
echo "int main (void) { return 0; }" >> "$OUT_C"
if ${LIBTOOL} --tag CC --mode link ${CC} ${CPPFLAGS} ${CFLAGS} \
"$OUT_C" ${LDFLAGS} -no-undefined ${LIBS} $@ \
-o "$OUT" >/dev/null 2>&1; then
LDFLAGS="$LDFLAGS -no-undefined"
fi
rm -f "$OUT" "$OUT_C"
}
config_objc_include_have() {
NAME="$1"
shift
OUT_M=".config_$NAME.m"
OUT=".config_$NAME"
echo "/* generated by configure */" > "$OUT_M"
echo "$@" >> "$OUT_M"
echo "int main (void) { return 0; }" >> "$OUT_M"
if $LIBTOOL --tag CC --mode link ${OBJCC} ${CPPFLAGS} ${OBJCFLAGS} \
"$OUT_M" ${LIBS} -o "$OUT" >/dev/null 2>&1; then
eval "HAVE_$NAME=true"
echo "HAVE_$NAME = true" >> ${CONFIG_MK}
else
eval "HAVE_$NAME=false"
echo "HAVE_$NAME = false" >> ${CONFIG_MK}
fi
rm -f "$OUT" "$OUT_M"
}
config_objc_lib() {
NAME="$1"
shift
OUT_M=".config_$NAME.m"
OUT=".config_$NAME"
echo "/* generated by configure */" > "$OUT_M"
echo "int main (void) { return 0; }" >> "$OUT_M"
if $LIBTOOL --tag CC --mode link ${OBJCC} ${CPPFLAGS} ${OBJCFLAGS} \
"$OUT_M" ${LDFLAGS} ${LIBS} $@ \
-o "$OUT" >/dev/null 2>&1; then
LIBS="$LIBS $@"
fi
rm -f "$OUT" "$OUT_M"
}
config_objc_lib_have() {
NAME="$1"
shift
OUT_M=".config_$NAME.m"
OUT=".config_$NAME"
echo "/* generated by configure */" > "$OUT_M"
echo "int main (void) { return 0; }" >> "$OUT_M"
if $LIBTOOL --tag CC --mode link ${OBJCC} ${CPPFLAGS} ${OBJCFLAGS} \
"$OUT_M" ${LIBS} $@ -o "$OUT" >/dev/null 2>&1; then
eval "HAVE_$NAME=true"
echo "HAVE_$NAME = true" >> ${CONFIG_MK}
else
eval "HAVE_$NAME=false"
echo "HAVE_$NAME = false" >> ${CONFIG_MK}
fi
rm -f "$OUT" "$OUT_M"
}
config_subdirs() {
for SUBDIR; do
( cd "$SUBDIR" && echo "$PWD/configure" && ./configure; )
done
}
cpp_o_rule() {
"$CXX" $CPPFLAGS $CXXFLAGS -M "$1" || {
echo "$1" | sed -e 's/^\(.*\)\.cpp$/\1.o: \1.cpp/'
}
echo "$1: $2" | sed -e 's/^\(.*\)\.cpp: $/\1.o: /'
}
cpp_ext_rule() {
cpp_o_rule "$2" "$3" | sed -e "s/[.]o:/$1:/"
}
cpp_lo_rule() {
cpp_ext_rule .lo "$1" "$2"
}
cpp_prog_rule() {
{ cpp_o_rule "$1" "$2" || exit 1; } | sed -e 's/[.]o:/:/'
}
cpp2ext() {
EXT="$1"; shift
echo "$@" | sed -e "s/[.]cpp$/${EXT}/" -e "s/[.]cpp /${EXT} /g"
}
cpp2la() {
cpp2ext .la "$@"
}
cpp2lo() {
cpp2ext .lo "$@"
}
cpp2o() {
cpp2ext .o "$@"
}
cpp2prog() {
echo "$@" | sed -e 's/[.]cpp$//' -e 's/[.]cpp / /g'
}
env_reset() {
CPPFLAGS="$ENV_CPPFLAGS"
CFLAGS="$ENV_CFLAGS"
CXXFLAGS="$ENV_CXXFLAGS"
LDFLAGS="$ENV_LDFLAGS"
LIBS="$ENV_LIBS"
}
objc_o_rule() {
echo "$1" | sed -e 's/^\(.*\)\.m$/\1.o: \1.m/'
echo "$1: $2" | sed -e 's/^\(.*\)\.m: $/\1.o: /'
}
objc_ext_rule() {
objc_o_rule "$2" "$3" | sed -e "s/\.o:/$1:/"
}
objc2ext() {
EXT="$1"; shift
echo "$@" | sed -e "s/[.]m$/${EXT}/" -e "s/[.]m /${EXT} /g"
}
pkg_config() {
if pkg-config "$1"; then
CFLAGS="$CFLAGS $(pkg-config --cflags "$1")"
CXXFLAGS="$CXXFLAGS $(pkg-config --cflags "$1")"
LIBS="$LIBS $(pkg-config --libs "$1")"
fi
}
require_pkg_config() {
if ! which pkg-config >/dev/null; then
echo "please install pkg-config" >&2
exit 1
fi
}
sources() {
SOURCES_TMP="$(echo "$2" | sort -u)"
echo "$1 = \\
$(echo "$SOURCES_TMP" | sed -e 's/^\(.*\)$/ "\1" \\/')
" >> ${SOURCES_MK}
echo "$1='$(echo "$SOURCES_TMP" | tr '\n' ' ')'" >> ${SOURCES_SH}
}
swift_o_rule() {
echo "$1" | sed -e 's/^\(.*\)\.swift$/\1.o: \1.c/'
echo "$1" | sed -e 's/^\(.*\)\.swift$/\1.o: Makefile config.mk/'
}
swift_ext_rule() {
swift_o_rule "$2" | sed -e "s/[.]o:/$1:/"
}
swift2ext() {
EXT="$1"; shift
echo "$@" | sed -e "s/[.]swift$/${EXT}/" -e "s/[.]swift /${EXT} /g"
}
update_and_chmod() {
if ! cmp "$2" "$3" >/dev/null 2>&1; then
mv "$2" "$3"
echo "-> ${PWD}/$3"
else
rm "$2"
fi
chmod "$1" "$3"
}
update_build() {
CC_MAIN=.build_cc_main.tmp
CC_ASAN=.build_cc_asan.tmp
CC_COV=.build_cc_cov.tmp
CC_DEBUG=.build_cc_debug.tmp
mkdir -p .build
COMPILE="${LIBTOOL} --tag=CC --mode=compile"
COMPILE="$COMPILE \${CC} \${CPPFLAGS} \${CFLAGS}"
COMPILE="$COMPILE -c \"\$1\" -o \"\$2\""
echo "#!/bin/sh" >> ${CC_ASAN}
echo "# gen by configure" >> ${CC_ASAN}
echo "LOG=\".build/\$1.debug.log\"" >> ${CC_ASAN}
echo "CC=\"${CC}\"" >> ${CC_ASAN}
echo "CPPFLAGS=\"${CPPFLAGS_ASAN}\"" >> ${CC_ASAN}
echo "CFLAGS=\"${CFLAGS_ASAN}\"" >> ${CC_ASAN}
echo "$COMPILE > \"\$LOG\" 2>&1 || $COMPILE" >> ${CC_ASAN}
update_and_chmod 755 ${CC_ASAN} .build_cc_asan
echo "#!/bin/sh" >> ${CC_COV}
echo "# gen by configure" >> ${CC_COV}
echo "LOG=\".build/\$1.debug.log\"" >> ${CC_COV}
echo "CC=\"${CC}\"" >> ${CC_COV}
echo "CPPFLAGS=\"${CPPFLAGS_COV}\"" >> ${CC_COV}
echo "CFLAGS=\"${CFLAGS_COV}\"" >> ${CC_COV}
echo "$COMPILE > \"\$LOG\" 2>&1 || $COMPILE" >> ${CC_COV}
update_and_chmod 755 ${CC_COV} .build_cc_cov
echo "#!/bin/sh" >> ${CC_DEBUG}
echo "# gen by configure" >> ${CC_DEBUG}
echo "LOG=\".build/\$1.debug.log\"" >> ${CC_DEBUG}
echo "CC=\"${CC}\"" >> ${CC_DEBUG}
echo "CPPFLAGS=\"${CPPFLAGS_DEBUG}\"" >> ${CC_DEBUG}
echo "CFLAGS=\"${CFLAGS_DEBUG}\"" >> ${CC_DEBUG}
echo "$COMPILE > \"\$LOG\" 2>&1 || $COMPILE" >> ${CC_DEBUG}
update_and_chmod 755 ${CC_DEBUG} .build_cc_debug
echo "#!/bin/sh" >> ${CC_MAIN}
echo "# gen by configure" >> ${CC_MAIN}
echo "LOG=\".build/\$1.main.log\"" >> ${CC_MAIN}
echo "CC=\"${CC}\"" >> ${CC_MAIN}
echo "CPPFLAGS=\"${CPPFLAGS}\"" >> ${CC_MAIN}
echo "CFLAGS=\"${CFLAGS}\"" >> ${CC_MAIN}
echo "$COMPILE > \"\$LOG\" 2>&1 || $COMPILE" >> ${CC_MAIN}
update_and_chmod 755 ${CC_MAIN} .build_cc_main
}
update_build_lib() {
LD_MAIN=.build_ld_main.tmp
LD_ASAN=.build_ld_asan.tmp
LD_COV=.build_ld_cov.tmp
LD_DEBUG=.build_ld_debug.tmp
mkdir -p .build
LINK="${LIBTOOL} --tag=CC --mode=link "
LINK="$LINK \${CC} -shared \${CFLAGS} \${LDFLAGS}"
LINK="$LINK \${OBJECTS} \${LIBS} -rpath ${LIBDIR} -o \"\$1\""
echo "#!/bin/sh" >> ${LD_ASAN}
echo "# gen by configure" >> ${LD_ASAN}
echo "LOG=\".build/\$1.asan.log\"" >> ${LD_ASAN}
echo "CC=\"${CC}\"" >> ${LD_ASAN}
echo "CFLAGS=\"${CFLAGS_ASAN}\"" >> ${LD_ASAN}
echo "LDFLAGS=\"${LDFLAGS_ASAN}\"" >> ${LD_ASAN}
echo "OBJECTS=\"${OBJECTS_ASAN}\"" >> ${LD_ASAN}
echo "LIBS=\"${LIBS_ASAN}\"" >> ${LD_ASAN}
echo >> ${LD_ASAN}
echo "$LINK > \"\$LOG\" 2>&1 || $LINK" >> ${LD_ASAN}
update_and_chmod 755 ${LD_ASAN} .build_ld_asan
echo "#!/bin/sh" >> ${LD_COV}
echo "# gen by configure" >> ${LD_COV}
echo "LOG=\".build/\$1.cov.log\"" >> ${LD_COV}
echo "CC=\"${CC}\"" >> ${LD_COV}
echo "CFLAGS=\"${CFLAGS_COV}\"" >> ${LD_COV}
echo "LDFLAGS=\"${LDFLAGS_COV}\"" >> ${LD_COV}
echo "OBJECTS=\"${OBJECTS_COV}\"" >> ${LD_COV}
echo "LIBS=\"${LIBS_COV}\"" >> ${LD_COV}
echo >> ${LD_COV}
echo "$LINK > \"\$LOG\" 2>&1 || $LINK" >> ${LD_COV}
update_and_chmod 755 ${LD_COV} .build_ld_cov
echo "#!/bin/sh" >> ${LD_DEBUG}
echo "# gen by configure" >> ${LD_DEBUG}
echo "LOG=\".build/\$1.debug.log\"" >> ${LD_DEBUG}
echo "CC=\"${CC}\"" >> ${LD_DEBUG}
echo "CFLAGS=\"${CFLAGS_DEBUG}\"" >> ${LD_DEBUG}
echo "LDFLAGS=\"${LDFLAGS_DEBUG}\"" >> ${LD_DEBUG}
echo "OBJECTS=\"${OBJECTS_DEBUG}\"" >> ${LD_DEBUG}
echo "LIBS=\"${LIBS_DEBUG}\"" >> ${LD_DEBUG}
echo >> ${LD_DEBUG}
echo "$LINK > \"\$LOG\" 2>&1 || $LINK" >> ${LD_DEBUG}
update_and_chmod 755 ${LD_DEBUG} .build_ld_debug
echo "#!/bin/sh" >> ${LD_MAIN}
echo "# gen by configure" >> ${LD_MAIN}
echo "LOG=\".build/\$1.main.log\"" >> ${LD_MAIN}
echo "CC=\"${CC}\"" >> ${LD_MAIN}
echo "CFLAGS=\"${CFLAGS}\"" >> ${LD_MAIN}
echo "LDFLAGS=\"${LDFLAGS}\"" >> ${LD_MAIN}
echo "OBJECTS=\"${OBJECTS}\"" >> ${LD_MAIN}
echo "LIBS=\"${LIBS}\"" >> ${LD_MAIN}
echo >> ${LD_MAIN}
echo "$LINK > \"\$LOG\" 2>&1 || $LINK" >> ${LD_MAIN}
update_and_chmod 755 ${LD_MAIN} .build_ld_main
}
update_build_objc() {
OBJCC_MAIN=.build_objcc_main.tmp
OBJCC_ASAN=.build_objcc_asan.tmp
OBJCC_COV=.build_objcc_cov.tmp
OBJCC_DEBUG=.build_objcc_debug.tmp
mkdir -p .build
echo "#!/bin/sh" >> ${OBJCC_ASAN}
echo "# gen by configure" >> ${OBJCC_ASAN}
echo "OBJCC=\"${OBJCC}\"" >> ${OBJCC_ASAN}
echo "CPPFLAGS=\"${CPPFLAGS_ASAN}\"" >> ${OBJCC_ASAN}
echo "CFLAGS=\"${CFLAGS_ASAN}\"" >> ${OBJCC_ASAN}
echo "${LIBTOOL} --tag=CC --mode=compile \${OBJCC} \${CPPFLAGS} \${CFLAGS} -c \"\$1\" -o \"\$2\" >> .build/log 2>&1" >> ${OBJCC_ASAN}
update_and_chmod 755 ${OBJCC_ASAN} .build_objcc_asan
echo "#!/bin/sh" >> ${OBJCC_COV}
echo "# gen by configure" >> ${OBJCC_COV}
echo "OBJCC=\"${OBJCC}\"" >> ${OBJCC_COV}
echo "CPPFLAGS=\"${CPPFLAGS_COV}\"" >> ${OBJCC_COV}
echo "CFLAGS=\"${CFLAGS_COV}\"" >> ${OBJCC_COV}
echo "${LIBTOOL} --tag=CC --mode=compile \${OBJCC} \${CPPFLAGS} \${CFLAGS} -c \"\$1\" -o \"\$2\" >> .build/log 2>&1" >> ${OBJCC_COV}
update_and_chmod 755 ${OBJCC_COV} .build_objcc_cov
echo "#!/bin/sh" >> ${OBJCC_DEBUG}
echo "# gen by configure" >> ${OBJCC_DEBUG}
echo "OBJCC=\"${OBJCC}\"" >> ${OBJCC_DEBUG}
echo "CPPFLAGS=\"${CPPFLAGS_DEBUG}\"" >> ${OBJCC_DEBUG}
echo "CFLAGS=\"${CFLAGS_DEBUG}\"" >> ${OBJCC_DEBUG}
echo "${LIBTOOL} --tag=CC --mode=compile \${OBJCC} \${CPPFLAGS} \${CFLAGS} -c \"\$1\" -o \"\$2\" >> .build/log 2>&1" >> ${OBJCC_DEBUG}
update_and_chmod 755 ${OBJCC_DEBUG} .build_objcc_debug
echo "#!/bin/sh" >> ${OBJCC_MAIN}
echo "# gen by configure" >> ${OBJCC_MAIN}
echo "OBJCC=\"${OBJCC}\"" >> ${OBJCC_MAIN}
echo "CPPFLAGS=\"${CPPFLAGS}\"" >> ${OBJCC_MAIN}
echo "CFLAGS=\"${CFLAGS}\"" >> ${OBJCC_MAIN}
echo "${LIBTOOL} --tag=CC --mode=compile \${OBJCC} \${CPPFLAGS} \${CFLAGS} -c \"\$1\" -o \"\$2\" >> .build/log 2>&1" >> ${OBJCC_MAIN}
update_and_chmod 755 ${OBJCC_MAIN} .build_objcc_main
}
update_build_prog() {
LD_MAIN=.build_ld_main.tmp
LD_ASAN=.build_ld_asan.tmp
LD_COV=.build_ld_cov.tmp
LD_DEBUG=.build_ld_debug.tmp
mkdir -p .build
LINK="${LIBTOOL} --tag=CC --mode=link"
LINK="$LINK \${CC} \${CFLAGS} \${LDFLAGS} \${OBJECTS} \${LIBS}"
LINK="$LINK -o \"\$1\""
echo "#!/bin/sh" >> ${LD_ASAN}
echo "# gen by configure" >> ${LD_ASAN}
echo "LOG=\".build/\$1.asan.log\"" >> ${LD_ASAN}
echo "CC=\"${CC}\"" >> ${LD_ASAN}
echo "CFLAGS=\"${CFLAGS_ASAN}\"" >> ${LD_ASAN}
echo "LDFLAGS=\"${LDFLAGS_ASAN}\"" >> ${LD_ASAN}
echo "OBJECTS=\"${OBJECTS_ASAN}\"" >> ${LD_ASAN}
echo "LIBS=\"${LIBS_ASAN}\"" >> ${LD_ASAN}
echo >> ${LD_ASAN}
echo "$LINK > \"\$LOG\" 2>&1 || $LINK" >> ${LD_ASAN}
update_and_chmod 755 ${LD_ASAN} .build_ld_asan
echo "#!/bin/sh" >> ${LD_COV}
echo "# gen by configure" >> ${LD_COV}
echo "LOG=\".build/\$1.cov.log\"" >> ${LD_COV}
echo "CC=\"${CC}\"" >> ${LD_COV}
echo "CFLAGS=\"${CFLAGS_ASAN}\"" >> ${LD_COV}
echo "LDFLAGS=\"${LDFLAGS_COV}\"" >> ${LD_COV}
echo "OBJECTS=\"${OBJECTS_COV}\"" >> ${LD_COV}
echo "LIBS=\"${LIBS_COV}\"" >> ${LD_COV}
echo >> ${LD_COV}
echo "$LINK > \"\$LOG\" 2>&1 || $LINK" >> ${LD_COV}
update_and_chmod 755 ${LD_COV} .build_ld_cov
echo "#!/bin/sh" >> ${LD_DEBUG}
echo "# gen by configure" >> ${LD_DEBUG}
echo "LOG=\".build/\$1.debug.log\"" >> ${LD_DEBUG}
echo "CC=\"${CC}\"" >> ${LD_DEBUG}
echo "CFLAGS=\"${CFLAGS_DEBUG}\"" >> ${LD_DEBUG}
echo "LDFLAGS=\"${LDFLAGS_DEBUG}\"" >> ${LD_DEBUG}
echo "OBJECTS=\"${OBJECTS_DEBUG}\"" >> ${LD_DEBUG}
echo "LIBS=\"${LIBS_DEBUG}\"" >> ${LD_DEBUG}
echo >> ${LD_DEBUG}
echo "$LINK > \"\$LOG\" 2>&1 || $LINK" >> ${LD_DEBUG}
update_and_chmod 755 ${LD_DEBUG} .build_ld_debug
echo "#!/bin/sh" >> ${LD_MAIN}
echo "# gen by configure" >> ${LD_MAIN}
echo "LOG=\".build/\$1.main.log\"" >> ${LD_MAIN}
echo "CC=\"${CC}\"" >> ${LD_MAIN}
echo "CFLAGS=\"${CFLAGS_DEBUG}\"" >> ${LD_MAIN}
echo "LDFLAGS=\"${LDFLAGS}\"" >> ${LD_MAIN}
echo "OBJECTS=\"${OBJECTS}\"" >> ${LD_MAIN}
echo "LIBS=\"${LIBS}\"" >> ${LD_MAIN}
echo >> ${LD_MAIN}
echo "$LINK > \"\$LOG\" 2>&1 || $LINK" >> ${LD_MAIN}
update_and_chmod 755 ${LD_MAIN} .build_ld_main
}
update_file() {
if ! cmp "$1" "$2" >/dev/null 2>&1; then
mv "$1" "$2"
echo "-> ${PWD}/$2"
else
rm "$1"
fi
}
update_config_h() {
echo >> "${CONFIG_H}"
echo "#endif /* ${CONFIG_H_PREFIX}CONFIG_H */" >> ${CONFIG_H}
if ! cmp "${CONFIG_H}" config.h >/dev/null 2>&1; then
mv "${CONFIG_H}" config.h
echo "-> ${PWD}/config.h"
else
rm "${CONFIG_H}"
fi
}
update_config_mk() {
if ! cmp "${CONFIG_MK}" config.mk >/dev/null 2>&1; then
mv "${CONFIG_MK}" config.mk
echo "-> ${PWD}/config.mk"
else
rm "${CONFIG_MK}"
fi
}
update_sources_mk() {
if ! cmp "${SOURCES_MK}" sources.mk >/dev/null 2>&1; then
mv "${SOURCES_MK}" sources.mk
echo "-> ${PWD}/sources.mk"
else
rm "${SOURCES_MK}"
fi
}
update_sources_sh() {
if ! cmp "${SOURCES_SH}" sources.sh >/dev/null 2>&1; then
mv "${SOURCES_SH}" sources.sh
echo "-> ${PWD}/sources.sh"
else
rm "${SOURCES_SH}"
fi
}
CONFIG_H=config.h
CONFIG_H=".config.h.tmp"
echo "/* config.h generated by configure */" > ${CONFIG_H}
echo "#ifndef ${CONFIG_H_PREFIX}CONFIG_H" >> ${CONFIG_H}
echo "#define ${CONFIG_H_PREFIX}CONFIG_H" >> ${CONFIG_H}
echo >> "${CONFIG_H}"
CONFIG_MK=config.mk
CONFIG_MK=".config.mk.tmp"
echo "# config.mk generated by configure" > ${CONFIG_MK}
SOURCES_MK=sources.mk
SOURCES_MK=".sources.mk.tmp"
SOURCES_SH=sources.sh
SOURCES_SH=".sources.sh.tmp"
VER=0.1
echo "VER = $VER" >> ${CONFIG_MK}
echo "SRC_TOP = $SRC_TOP" >> ${CONFIG_MK}
ENV_CPPFLAGS="$CPPFLAGS"
ENV_CFLAGS="$CFLAGS"
ENV_CXXFLAGS="$CXXFLAGS"
ENV_LDFLAGS="$LDFLAGS"
ENV_LIBS="$LIBS"
if [ "x$CC" = "x" ]; then
if test -n $(which cc); then
CC=cc
elif test -n $(which gcc); then
CC=gcc
fi
fi
echo "CC = $CC" >> ${CONFIG_MK}
CC_TARGET=$(LC_ALL=C cc -v 2>&1 | grep 'Target: ' | cut -c 9-)
echo "CC_TARGET = $CC_TARGET" >> ${CONFIG_MK}
if [ "x$CXX" = "x" ]; then
if test -n $(which c++); then
CXX=c++
elif test -n $(which g++); then
CXX=g++
fi
fi
echo "CXX = $CXX" >> ${CONFIG_MK}
if [ "x$GCOV" = "xfalse" ]; then
HAVE_GCOV=false
else
if [ "x$GCOV" = "x" ]; then
if which gcov >/dev/null 2>&1; then
GCOV=gcov
HAVE_GCOV=true
elif which egcov >/dev/null 2>&1; then
GCOV=egcov
HAVE_GCOV=true
fi
HAVE_GCOV=false
else
HAVE_GCOV=true
fi
fi
echo "HAVE_GCOV = $HAVE_GCOV" >> ${CONFIG_MK}
if ${HAVE_GCOV}; then
echo "GCOV = $GCOV" >> ${CONFIG_MK}
fi
if [ "x$GMAKE" = "x" ]; then
if which gmake >/dev/null 2>&1; then
GMAKE=gmake
else
GMAKE=make
fi
fi
echo "GMAKE = $GMAKE" >> ${CONFIG_MK}
if [ "x$INSTALL" = "x" ]; then
if test -x "$(which install)"; then
INSTALL=install
fi
fi
echo "INSTALL = $INSTALL" >> ${CONFIG_MK}
if [ "x$LIBTOOL" = "x" ]; then
if test -x "$(which glibtool 2>/dev/null)"; then
LIBTOOL="$(which glibtool)"
elif test -x "/usr/local/bin/libtool"; then
LIBTOOL="/usr/local/bin/libtool"
elif test -x "$(which libtool 2>/dev/null)"; then
LIBTOOL="$(which libtool)"
else
LIBTOOL=libtool
fi
fi
echo "LIBTOOL = $LIBTOOL" >> ${CONFIG_MK}
#if [ "x$SWIFTC" = "x" ]; then
# if test -x "$(which swiftc 2>/dev/null)"; then
# SWIFTC="$(which swiftc)"
# HAVE_SWIFT=true
# else
# HAVE_SWIFT=false
# fi
#else
# HAVE_SWIFT=true
#fi
#echo "SWIFTC = $SWIFTC" >> ${CONFIG_MK}
#echo "HAVE_SWIFT = $HAVE_SWIFT" >> ${CONFIG_MK}
if [ "x$OBJCC" = "x" ]; then
if test -x "$(which clang 2>/dev/null)"; then
OBJCC="$(which clang)"
else
OBJCC=clang
fi
fi
echo "OBJCC = $OBJCC" >> ${CONFIG_MK}
PREFIX="${PREFIX:-/usr/local}"
echo "PREFIX = $PREFIX" >> ${CONFIG_MK}
echo "DESTDIR ?=" >> ${CONFIG_MK}
echo "prefix ?= ${DESTDIR}${PREFIX}" >> ${CONFIG_MK}
if [ "x$OWNER" = "x" ]; then
OWNER="$(ls -ld "$PREFIX" | tr -s ' ' | cut -d ' ' -f 3)"
fi
echo "OWNER = $OWNER" >> ${CONFIG_MK}
if [ "x$GROUP" = "x" ]; then
GROUP="$(ls -ld "$PREFIX" | tr -s ' ' | cut -d ' ' -f 4)"
fi
echo "GROUP = $GROUP" >> ${CONFIG_MK}
if [ "x$BINDIR" = "x" ]; then
BINDIR="${PREFIX}/bin"
fi
echo "BINDIR = $BINDIR" >> ${CONFIG_MK}
if [ "x$LIBDIR" = "x" ]; then
LIBDIR="${PREFIX}/lib"
fi
echo "LIBDIR = $LIBDIR" >> ${CONFIG_MK}
config_no_undefined