autoconf: Some improvements
cover autoconf: Some improvements
This series of patches, based on next branch
(commit id: 45c5baf2f082dd5f537f043f7637bff87db515e8)
introduces few minor improvements, and one (last) larger, following
"autoconf: Unset NO_STH and NEED_STH when it is detected not needed"
* [PATCH 1/4] autoconf: Add configure target to main Makefile
* [PATCH 2/4] autoconf: Error out on --without-shell and --without-perl
* [PATCH 3/4] autoconf: Improvements in NO_PYTHON/PYTHON_PATH handling
* [PATCH 4/4] autoconf: Move variables which we always set to config.mak.in
Signature · 2 lines
Jakub Narebski Poland
PATCH 1/4 autoconf: Add configure target to main Makefile
While at it fill git version information in configure.ac configure target needs autoconf, of course.
---
This will make testing autoconf improvements easier
Makefile | 7 +++++++ configure.ac | 2 +- 2 files changed, 8 insertions(+), 1 deletions(-)
Makefile +7 -0
@@ -676,6 +676,13 @@ git-instaweb: git-instaweb.sh gitweb/git chmod +x $@+ mv $@+ $@ +configure: configure.ac + rm -f $@ $<+ + sed -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \ + $< > $<+ + autoconf -o $@ $<+ + rm -f $<+ + # These can record GIT_VERSION git$X git.spec \ $(patsubst %.sh,%,$(SCRIPT_SH)) \
configure.ac +1 -1
@@ -2,7 +2,7 @@ # # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT([git], [1.4.1], [[email protected]]) +AC_INIT([git], [@@GIT_VERSION@@], [[email protected]]) AC_CONFIG_SRCDIR([git.c])
Signature · 1 line
1.4.1.1
[PATCH 5/4] autoconf: Mention "make configure" instead of "autoconf" in INSTALL
---
Should be part of [PATCH 1/4] in this series (replied-to patch)
INSTALL | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
INSTALL +1 -1
@@ -16,7 +16,7 @@ install" would not work. Alternatively you can use autoconf generated ./configure script to set up install paths (via config.mak.autogen), so you can write instead - $ autoconf ;# as yourself if ./configure doesn't exist yet + $ make configure ;# as yourself $ ./configure --prefix=/usr ;# as yourself $ make all doc ;# as yourself # make install install-doc ;# as root
Signature · 1 line
1.4.1.1
PATCH 2/4 autoconf: Error out on --without-shell and --without-perl
In reply to Jakub NarebskiError out on --without-shell/--with-shell=no and --without-perl/--with-perl=no instead of just warning and continuing.
---
It's a matter of taste (and not doing unexpected)
configure.ac | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
configure.ac +1 -1
@@ -37,7 +37,7 @@ # Used by GIT_ARG_SET_PATH(PROGRAM) AC_DEFUN([GIT_CONF_APPEND_PATH], [PROGRAM=m4_toupper($1); \ if test "$withval" = "no"; then \ - AC_MSG_WARN([You cannot use git without $1]); \ + AC_MSG_ERROR([You cannot use git without $1]); \ else \ if test "$withval" = "yes"; then \ AC_MSG_WARN([You should provide path for --with-$1=PATH]); \
Signature · 1 line
1.4.1.1
PATCH 3/4 autoconf: Improvements in NO_PYTHON/PYTHON_PATH handling
In reply to Jakub NarebskiUnset NO_PYTHON for --with-python without arguments, and when PYTHON_PATH is set. Do not check for PYTHON_PATH if it is set via --with-python=PYTHON_PATH. Prefer python to python2.4 etc.
---
What might be unexpected is the fact that even for --with-python (but only without setting PYTHON_PATH) autodetection might set NO_PYTHON
configure.ac | 15 +++++++++------ 1 files changed, 9 insertions(+), 6 deletions(-)
configure.ac +9 -6
@@ -105,7 +105,10 @@ AC_ARG_WITH(python,[AS_HELP_STRING([--wi AS_HELP_STRING([--no-python], [don't use python scripts])], [if test "$withval" = "no"; then \ NO_PYTHON=YesPlease; \ - elif test "$withval" != "yes"; then \ + elif test "$withval" = "yes"; then \ + NO_PYTHON=; \ + else \ + NO_PYTHON=; \ PYTHON_PATH=$withval; \ fi; \ ])
@@ -138,15 +141,15 @@ # # Define NO_PYTHON if you want to lose all benefits of the recursive merge. # Define PYTHON_PATH to provide path to Python. if test -z "$NO_PYTHON"; then - AC_PATH_PROGS(PYTHON_PATH, [python2.4 python2.3 python2 python]) + if test -z "$PYTHON_PATH"; then + AC_PATH_PROGS(PYTHON_PATH, [python python2.4 python2.3 python2]) + fi if test -n "$PYTHON_PATH"; then GIT_CONF_APPEND_LINE([PYTHON_PATH=@PYTHON_PATH@]) - else - GIT_CONF_APPEND_LINE([NO_PYTHON=@NO_PYTHON@]) + NO_PYTHON="" fi -else - GIT_CONF_APPEND_LINE([NO_PYTHON=@NO_PYTHON@]) fi +GIT_CONF_APPEND_LINE([NO_PYTHON=@NO_PYTHON@]) ## Checks for libraries.
Signature · 1 line
1.4.1.1
PATCH 4/4 autoconf: Move variables which we always set to config.mak.in
In reply to Jakub NarebskiMove detected NO_STH and NEED_STH variables, which we always output, either setting or unsetting (setting to empty string) to config.mak.in and use setting appropriately named variables and doing AC_SUBST instead of adding them via GIT_CONF_APPEND_LINE macro and config.mak.append temporary file.
Variables which might and might not be set are still added via config.mak.append; this include all STH_PATH variables.
---
This makes our configure.ac more typical.
config.mak.in | 15 +++++++++++ configure.ac | 75 +++++++++++++++++++++++++++++++++------------------------ 2 files changed, 59 insertions(+), 31 deletions(-)
config.mak.in +15 -0
@@ -22,3 +22,18 @@ VPATH = @srcdir@ export exec_prefix mandir export srcdir VPATH +NO_PYTHON=@NO_PYTHON@ +NEEDS_SSL_WITH_CRYPTO=@NEEDS_SSL_WITH_CRYPTO@ +NO_CURL=@NO_CURL@ +NO_EXPAT=@NO_EXPAT@ +NEEDS_LIBICONV=@NEEDS_LIBICONV@ +NEEDS_SOCKET=@NEEDS_SOCKET@ +NO_D_INO_IN_DIRENT=@NO_D_INO_IN_DIRENT@ +NO_D_TYPE_IN_DIRENT=@NO_D_TYPE_IN_DIRENT@ +NO_SOCKADDR_STORAGE=@NO_SOCKADDR_STORAGE@ +NO_IPV6=@NO_IPV6@ +NO_C99_FORMAT=@NO_C99_FORMAT@ +NO_STRCASESTR=@NO_STRCASESTR@ +NO_STRLCPY=@NO_STRLCPY@ +NO_SETENV=@NO_SETENV@ +
configure.ac +44 -31
148 lines not on this page · raw message
Signature · 1 line
1.4.1.1
[PATCH 6/4] autoconf: Add forgotten NO_OPENSSL=@NO_OPENSSL@ to config.mak.in
---
Or just correct previous patch, instead.
config.mak.in | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
config.mak.in +1 -0
@@ -24,6 +24,7 @@ export srcdir VPATH NO_PYTHON=@NO_PYTHON@ NEEDS_SSL_WITH_CRYPTO=@NEEDS_SSL_WITH_CRYPTO@ +NO_OPENSSL=@NO_OPENSSL@ NO_CURL=@NO_CURL@ NO_EXPAT=@NO_EXPAT@ NEEDS_LIBICONV=@NEEDS_LIBICONV@
Signature · 1 line
1.4.1.1
PATCH 1/1 autoconf: Add support for setting CURLDIR, OPENSSLDIR, EXPATDIR
In reply to Jakub NarebskiAdd support for --with-openssl=PATH and --without-openssl, --with-curl=PATH and --without-curl, --with-expat=PATH and --without-expat ./configure options, each setting or unsetting appropriate NO_PACKAGE and if called with argument also PACKAGEDIR (of which only CURLDIR is documented in Makefile)
All above options are supported as override to autodetection; more to come in the same style (override to autodetection), so moved the bulk of comments for site configuration down.
Needs review by someone well versed in autoconf and m4.
---
With this patch current autoconf generated ./configure script can do everything the first abandoned (rewritten) version could... and much, much more.
configure.ac | 158 +++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 101 insertions(+), 57 deletions(-)
configure.ac +101 -57
@@ -46,53 +46,29 @@ else \ fi; \ fi; \ ]) # GIT_CONF_APPEND_PATH +# +# GIT_PARSE_WITH(PACKAGE) +# ----------------------- +# For use in AC_ARG_WITH action-if-found, for packages default ON. +# * Set NO_PACKAGE=YesPlease for --without-PACKAGE +# * Set PACKAGEDIR=PATH for --with-PACKAGE=PATH +# * Unset NO_PACKAGE for --with-PACKAGE without ARG +AC_DEFUN([GIT_PARSE_WITH], +[PACKAGE=m4_toupper($1); \ +if test "$withval" = "no"; then \ + m4_toupper(NO_$1)=YesPlease; \ +elif test "$withval" = "yes"; then \ + m4_toupper(NO_$1)=; \ +else \ + m4_toupper(NO_$1)=; \ + GIT_CONF_APPEND_LINE(${PACKAGE}DIR=$withval); \ +fi \ +])# GIT_PARSE_WITH -## Site configuration +## Site configuration related to programs (before tests) ## --with-PACKAGE[=ARG] and --without-PACKAGE # -# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability -# tests. These tests take up a significant amount of the total test time -# but are not needed unless you plan to talk to SVN repos. -# -# Define MOZILLA_SHA1 environment variable when running make to make use of -# a bundled SHA1 routine coming from Mozilla. It is GPL'd and should be fast -# on non-x86 architectures (e.g. PowerPC), while the OpenSSL version (default -# choice) has very fast version optimized for i586. -# -# Define PPC_SHA1 environment variable when running make to make use of -# a bundled SHA1 routine optimized for PowerPC. -# -# Define ARM_SHA1 environment variable when running make to make use of -# a bundled SHA1 routine optimized for ARM. -# -# Define NO_OPENSSL environment variable if you do not have OpenSSL. -# This also implies MOZILLA_SHA1. -# -# Define NO_CURL if you do not have curl installed. git-http-pull and -# git-http-push are not built, and you cannot use http:// and https:// -# transports. -# -# Define CURLDIR=/foo/bar if your curl header and library files are in -# /foo/bar/include and /foo/bar/lib directories. -# -# Define NO_EXPAT if you do not have expat installed. git-http-push is -# not built, and you cannot push using http:// and https:// transports. -# -# Define NO_FINK if you are building on Darwin/Mac OS X, have Fink -# installed in /sw, but don't want GIT to link against any libraries -# installed there. If defined you may specify your own (or Fink's) -# include directories and library directories by defining CFLAGS -# and LDFLAGS appropriately. -# -# Define NO_DARWIN_PORTS if you are building on Darwin/Mac OS X, -# have DarwinPorts installed in /opt/local, but don't want GIT to -# link against any libraries installed there. If defined you may -# specify your own (or DarwinPort's) include directories and -# library directories by defining CFLAGS and LDFLAGS appropriately. -# -# Define NO_MMAP if you want to avoid mmap. -# # Define SHELL_PATH to provide path to shell. GIT_ARG_SET_PATH(shell) #
@@ -114,20 +90,6 @@ AS_HELP_STRING([--no-python], [don't use ]) AC_SUBST(NO_PYTHON) AC_SUBST(PYTHON_PATH) -# -## --enable-FEATURE[=ARG] and --disable-FEATURE -# Define COLLISION_CHECK below if you believe that SHA1's -# 1461501637330902918203684832716283019655932542976 hashes do not give you -# sufficient guarantee that no collisions between objects will ever happen. -# -# Define USE_NSEC below if you want git to care about sub-second file mtimes -# and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and -# it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely -# randomly break unless your underlying filesystem supports those sub-second -# times (my ext3 doesn't). -# -# Define USE_STDEV below if you want git to care about the underlying device -# change being considered an inode change from the update-cache perspective. ## Checks for programs.
@@ -259,6 +221,7 @@ else fi AC_SUBST(NO_C99_FORMAT) + ## Checks for library functions. ## (in default C library and libraries checked by AC_CHECK_LIB) AC_MSG_NOTICE([CHECKS for library functions])
@@ -299,6 +262,87 @@ # Define NO_ACCURATE_DIFF if your diff p # a missing newline at the end of the file. +## Site configuration (override autodetection) +## --with-PACKAGE[=ARG] and --without-PACKAGE +AC_MSG_NOTICE([CHECKS for site configuration]) +# +# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability +# tests. These tests take up a significant amount of the total test time +# but are not needed unless you plan to talk to SVN repos. +# +# Define MOZILLA_SHA1 environment variable when running make to make use of +# a bundled SHA1 routine coming from Mozilla. It is GPL'd and should be fast +# on non-x86 architectures (e.g. PowerPC), while the OpenSSL version (default +# choice) has very fast version optimized for i586. +# +# Define PPC_SHA1 environment variable when running make to make use of +# a bundled SHA1 routine optimized for PowerPC. +# +# Define ARM_SHA1 environment variable when running make to make use of +# a bundled SHA1 routine optimized for ARM. +# +# Define NO_OPENSSL environment variable if you do not have OpenSSL. +# This also implies MOZILLA_SHA1. +# +# Define OPENSSLDIR=/foo/bar if your openssl header and library files are in +# /foo/bar/include and /foo/bar/lib directories. +AC_ARG_WITH(openssl, +AS_HELP_STRING([--with-openssl],[use OpenSSL library (default is YES)]) +AS_HELP_STRING([], [ARG can be prefix for openssl library and headers]),\ +GIT_PARSE_WITH(openssl)) +# +# Define NO_CURL if you do not have curl installed. git-http-pull and +# git-http-push are not built, and you cannot use http:// and https:// +# transports. +# +# Define CURLDIR=/foo/bar if your curl header and library files are in +# /foo/bar/include and /foo/bar/lib directories. +AC_ARG_WITH(curl, +AS_HELP_STRING([--with-curl],[support http(s):// transports (default is YES)]) +AS_HELP_STRING([], [ARG can be also prefix for curl library and headers]), +GIT_PARSE_WITH(curl)) +# +# Define NO_EXPAT if you do not have expat installed. git-http-push is +# not built, and you cannot push using http:// and https:// transports. +# +# Define EXPATDIR=/foo/bar if your expat header and library files are in +# /foo/bar/include and /foo/bar/lib directories. +AC_ARG_WITH(expat, +AS_HELP_STRING([--with-expat], +[support git-push using http:// and https:// transports via WebDAV (default is YES)]) +AS_HELP_STRING([], [ARG can be also prefix for expat library and headers]), +GIT_PARSE_WITH(expat)) +# +# Define NO_FINK if you are building on Darwin/Mac OS X, have Fink +# installed in /sw, but don't want GIT to link against any libraries +# installed there. If defined you may specify your own (or Fink's) +# include directories and library directories by defining CFLAGS +# and LDFLAGS appropriately. +# +# Define NO_DARWIN_PORTS if you are building on Darwin/Mac OS X, +# have DarwinPorts installed in /opt/local, but don't want GIT to +# link against any libraries installed there. If defined you may +# specify your own (or DarwinPort's) include directories and +# library directories by defining CFLAGS and LDFLAGS appropriately. +# +# Define NO_MMAP if you want to avoid mmap. + +## --enable-FEATURE[=ARG] and --disable-FEATURE +# +# Define COLLISION_CHECK below if you believe that SHA1's +# 1461501637330902918203684832716283019655932542976 hashes do not give you +# sufficient guarantee that no collisions between objects will ever happen. +# +# Define USE_NSEC below if you want git to care about sub-second file mtimes +# and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and +# it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely +# randomly break unless your underlying filesystem supports those sub-second +# times (my ext3 doesn't). +# +# Define USE_STDEV below if you want git to care about the underlying device +# change being considered an inode change from the update-cache perspective. + + ## Output files AC_CONFIG_FILES(["${config_file}":"${config_in}":"${config_append}"]) AC_OUTPUT
Signature · 1 line
1.4.1.1
Re: [PATCH 7] autoconf: Add support for setting CURLDIR, OPENSSLDIR, EXPATDIR
Quoted 9 lines · Jakub Narebski
Add support for --with-openssl=PATH and --without-openssl, --with-curl=PATH and --without-curl, --with-expat=PATH and --without-expat ./configure options, each setting or unsetting appropriate
NO_PACKAGEand if called with argument also PACKAGEDIR (of which only CURLDIR is documented inMakefile)All above options are supported as override to autodetection; more to come in the same style (override to autodetection), so moved the bulk of comments for site configuration down.
Is this patch dropped?
Signature · 3 lines
Jakub Narebski Warsaw, Poland ShadeHawk on #git
Re: [PATCH 7] autoconf: Add support for setting CURLDIR, OPENSSLDIR, EXPATDIR
Quoted 8 lines · Jakub Narebski
Quoted 6 lines · Jakub Narebski
Add support for --with-openssl=PATH and --without-openssl, --with-curl=PATH and --without-curl, --with-expat=PATH and --without-expat ./configure options, each setting or unsetting appropriate
NO_PACKAGEand if called with argument also PACKAGEDIR (of which only CURLDIR is documented inMakefile)
Quoted 5 lines
Quoted 3 lines
All above options are supported as override to autodetection; more to come in the same style (override to autodetection), so moved the bulk of comments for site configuration down.
Is this patch dropped?
I think it should be on "pu" but I might have missed it; it came with a warning not to apply didn't it?
Re: [PATCH 7] autoconf: Add support for setting CURLDIR, OPENSSLDIR, EXPATDIR
<opublikowany i wysłany>
Quoted 10 lines · Junio C Hamano
Quoted 8 lines · Jakub Narebski
Quoted 6 lines · Jakub Narebski
Add support for --with-openssl=PATH and --without-openssl, --with-curl=PATH and --without-curl, --with-expat=PATH and --without-expat ./configure options, each setting or unsetting appropriate
NO_PACKAGEand if called with argument also PACKAGEDIR (of which only CURLDIR is documented inMakefile)
Quoted 8 lines
Quoted 5 lines
Quoted 3 lines
All above options are supported as override to autodetection; more to come in the same style (override to autodetection), so moved the bulk of comments for site configuration down.
Is this patch dropped?
I think it should be on "pu" but I might have missed it; it came with a warning not to apply didn't it?
Yes, although the warning is more about the _style_ than about what it does. It works as far as I tested, but IMVHO it is a bit of hack.
Signature · 3 lines
Jakub Narebski Warsaw, Poland ShadeHawk on #git
PATCH 1/1 autoconf: It is --without-python, not --no-python
In reply to Jakub Narebski--- configure.ac | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
configure.ac +1 -1
@@ -78,7 +78,7 @@ # # Define NO_PYTHON if you want to lose all benefits of the recursive merge. # Define PYTHON_PATH to provide path to Python. AC_ARG_WITH(python,[AS_HELP_STRING([--with-python=PATH], [provide PATH to python]) -AS_HELP_STRING([--no-python], [don't use python scripts])], +AS_HELP_STRING([--without-python], [don't use python scripts])], [if test "$withval" = "no"; then \ NO_PYTHON=YesPlease; \ elif test "$withval" = "yes"; then \
Signature · 1 line
1.4.1.1
PATCH 1/1 autoconf: clean temporary file mak.append
In reply to Jakub NarebskiWhen configure is interrupted in the middle it leaves config.mak.append behind. Add it to .gitignore and make sure $(MAKE) clean removes it.
Also earlier .gitignore listed config.mak.in which is a tracked file. Fix it.
---
* on top of today's 5 series from you.
.gitignore | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
.gitignore +1 -1
@@ -140,7 +140,7 @@ config.mak autom4te.cache config.log config.status -config.mak.in config.mak.autogen +config.mak.append configure git-blame
Makefile +1 -1
@@ -793,7 +793,7 @@ clean: rm -f $(ALL_PROGRAMS) $(BUILT_INS) git$X rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags rm -rf autom4te.cache - rm -f config.log config.mak.autogen configure config.status config.cache + rm -f configure config.log config.mak.autogen config.mak.append config.status config.cache rm -rf $(GIT_TARNAME) .doc-tmp-dir rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz rm -f $(htmldocs).tar.gz $(manpages).tar.gz
Signature · 1 line
1.4.2.rc3.g45c5
Re: [PATCH] autoconf: clean temporary file mak.append
Makefile clean: · line 799
Quoted 13 lines · Junio C Hamano
Makefile +1
-1@@ -793,7 +793,7 @@ clean: rm -f $(ALL_PROGRAMS) $(BUILT_INS) git$X rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags rm -rf autom4te.cache - rm -f config.log config.mak.autogen configure config.status config.cache + rm -f configure config.log config.mak.autogen config.mak.append config.status config.cache rm -rf $(GIT_TARNAME) .doc-tmp-dir rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz rm -f $(htmldocs).tar.gz $(manpages).tar.gz
I didn't add configure to make clean, because there was hand-crafted configure script in git.git.
Signature · 3 lines
Jakub Narebski Warsaw, Poland ShadeHawk on #git
Re: [PATCH] autoconf: clean temporary file mak.append
Quoted 18 lines · Jakub Narebski
Makefile clean: · line 799
Quoted 13 lines · Junio C Hamano
Makefile +1
-1@@ -793,7 +793,7 @@ clean: rm -f $(ALL_PROGRAMS) $(BUILT_INS) git$X rm -f *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags rm -rf autom4te.cache - rm -f config.log config.mak.autogen configure config.status config.cache + rm -f configure config.log config.mak.autogen config.mak.append config.status config.cache rm -rf $(GIT_TARNAME) .doc-tmp-dir rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz rm -f $(htmldocs).tar.gz $(manpages).tar.gzI didn't add configure to make clean, because there was hand-crafted configure script in git.git.
Did anybody ask who added 'configure'?