#! /bin/sh # local options: ac_help is the help message that describes them # and LOCAL_AC_OPTIONS is the script that interprets them. LOCAL_AC_OPTIONS # is a script that's processed with eval, so you need to be very careful to # make certain that what you quote is what you want to quote. # load in the configuration file # ac_help='--enable-amalloc Enable memory allocation debugging --with-tabstops=N Set tabstops to N characters (default is 4) --shared Build shared libraries (default is static) --container Build inside a container --pkg-config Install pkg-config(1) glue files --cxx-binding Install header files with c++ wrappers --github-checkbox[=input] Enable github-style checkboxes in lists (if =input, use , otherwise use html ballot entities)' LOCAL_AC_OPTIONS=' set=`locals $*`; if [ "$set" ]; then eval $set shift 1 else ac_error=T; fi' locals() { K=`echo $1 | $AC_UPPERCASE` case "$K" in --SHARED) echo TRY_SHARED=T ;; --ENABLE-*) enable=`echo $K | sed -e 's/--ENABLE-//' | tr '-' '_'` echo WITH_${enable}=T ;; --DEBIAN-GLITCH) echo DEBIAN_GLITCH=T ;; --CONTAINER) echo CONTAINER=T ;; --H1-TITLE) echo H1TITLE=T ;; --PKG-CONFIG) echo PKGCONFIG=T ;; --CXX-BINDING) echo CXX_BINDING=T ;; --GITHUB-CHECKBOX=ENTITY) echo GITHUB_CHECKBOX_STYLE=entity ;; --GITHUB-CHECKBOX=INPUT) echo GITHUB_CHECKBOX_STYLE=input ;; esac } VERSION=`cat VERSION` TARGET=markdown . ./configure.inc # if there's a makefile here, it's likely that it's a discount # makefile and there's bits of an old configuration here. So # blow everything away before we start the configuration. test -f Makefile && make spotless 2>/dev/null >/dev/null AC_INIT $TARGET AC_SUB 'PACKAGE_NAME' lib$TARGET AC_SUB 'PACKAGE_VERSION' $VERSION # define definition list type defaults (for theme) # case "`echo "$WITH_DL" | $AC_UPPERCASE`" in DISCOUNT) AC_DEFINE THEME_DL_MODE 1 ;; EXTRA) AC_DEFINE THEME_DL_MODE 2 ;; BOTH) AC_DEFINE THEME_DL_MODE 3 ;; esac test "$WITH_FENCED_CODE" && AC_DEFINE THEME_FENCED_CODE 1 AC_DEFINE THEME_CF "$THEME_CF" test "$DEBIAN_GLITCH" && AC_DEFINE 'DEBIAN_GLITCH' 1 AC_PROG_CC AC_QUIET AC_PROG git && AC_DEFINE 'HAS_GIT' '1' test "$TRY_SHARED" && AC_COMPILER_PIC && AC_CC_SHLIBS if [ "IS_BROKEN_CC" ]; then case "$AC_CC $AC_CFLAGS" in *-pedantic*) ;; *) # hack around deficiencies in gcc and clang # AC_DEFINE 'while(x)' 'while( (x) != 0 )' AC_DEFINE 'if(x)' 'if( (x) != 0 )' if [ "$IS_CLANG" ]; then AC_CC="$AC_CC -Wno-implicit-int" elif [ "$IS_GCC" ]; then AC_CC="$AC_CC -Wno-return-type -Wno-implicit-int" fi ;; esac fi AC_PROG ar || AC_FAIL "$TARGET requires ar" AC_PROG ranlib # should we create a .pc for pkg-config & GNU automake # if [ "$PKGCONFIG" ]; then AC_SUB MK_PKGCONFIG '' elif AC_PROG pkg-config || AC_PROG automake ; then PKGCONFIG=true AC_SUB MK_PKGCONFIG '' else AC_SUB MK_PKGCONFIG '#' fi AC_C_VOLATILE AC_C_CONST AC_C_INLINE AC_SCALAR_TYPES sub hdr AC_CHECK_BASENAME AC_CHECK_ALLOCA AC_CHECK_HEADERS sys/types.h pwd.h && AC_CHECK_FUNCS getpwuid if AC_CHECK_HEADERS sys/stat.h && AC_CHECK_FUNCS stat; then # need to check some of the S_ISxxx stat macros, because they may not # exist (for notspecial.c) cat > ngc$$.c << EOF #include int main(int argc, char **argv) { struct stat info; if ( stat(argv[0], &info) != 0 ) return 1; return MACRO(info.st_mode); } EOF LOGN "special file macros in sys/stat.h:" _none="none" for x in ISSOCK ISCHR ISFIFO; do if $AC_CC -DMACRO=S_$x -o ngc$$.o ngc$$.c; then LOGN " S_${x}" AC_DEFINE "HAS_${x}" '1' unset _none fi done LOG "${_none}." __remove ngc$$.o ngc$$.c fi # find out if the isspace() function on this system is one # that dumps core of characters with the 8th bit set cat > ngc$$.c << EOF #include #include main() { char text[] = { -3 }; return isspace(text[0]); } EOF if $AC_CC $AC_CFLAGS -o ngc$$ ngc$$.c; then LOGN "is isspace() broken: " if ./ngc$$ ; then LOG "no" else AC_CC="$AC_CC -funsigned-char" $AC_CC $AC_CFLAGS -o ngc$$ ngc$$.c if ./ngc$$; then LOG "yes (patchable)" else LOG "yes (not patchable)" fi fi else LOG "can't compile test program?" fi rm -rf ngc$$* if AC_CHECK_FUNCS srandom; then AC_DEFINE 'INITRNG(x)' 'srandom((unsigned int)x)' elif AC_CHECK_FUNCS srand; then AC_DEFINE 'INITRNG(x)' 'srand((unsigned int)x)' else AC_DEFINE 'INITRNG(x)' '(void)1' fi AC_CHECK_FUNCS 'memset((char*)0,0,0)' 'string.h' || \ AC_CHECK_FUNCS 'memset((char*)0,0,0)' || \ AC_FAIL "$TARGET requires memset" if AC_CHECK_FUNCS random; then AC_DEFINE 'COINTOSS()' '(random()&1)' elif AC_CHECK_FUNCS rand; then AC_DEFINE 'COINTOSS()' '(rand()&1)' else AC_DEFINE 'COINTOSS()' '1' fi if AC_CHECK_FUNCS strcasecmp; then : elif AC_CHECK_FUNCS stricmp; then AC_DEFINE strcasecmp stricmp else AC_FAIL "$TARGET requires either strcasecmp() or stricmp()" fi if AC_CHECK_FUNCS strncasecmp; then : elif AC_CHECK_FUNCS strnicmp; then AC_DEFINE strncasecmp strnicmp else AC_FAIL "$TARGET requires either strncasecmp() or strnicmp()" fi if AC_CHECK_FUNCS fchdir || AC_CHECK_FUNCS getcwd ; then AC_SUB 'THEME' '' else AC_SUB 'THEME' '#' fi if [ -z "$WITH_TABSTOPS" ]; then TABSTOP=4 elif [ "$WITH_TABSTOPS" -eq 1 ]; then TABSTOP=8 else TABSTOP=$WITH_TABSTOPS fi AC_DEFINE 'TABSTOP' $TABSTOP AC_SUB 'TABSTOP' $TABSTOP if [ "$WITH_AMALLOC" ]; then AC_DEFINE 'USE_AMALLOC' 1 AC_SUB 'AMALLOC' 'amalloc.o' else AC_SUB 'AMALLOC' '' fi if [ "$H1TITLE" ]; then AC_SUB 'H1TITLE' h1title.o AC_DEFINE USE_H1TITLE 1 else AC_SUB 'H1TITLE' '' fi if [ "$GITHUB_CHECKBOX_STYLE" = "entity" ]; then AC_DEFINE 'CHECKBOX_AS_INPUT' '0' else AC_DEFINE 'CHECKBOX_AS_INPUT' '1' fi [ "$OS_FREEBSD" -o "$OS_DRAGONFLY" ] || AC_CHECK_HEADERS malloc.h [ "$WITH_PANDOC_HEADER" ] && AC_DEFINE 'PANDOC_HEADER' '1' GENERATE="Makefile version.c mkdio.h" if [ "$PKGCONFIG" ]; then GENERATE="$GENERATE libmarkdown.pc" fi AC_OUTPUT $GENERATE if [ "$CXX_BINDING" ]; then LOG "applying c++ glue to mkdio.h" mv mkdio.h mkdio.h$$ ( echo '#ifdef __cplusplus' echo 'extern "C" {' echo '#endif' cat mkdio.h$$ echo '#ifdef __cplusplus' echo '}' echo '#endif' ) > mkdio.h rm mkdio.h$$ fi