diff options
author | axel <axel@liljencrantz.se> | 2006-03-29 10:25:00 +1000 |
---|---|---|
committer | axel <axel@liljencrantz.se> | 2006-03-29 10:25:00 +1000 |
commit | dc91d7aec40e0d02d60d6131f5d93a72d5c5bdbb (patch) | |
tree | c1365acbe9022765be34f0c82dbed487196c7390 | |
parent | 13a51ba4c2301460d62502d66c6a7c8e020749d1 (diff) |
Further improvements to build system wrt detection of compiler and libc features and prototypes, as discussed with James Antill on mailin list
darcs-hash:20060329002500-ac50b-e7618e476ea69802bd2cb0076244f49a0f178df7.gz
-rw-r--r-- | Makefile.in | 12 | ||||
-rw-r--r-- | configure.ac | 101 |
2 files changed, 80 insertions, 33 deletions
diff --git a/Makefile.in b/Makefile.in index f03bf30f..e962ae8f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -72,7 +72,7 @@ COMMON_OBJS_WITH_HEADER := builtin_help.o # main.c exists, but main.h does not, etc. COMMON_OBJS_WITH_CODE := builtin_set.o builtin_commandline.o \ - builtin_ulimit.c builtin_complete.o + builtin_ulimit.o builtin_complete.o # All objects that the system needs to build fish FISH_OBJS := $(COMMON_OBJS) $(COMMON_OBJS_WITH_CODE) \ @@ -170,8 +170,10 @@ SHARE_DIR_FILES :=share/fish.in TESTS_DIR_FILES := $(TEST_IN) $(TEST_IN:.in=.out) $(TEST_IN:.in=.err) \ $(TEST_IN:.in=.status) tests/test.fish tests/gen_output.fish +# Files in ./share/completions/ COMPLETIONS_DIR_FILES := $(wildcard share/completions/*.fish) +# Files in ./share/functions/ FUNCTIONS_DIR_FILES := $(wildcard share/functions/*.fish) # Programs to build @@ -483,11 +485,11 @@ fish_tests: $(FISH_TESTS_OBJS) $(CC) $(FISH_TESTS_OBJS) $(LDFLAGS) -o $@ -mimedb: $(MIME_OBJS) doc_src/mimedb.c - $(CC) ${MIME_OBJS} doc_src/mimedb.c $(LDFLAGS) -o $@ +mimedb: $(MIME_OBJS) doc_src/mimedb.o + $(CC) ${MIME_OBJS} doc_src/mimedb.o $(LDFLAGS) -o $@ -set_color: set_color.o doc_src/set_color.c - $(CC) set_color.o doc_src/set_color.c $(LDFLAGS) -o $@ +set_color: set_color.o doc_src/set_color.o + $(CC) set_color.o doc_src/set_color.o $(LDFLAGS) -o $@ # Test program for the tokenizer library tokenizer_test: tokenizer.c tokenizer.h util.o wutil.o common.o diff --git a/configure.ac b/configure.ac index 22509e33..813d2f20 100644 --- a/configure.ac +++ b/configure.ac @@ -10,12 +10,12 @@ if test configure -ot configure.ac; then # shell and autconf should take care of that themselves AC_MSG_NOTICE([running autoconf]) if autoconf; then - ./configure $@ + ./configure "$@" fi exit else AC_MSG_ERROR( [cannot find the autoconf program in your path. -This program is needs to be run whenever the configure.ac file is modified. +This program needs to be run whenever the configure.ac file is modified. Please install it and try again.]) fi else @@ -32,7 +32,7 @@ if test ! -f ./config.h.in -o config.h.in -ot configure.ac; then autoheader else AC_MSG_ERROR( [cannot find the autoheader program in your path. -This program is needs to be run whenever the configure.ac file is modified. +This program needs to be run whenever the configure.ac file is modified. Please install it and try again.]) fi else @@ -113,21 +113,36 @@ else fi # +# Test if the compiler accepts the -std=c99 flag. If so, that +# increases the odds of correct compilation, since we want to use the +# *wprintf functions, which where defined in C99. +# + +XCFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -std=c99" +AC_MSG_CHECKING(if -std=c99 works) +AC_CACHE_VAL(local_cv_has__std_c99,[ +AC_TRY_RUN([ +#include <stdlib.h> +#include <stdio.h> + +int main() { +return 0; +}], +local_cv_has__std_c99=yes, +local_cv_has__std_c99=no, +)]) +AC_MSG_RESULT($local_cv_has__std_c99) +case x$local_cv_has__std_c99 in +xno) CFLAGS="$XCFLAGS" ;; +esac + +# # If we are using gcc, set some flags that increase the odds of the # compiler producing a working binary... # if test "$CC" = gcc; then - - # - # This seems to be needed in some glibc versions in order to get - # the prototypes for wide character functions like wcsdup and - # fwprintf. Fish should not actually use anu C99-specific - # features - if it does, please report this as a bug. - # - - CFLAGS="$CFLAGS -std=c99" - # # -fno-optimize-sibling-calls seems to work around a bug where @@ -148,27 +163,54 @@ if test "$CC" = gcc; then CFLAGS="$CFLAGS -Wall" +fi + + +# Check if we are compiling against glibc +AC_MSG_CHECKING([if we are compiling against glibc]) +AC_RUN_IFELSE( + [AC_LANG_PROGRAM([ +#include <stdlib.h> +#ifdef __GLIBC__ +#define STATUS 0 +#else +#define STATUS 1 +#endif], + [return STATUS;])], + [glibc=yes], + [glibc=no] ) + +if test "$glibc" = yes; then + AC_MSG_RESULT(yes) + # - # This gives us access to prototypes for gnu extensions if we are - # compiling agains glibc. All extensions that are used must have a - # fallback implementation available in fallback.h, in order to - # keep fish working on non-gnu platforms. + # This gives us access to prototypes for gnu extensions and C99 + # functions if we are compiling agains glibc. All GNU extensions + # that are used must have a fallback implementation available in + # fallback.h, in order to keep fish working on non-gnu platforms. # - CFLAGS="$CFLAGS -D _GNU_SOURCE" - -fi + CFLAGS="$CFLAGS -D _GNU_SOURCE -D _ISOC99_SOURCE" +else + AC_MSG_RESULT(no) +fi # Test cpu for special handling of ppc +# +# This is used to skip use of tputs on ppc systems, since it seemed to +# be broken, at least on older debin-based systems. This is obviously +# not the right way to to detect whether this workaround should be +# used, since it catches far to many systems, but I do not have the +# hardware available to narrow this problem down, and in practice, it +# seems that tputs is never really needed. +# AC_CANONICAL_TARGET if test $target_cpu = powerpc; then AC_DEFINE([TPUTS_KLUDGE],[1],[Evil kludge to get Power based machines to work]) fi -AC_DEFINE_UNQUOTED([CPU],[L"$target_cpu"],[CPU type]) - # Set up PREFIX and related preprocessor symbols. Fish needs to know # where it will be installed. One of the reasons for this is so that @@ -208,6 +250,12 @@ AC_SUBST( [LOCALEDIR], [$datadir/locale]) # information about running processes. AC_CHECK_FILES([/proc/self/stat]) +# This is ued to tell the wgetopt library to translate strings. This +# way wgetopt can be dropped into any project without requiring i18n. + +AC_DEFINE([HAVE_TRANSLATE_H], [1], + [Define to 1 if the wgettext function should be used for translating strings.]) + # Check for presense of various libraries AC_SEARCH_LIBS( gettext, intl, AC_SUBST( HAVE_GETTEXT, [1] ), AC_SUBST( HAVE_GETTEXT, [0] ) ) AC_SEARCH_LIBS( connect, socket, , [AC_MSG_ERROR([Cannot find the socket library, needed to build this package.] )] ) @@ -248,9 +296,10 @@ else AC_MSG_RESULT(no) fi +# If we have a fwprintf in libc, test that it actually works. As of +# March 2006, it is broken under Dragonfly BSD. if test "$ac_cv_func_fwprintf" = yes; then - # Check if fwprintf is broken AC_MSG_CHECKING([if fwprintf is broken]) AC_RUN_IFELSE( [AC_LANG_PROGRAM([ @@ -321,9 +370,6 @@ else AC_MSG_RESULT(no) fi -AC_DEFINE([HAVE_TRANSLATE_H], [1], - [Define to 1 if the wgettext function should be used for translating strings.]) - # Check for _nl_msg_cat_cntr symbol AC_MSG_CHECKING([for _nl_msg_cat_cntr symbol]) AC_TRY_LINK([#if HAVE_LIBINTL_H] @@ -344,5 +390,4 @@ AC_CONFIG_FILES([Makefile fish.spec doc_src/fish.1 doc_src/Doxyfile etc/fish etc AC_OUTPUT echo "fish is now configured." -echo "Now run 'make' and 'make install' to built and install fish." -echo "Good luck!" +echo "Use 'make' and 'make install' to built and install fish." |