From 2af8b0555a3fcf3618bc1aca178e7d6b8f8d80ca Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Thu, 29 Oct 2009 04:31:32 -0400 Subject: Removed the "all" phase from acprep --- acprep | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'acprep') diff --git a/acprep b/acprep index 574b51ec..807ad98b 100755 --- a/acprep +++ b/acprep @@ -1334,6 +1334,8 @@ class PrepareBuild(CommandLineApp): def phase_proof(self, *args): self.log.debug('Executing phase: proof') + self.phase_makeall(*args) + self.log.info('=== Copying source tree ===') self.phase_rsync() @@ -1403,11 +1405,6 @@ class PrepareBuild(CommandLineApp): self.configure_flavor('default', False) - def phase_do_all(self, *args): - self.log.debug('Executing phase: do_all') - self.phase_makeall(*args) - self.phase_proof(*args) - ######################################################################### # Help # ######################################################################### -- cgit v1.2.3 From 4bc99310f78a18b49228d574f293ffae8d127724 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Fri, 30 Oct 2009 17:46:09 -0400 Subject: Made acprep more verbose, and sensitive to errors --- acprep | 116 +++++++++++++++++++++++++++++++---------------------------------- 1 file changed, 55 insertions(+), 61 deletions(-) (limited to 'acprep') diff --git a/acprep b/acprep index 807ad98b..a7beeae8 100755 --- a/acprep +++ b/acprep @@ -293,7 +293,7 @@ class PrepareBuild(CommandLineApp): else: cmd = 'config' - self.log.debug('Invoking primary phase: ' + cmd) + self.log.info('Invoking primary phase: ' + cmd) PrepareBuild.__dict__['phase_' + cmd](self, *args) ######################################################################### @@ -364,7 +364,7 @@ class PrepareBuild(CommandLineApp): def ensure(self, dirname): if not exists(dirname): - self.log.debug('Making directory: ' + dirname) + self.log.info('Making directory: ' + dirname) os.makedirs(dirname) elif not isdir(dirname): self.log.error('Directory is not a directory: ' + dirname) @@ -396,11 +396,11 @@ class PrepareBuild(CommandLineApp): return False def phase_products(self, *args): - self.log.debug('Executing phase: products') + self.log.info('Executing phase: products') print self.products_directory() def phase_info(self, *args): - self.log.debug('Executing phase: info') + self.log.info('Executing phase: info') environ, conf_args = self.configure_environment() @@ -433,7 +433,7 @@ class PrepareBuild(CommandLineApp): self.log.debug(' %s' % arg) def phase_sloc(self, *args): - self.log.debug('Executing phase: sloc') + self.log.info('Executing phase: sloc') self.execute('sloccount', 'src', 'python', 'lisp', 'test') ######################################################################### @@ -441,13 +441,13 @@ class PrepareBuild(CommandLineApp): ######################################################################### def phase_gettext(self, *args): - self.log.debug('Executing phase: gettext') + self.log.info('Executing phase: gettext') # configure the template files assert exists('po') and isdir('po') if not exists(join('po', 'Makevars')): assert exists(join('po', 'Makevars.template')) - self.log.debug('Moving po/Makevars.template -> po/Makevars') + self.log.info('Moving po/Makevars.template -> po/Makevars') os.rename(join('po', 'Makevars.template'), join('po', 'Makevars')) @@ -460,22 +460,22 @@ class PrepareBuild(CommandLineApp): POTFILES_in.close() def phase_version(self, *args): - self.log.debug('Executing phase: version') + self.log.info('Executing phase: version') version_m4 = open('version.m4', 'w') version_m4.write("m4_define([VERSION_NUMBER], [%s])" % self.current_version()) version_m4.close() def phase_autogen(self, *args): - self.log.debug('Executing phase: autogen') + self.log.info('Executing phase: autogen') self.execute('sh', 'autogen.sh') def phase_aclocal(self, *args): - self.log.debug('Executing phase: aclocal') + self.log.info('Executing phase: aclocal') self.execute('aclocal', '-I', 'm4') def phase_autoconf(self, *args): - self.log.debug('Executing phase: autoconf') + self.log.info('Executing phase: autoconf') reason = self.need_to_prepare_autotools() if reason: self.log.info('autogen.sh must be run ' + reason) @@ -491,13 +491,13 @@ class PrepareBuild(CommandLineApp): ######################################################################### def phase_submodule(self, *args): - self.log.debug('Executing phase: submodule') + self.log.info('Executing phase: submodule') if exists('.git') and isdir('.git'): self.execute('git', 'submodule', 'init') self.execute('git', 'submodule', 'update') def phase_pull(self, *args): - self.log.debug('Executing phase: pull') + self.log.info('Executing phase: pull') if not exists('.git') and not isdir('.git'): self.log.error("This is not a Git clone.") sys.exit(1) @@ -509,7 +509,7 @@ class PrepareBuild(CommandLineApp): ######################################################################### def phase_dependencies(self, *args): - self.log.debug('Executing phase: dependencies') + self.log.info('Executing phase: dependencies') self.log.info("Installing Ledger's build dependencies ...") @@ -581,7 +581,7 @@ class PrepareBuild(CommandLineApp): self.execute(*packages) def phase_buildlibs(self, *args): - self.log.debug('Executing phase: buildlibs') + self.log.info('Executing phase: buildlibs') try: os.chdir('lib') @@ -645,12 +645,12 @@ class PrepareBuild(CommandLineApp): entries.sort() for entry in entries: if re.search('boost_regex', entry): - self.log.debug('Found a Boost library: ' + entry) + self.log.info('Found a Boost library: ' + entry) match = re.match('libboost_regex([^.]*)\.(a|so|dylib)', entry) if match: suffix = match.group(1) - self.log.debug('Found Boost suffix => ' + suffix) + self.log.info('Found Boost suffix => ' + suffix) self.envvars['BOOST_HOME'] = dirname(path) return suffix else: @@ -660,20 +660,20 @@ class PrepareBuild(CommandLineApp): def locate_boost(self): if self.envvars['BOOST_SUFFIX']: - self.log.debug(("Not looking for Boost, since " + + self.log.info(("Not looking for Boost, since " + "a suffix of '%s' was given") % self.envvars['BOOST_SUFFIX']) else: suffix = None for path in ['/usr/local/lib', '/opt/local/lib', '/sw/lib', '/usr/lib']: - self.log.debug('Looking for Boost in %s...' % path) + self.log.info('Looking for Boost in %s...' % path) suffix = self.locate_boost_in_dir(path) if suffix is not None: - self.log.debug('Boost is located here:') - self.log.debug('BOOST_HOME => ' + + self.log.info('Boost is located here:') + self.log.info('BOOST_HOME => ' + self.envvars['BOOST_HOME']) - self.log.debug('BOOST_SUFFIX => ' + suffix) + self.log.info('BOOST_SUFFIX => ' + suffix) break if suffix is None: self.log.error("Boost could not be found.") @@ -695,7 +695,7 @@ class PrepareBuild(CommandLineApp): '/sw/include']: if exists(path) and isdir(path) and \ path != '/usr/include': - self.log.debug('Noticing include directory => ' + path) + self.log.info('Noticing include directory => ' + path) self.sys_include_dirs.append(path) # Each of these becomes '-L' @@ -707,7 +707,7 @@ class PrepareBuild(CommandLineApp): '/opt/local/lib', '/sw/lib']: if exists(path) and isdir(path): - self.log.debug('Noticing library directory => ' + path) + self.log.info('Noticing library directory => ' + path) self.sys_library_dirs.append(path) def setup_for_johnw(self): @@ -726,7 +726,7 @@ class PrepareBuild(CommandLineApp): system = self.get_stdout('uname', '-s') - self.log.debug('System type is => ' + system) + self.log.info('System type is => ' + system) # These options are global defaults at the moment #self.option_warn() @@ -796,7 +796,7 @@ class PrepareBuild(CommandLineApp): self.log.error('Unknown build flavor "%s"' % self.current_flavor) sys.exit(1) - self.log.debug('Setting up build flavor => ' + self.current_flavor) + self.log.info('Setting up build flavor => ' + self.current_flavor) PrepareBuild.__dict__['setup_flavor_' + self.current_flavor](self) self.setup_flags() @@ -930,7 +930,7 @@ class PrepareBuild(CommandLineApp): if exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): self.envvars['BOOST_HOME'] = '/usr/local' self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' - self.log.debug('Setting BOOST_SUFFIX => %s' % + self.log.info('Setting BOOST_SUFFIX => %s' % self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/usr/local/include/boost-1_40') @@ -939,7 +939,7 @@ class PrepareBuild(CommandLineApp): self.envvars['BOOST_HOME'] = '/opt/local' self.envvars['BOOST_SUFFIX'] = '' - self.log.debug('Setting BOOST_SUFFIX => %s' % + self.log.info('Setting BOOST_SUFFIX => %s' % self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/opt/local/include/boost') @@ -966,7 +966,7 @@ class PrepareBuild(CommandLineApp): if exists('/usr/local/lib/libboost_regex-xgcc44-sd-1_40.a'): self.envvars['BOOST_HOME'] = '/usr/local' self.envvars['BOOST_SUFFIX'] = '-xgcc44-sd-1_40' - self.log.debug('Setting BOOST_SUFFIX => %s' % + self.log.info('Setting BOOST_SUFFIX => %s' % self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/usr/local/include/boost-1_40') @@ -975,7 +975,7 @@ class PrepareBuild(CommandLineApp): self.envvars['BOOST_HOME'] = '/opt/local' self.envvars['BOOST_SUFFIX'] = '-d' - self.log.debug('Setting BOOST_SUFFIX => %s' % + self.log.info('Setting BOOST_SUFFIX => %s' % self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/opt/local/include/boost') @@ -983,7 +983,7 @@ class PrepareBuild(CommandLineApp): if exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): self.envvars['BOOST_HOME'] = '/usr/local' self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' - self.log.debug('Setting BOOST_SUFFIX => %s' % + self.log.info('Setting BOOST_SUFFIX => %s' % self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/usr/local/include/boost-1_40') @@ -992,7 +992,7 @@ class PrepareBuild(CommandLineApp): self.envvars['BOOST_HOME'] = '/opt/local' self.envvars['BOOST_SUFFIX'] = '' - self.log.debug('Setting BOOST_SUFFIX => %s' % + self.log.info('Setting BOOST_SUFFIX => %s' % self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/opt/local/include/boost') @@ -1004,7 +1004,7 @@ class PrepareBuild(CommandLineApp): if exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): self.envvars['BOOST_HOME'] = '/usr/local' self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' - self.log.debug('Setting BOOST_SUFFIX => %s' % + self.log.info('Setting BOOST_SUFFIX => %s' % self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/usr/local/include/boost-1_40') @@ -1013,7 +1013,7 @@ class PrepareBuild(CommandLineApp): self.envvars['BOOST_HOME'] = '/opt/local' self.envvars['BOOST_SUFFIX'] = '' - self.log.debug('Setting BOOST_SUFFIX => %s' % + self.log.info('Setting BOOST_SUFFIX => %s' % self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/opt/local/include/boost') @@ -1038,7 +1038,7 @@ class PrepareBuild(CommandLineApp): """Alter the Makefile so that it's not nearly so verbose. This makes errors and warnings much easier to spot.""" - self.log.debug('Executing phase: patch') + self.log.info('Executing phase: patch') if exists('Makefile'): self.log.debug('Patching generated Makefile') @@ -1108,7 +1108,7 @@ class PrepareBuild(CommandLineApp): return False def phase_configure(self, *args): - self.log.debug('Executing phase: configure') + self.log.info('Executing phase: configure') self.configured = True @@ -1130,7 +1130,10 @@ class PrepareBuild(CommandLineApp): self.log.debug('configure args => ' + str(conf_args)) configure = Popen(conf_args, shell=False, env=environ) - configure.wait() + retcode = configure.wait() + if retcode < 0: + self.log.error("Child was terminated by signal", -retcode) + sys.exit(1) if not self.options.no_patch: self.phase_patch() @@ -1145,7 +1148,7 @@ class PrepareBuild(CommandLineApp): os.chdir(self.source_dir) def phase_config(self, *args): - self.log.debug('Executing phase: config') + self.log.info('Executing phase: config') self.phase_submodule() self.phase_autoconf() self.phase_configure(*args) @@ -1157,7 +1160,7 @@ class PrepareBuild(CommandLineApp): ######################################################################### def phase_make(self, *args): - self.log.debug('Executing phase: make') + self.log.info('Executing phase: make') config_args = [] make_args = [] @@ -1182,15 +1185,12 @@ class PrepareBuild(CommandLineApp): self.log.debug('Changing directory to ' + build_dir) os.chdir(build_dir) - self.log.debug('make args => ' + str(make_args)) - - configure = Popen(['make'] + make_args, shell=False) - configure.wait() + self.execute(*(['make'] + make_args)) finally: os.chdir(self.source_dir) def phase_update(self, *args): - self.log.debug('Executing phase: update') + self.log.info('Executing phase: update') self.phase_pull() self.phase_make(*args) @@ -1199,15 +1199,15 @@ class PrepareBuild(CommandLineApp): ######################################################################### def phase_clean(self, *args): - self.log.debug('Executing phase: clean') + self.log.info('Executing phase: clean') self.phase_make('clean') def phase_distclean(self, *args): - self.log.debug('Executing phase: distclean') + self.log.info('Executing phase: distclean') self.phase_make('distclean') def phase_gitclean(self, *args): - self.log.debug('Executing phase: gitclean') + self.log.info('Executing phase: gitclean') self.execute('git', 'clean', '-dfx') ######################################################################### @@ -1238,7 +1238,7 @@ class PrepareBuild(CommandLineApp): '@loader_path/' + base, dest_file) def phase_bindmg(self, *args): - self.log.debug('Executing phase: bindmg') + self.log.info('Executing phase: bindmg') self.phase_make() @@ -1263,7 +1263,7 @@ class PrepareBuild(CommandLineApp): shutil.rmtree(tempdir) def phase_upload(self, *args): - self.log.debug('Executing phase: upload') + self.log.info('Executing phase: upload') self.phase_bindmg() @@ -1295,7 +1295,7 @@ class PrepareBuild(CommandLineApp): shutil.rmtree(self.build_directory()) def phase_distcheck(self, *args): - self.log.debug('Executing phase: distcheck') + self.log.info('Executing phase: distcheck') self.configure_flavor('default', False) @@ -1320,7 +1320,7 @@ class PrepareBuild(CommandLineApp): self.phase_make(*make_args) def phase_rsync(self, *args): - self.log.debug('Executing phase: rsync') + self.log.info('Executing phase: rsync') source_copy_dir = join(self.ensure(self.products_directory()), 'ledger-proof') @@ -1332,34 +1332,28 @@ class PrepareBuild(CommandLineApp): self.source_dir = source_copy_dir def phase_proof(self, *args): - self.log.debug('Executing phase: proof') + self.log.info('Executing phase: proof') self.phase_makeall(*args) self.log.info('=== Copying source tree ===') self.phase_rsync() + self.phase_makeall(*args) + self.configure_flavor('opt') - self.log.info('=== Building opt ===') - self.phase_make(*args) self.log.info('=== Testing opt ===') self.phase_make('fullcheck') self.configure_flavor('gcov') - self.log.info('=== Building gcov ===') - self.phase_make(*args) self.log.info('=== Testing gcov ===') self.phase_make('check') self.configure_flavor('debug') - self.log.info('=== Building debug ===') - self.phase_make(*args) self.log.info('=== Testing debug ===') self.phase_make('fullcheck') self.configure_flavor('default') - self.log.info('=== Building default ===') - self.phase_make(*args) self.log.info('=== Testing default ===') self.phase_make('fullcheck') @@ -1367,7 +1361,7 @@ class PrepareBuild(CommandLineApp): self.phase_distcheck() def phase_makeall(self, *args): - self.log.debug('Executing phase: makeall') + self.log.info('Executing phase: makeall') self.configure_flavor('opt', False) -- cgit v1.2.3 From 4fec10777b90dccf10f458d74c98164efcb95647 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Fri, 30 Oct 2009 17:49:32 -0400 Subject: On my system, use _GLIBCXX_FULLY_DYNAMIC_STRING --- acprep | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'acprep') diff --git a/acprep b/acprep index a7beeae8..27c15c0f 100755 --- a/acprep +++ b/acprep @@ -712,12 +712,14 @@ class PrepareBuild(CommandLineApp): def setup_for_johnw(self): # jww (2009-03-09): Some peculiarities specific to my system - if exists('/usr/local/stow/cppunit/include'): - self.sys_include_dirs.insert(0, '/usr/local/stow/cppunit/include') - self.sys_library_dirs.insert(0, '/usr/local/stow/cppunit/lib') + if exists('/Users/johnw/Dropbox/Accounts/ledger.dat'): + if exists('/usr/local/stow/cppunit/include'): + self.sys_include_dirs.insert(0, '/usr/local/stow/cppunit/include') + self.sys_library_dirs.insert(0, '/usr/local/stow/cppunit/lib') self.CXXFLAGS.append('-march=nocona') self.CXXFLAGS.append('-msse3') + self.CPPFLAGS.append('-D_GLIBCXX_FULLY_DYNAMIC_STRING=1') self.options.use_glibcxx_debug = True -- cgit v1.2.3 From 00886a32e7edc85b30919519cd2ff3a54bbbd0fc Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Fri, 30 Oct 2009 17:50:41 -0400 Subject: Look for Boost in /opt/local before /usr/local --- acprep | 75 +++++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 38 insertions(+), 37 deletions(-) (limited to 'acprep') diff --git a/acprep b/acprep index 27c15c0f..12236302 100755 --- a/acprep +++ b/acprep @@ -929,15 +929,7 @@ class PrepareBuild(CommandLineApp): ######################################################################### def setup_flavor_default(self): - if exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): - self.envvars['BOOST_HOME'] = '/usr/local' - self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' - self.log.info('Setting BOOST_SUFFIX => %s' % - self.envvars['BOOST_SUFFIX']) - - self.sys_include_dirs.append('/usr/local/include/boost-1_40') - - elif exists('/opt/local/lib/libboost_regex.a'): + if exists('/opt/local/lib/libboost_regex.a'): self.envvars['BOOST_HOME'] = '/opt/local' self.envvars['BOOST_SUFFIX'] = '' @@ -946,6 +938,14 @@ class PrepareBuild(CommandLineApp): self.sys_include_dirs.append('/opt/local/include/boost') + elif exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): + self.envvars['BOOST_HOME'] = '/usr/local' + self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' + self.log.info('Setting BOOST_SUFFIX => %s' % + self.envvars['BOOST_SUFFIX']) + + self.sys_include_dirs.append('/usr/local/include/boost-1_40') + def setup_flavor_debug(self): self.configure_args.append('--enable-debug') @@ -962,35 +962,28 @@ class PrepareBuild(CommandLineApp): self.sys_include_dirs.remove('/usr/local/stow/cppunit/include') self.sys_library_dirs.remove('/usr/local/stow/cppunit/lib') - self.sys_include_dirs.insert(0, '/usr/local/stow/cppunit-debug/include') - self.sys_library_dirs.insert(0, '/usr/local/stow/cppunit-debug/lib') - - if exists('/usr/local/lib/libboost_regex-xgcc44-sd-1_40.a'): - self.envvars['BOOST_HOME'] = '/usr/local' - self.envvars['BOOST_SUFFIX'] = '-xgcc44-sd-1_40' - self.log.info('Setting BOOST_SUFFIX => %s' % - self.envvars['BOOST_SUFFIX']) - - self.sys_include_dirs.append('/usr/local/include/boost-1_40') + if exists('/usr/local/stow/cppunit-debug/include'): + self.sys_include_dirs.insert(0, '/usr/local/stow/cppunit-debug/include') + self.sys_library_dirs.insert(0, '/usr/local/stow/cppunit-debug/lib') - elif exists('/opt/local/lib/libboost_regex-d.a'): + if exists('/opt/local/lib/libboost_regex-d.a'): self.envvars['BOOST_HOME'] = '/opt/local' self.envvars['BOOST_SUFFIX'] = '-d' self.log.info('Setting BOOST_SUFFIX => %s' % - self.envvars['BOOST_SUFFIX']) + self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/opt/local/include/boost') - else: - if exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): + + elif exists('/usr/local/lib/libboost_regex-xgcc44-sd-1_40.a'): self.envvars['BOOST_HOME'] = '/usr/local' - self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' + self.envvars['BOOST_SUFFIX'] = '-xgcc44-sd-1_40' self.log.info('Setting BOOST_SUFFIX => %s' % - self.envvars['BOOST_SUFFIX']) + self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/usr/local/include/boost-1_40') - - elif exists('/opt/local/lib/libboost_regex.a'): + else: + if exists('/opt/local/lib/libboost_regex.a'): self.envvars['BOOST_HOME'] = '/opt/local' self.envvars['BOOST_SUFFIX'] = '' @@ -999,27 +992,35 @@ class PrepareBuild(CommandLineApp): self.sys_include_dirs.append('/opt/local/include/boost') + elif exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): + self.envvars['BOOST_HOME'] = '/usr/local' + self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' + self.log.info('Setting BOOST_SUFFIX => %s' % + self.envvars['BOOST_SUFFIX']) + + self.sys_include_dirs.append('/usr/local/include/boost-1_40') + def setup_flavor_opt(self): self.CXXFLAGS.append('-O3') self.CXXFLAGS.append('-fomit-frame-pointer') - if exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): - self.envvars['BOOST_HOME'] = '/usr/local' - self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' - self.log.info('Setting BOOST_SUFFIX => %s' % - self.envvars['BOOST_SUFFIX']) - - self.sys_include_dirs.append('/usr/local/include/boost-1_40') - - elif exists('/opt/local/lib/libboost_regex.a'): + if exists('/opt/local/lib/libboost_regex.a'): self.envvars['BOOST_HOME'] = '/opt/local' self.envvars['BOOST_SUFFIX'] = '' self.log.info('Setting BOOST_SUFFIX => %s' % - self.envvars['BOOST_SUFFIX']) + self.envvars['BOOST_SUFFIX']) self.sys_include_dirs.append('/opt/local/include/boost') + elif exists('/usr/local/lib/libboost_regex-xgcc44-s-1_40.a'): + self.envvars['BOOST_HOME'] = '/usr/local' + self.envvars['BOOST_SUFFIX'] = '-xgcc44-s-1_40' + self.log.info('Setting BOOST_SUFFIX => %s' % + self.envvars['BOOST_SUFFIX']) + + self.sys_include_dirs.append('/usr/local/include/boost-1_40') + def setup_flavor_gcov(self): self.CXXFLAGS.append('-g') self.CXXFLAGS.append('-fprofile-arcs') -- cgit v1.2.3 From a3799eebdb682162eb1edb3706a6ff1097b12f41 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Fri, 30 Oct 2009 18:36:22 -0400 Subject: Moved autoconf-related files into tools This makes it more certain that people cloning from Git will use acprep. --- acprep | 16 +- autogen.sh | 0 tools/Makefile.am | 518 ++++++++++++++++++ tools/autogen.sh | 1491 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/configure.ac | 391 ++++++++++++++ 5 files changed, 2415 insertions(+), 1 deletion(-) mode change 100755 => 100644 autogen.sh create mode 100644 tools/Makefile.am create mode 100755 tools/autogen.sh create mode 100644 tools/configure.ac (limited to 'acprep') diff --git a/acprep b/acprep index 12236302..371c5e48 100755 --- a/acprep +++ b/acprep @@ -468,7 +468,12 @@ class PrepareBuild(CommandLineApp): def phase_autogen(self, *args): self.log.info('Executing phase: autogen') - self.execute('sh', 'autogen.sh') + + if not exists('autogen.sh') or \ + self.isnewer('tools/autogen.sh', 'autogen.sh'): + shutil.copyfile('tools/autogen.sh', 'autogen.sh') + + self.execute('sh', 'tools/autogen.sh') def phase_aclocal(self, *args): self.log.info('Executing phase: aclocal') @@ -476,6 +481,15 @@ class PrepareBuild(CommandLineApp): def phase_autoconf(self, *args): self.log.info('Executing phase: autoconf') + + if not exists('configure.ac') or \ + self.isnewer('tools/configure.ac', 'configure.ac'): + shutil.copyfile('tools/configure.ac', 'configure.ac') + + if not exists('Makefile.am') or \ + self.isnewer('tools/Makefile.am', 'Makefile.am'): + shutil.copyfile('tools/Makefile.am', 'Makefile.am') + reason = self.need_to_prepare_autotools() if reason: self.log.info('autogen.sh must be run ' + reason) diff --git a/autogen.sh b/autogen.sh old mode 100755 new mode 100644 diff --git a/tools/Makefile.am b/tools/Makefile.am new file mode 100644 index 00000000..d4494fa7 --- /dev/null +++ b/tools/Makefile.am @@ -0,0 +1,518 @@ +VERSION = 3.0 +ACLOCAL_AMFLAGS = -I m4 +dist_man_MANS = doc/ledger.1 +SUBDIRS = po intl +EXTRA_DIST = autogen.sh config.rpath contrib src/system.hh.in +DISTCLEANFILES = .timestamp + +lib_LTLIBRARIES = \ + libledger_report.la \ + libledger_data.la \ + libledger_expr.la \ + libledger_math.la \ + libledger_util.la + +lib_cppflags = -I$(srcdir)/src -I$(srcdir)/lib \ + -I$(srcdir)/lib/utfcpp/source + +libledger_util_la_SOURCES = \ + src/stream.cc \ + src/mask.cc \ + src/times.cc \ + src/error.cc \ + src/utils.cc \ + src/accum.cc \ + lib/sha1.cpp + +libledger_util_la_CPPFLAGS = $(lib_cppflags) +libledger_util_la_LDFLAGS = -release $(VERSION).0 + +libledger_math_la_SOURCES = \ + src/value.cc \ + src/balance.cc \ + src/quotes.cc \ + src/pool.cc \ + src/annotate.cc \ + src/commodity.cc \ + src/amount.cc + +libledger_math_la_CPPFLAGS = $(lib_cppflags) +libledger_math_la_LDFLAGS = -release $(VERSION).0 + +libledger_expr_la_SOURCES = \ + src/option.cc \ + src/format.cc \ + src/predicate.cc \ + src/scope.cc \ + src/interactive.cc \ + src/expr.cc \ + src/op.cc \ + src/parser.cc \ + src/token.cc + +libledger_expr_la_CPPFLAGS = $(lib_cppflags) +libledger_expr_la_LDFLAGS = -release $(VERSION).0 + +libledger_data_la_SOURCES = \ + src/compare.cc \ + src/iterators.cc \ + src/timelog.cc \ + src/textual.cc \ + src/journal.cc \ + src/account.cc \ + src/xact.cc \ + src/post.cc \ + src/item.cc + +libledger_data_la_CPPFLAGS = $(lib_cppflags) +libledger_data_la_LDFLAGS = -release $(VERSION).0 + +libledger_report_la_SOURCES = \ + src/stats.cc \ + src/generate.cc \ + src/derive.cc \ + src/emacs.cc \ + src/output.cc \ + src/precmd.cc \ + src/chain.cc \ + src/filters.cc \ + src/temps.cc \ + src/report.cc \ + src/session.cc + +libledger_report_la_CPPFLAGS = $(lib_cppflags) +libledger_report_la_LDFLAGS = -release $(VERSION).0 + +pkginclude_HEADERS = \ + src/utils.h \ + src/flags.h \ + src/hooks.h \ + src/error.h \ + src/times.h \ + src/mask.h \ + src/stream.h \ + src/pstream.h \ + src/unistring.h \ + src/accum.h \ + \ + src/amount.h \ + src/commodity.h \ + src/annotate.h \ + src/pool.h \ + src/quotes.h \ + src/balance.h \ + src/value.h \ + \ + src/token.h \ + src/parser.h \ + src/op.h \ + src/expr.h \ + src/scope.h \ + src/interactive.h \ + src/predicate.h \ + src/format.h \ + src/option.h \ + \ + src/item.h \ + src/post.h \ + src/xact.h \ + src/account.h \ + src/journal.h \ + src/timelog.h \ + src/iterators.h \ + src/compare.h \ + \ + src/session.h \ + src/report.h \ + src/filters.h \ + src/temps.h \ + src/chain.h \ + src/precmd.h \ + src/derive.h \ + src/generate.h \ + src/stats.h \ + src/output.h \ + src/emacs.h \ + \ + src/global.h \ + \ + src/pyinterp.h \ + \ + lib/sha1.h \ + lib/gettext.h \ + \ + lib/utfcpp/source/utf8.h \ + lib/utfcpp/source/utf8/checked.h \ + lib/utfcpp/source/utf8/core.h \ + lib/utfcpp/source/utf8/unchecked.h + +nodist_libledger_util_la_SOURCES = system.hh + +BUILT_SOURCES = system.hh +CLEANFILES = system.hh + +system.hh: src/system.hh.in + cp -p $< $@ + +if USE_PCH +nodist_libledger_util_la_SOURCES += system.hh.gch + +BUILT_SOURCES += system.hh.gch +CLEANFILES += system.hh.gch + +system.hh.gch: system.hh + $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(lib_cppflags) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) \ + -o $@ $< +endif + +###################################################################### + +bin_PROGRAMS = ledger + +ledger_CPPFLAGS = $(lib_cppflags) +if HAVE_BOOST_PYTHON +ledger_CPPFLAGS += -I$(srcdir)/python +endif +ledger_SOURCES = src/main.cc src/global.cc +ledger_LDADD = $(LIBOBJS) $(lib_LTLIBRARIES) $(INTLLIBS) +ledger_LDFLAGS = -static + +info_TEXINFOS = doc/ledger.texi + +dist_lisp_LISP = lisp/ledger.el lisp/timeclock.el +ELCFILES = +DISTCLEANFILES += ledger.elc timeclock.elc + +all_sources = $(libledger_util_la_SOURCES) \ + $(libledger_math_la_SOURCES) \ + $(libledger_expr_la_SOURCES) \ + $(libledger_data_la_SOURCES) \ + $(libledger_report_la_SOURCES) \ + $(libledger_python_la_SOURCES) \ + src/pyledger.cc + +all_files = $(all_sources) $(pkginclude_HEADERS) + +###################################################################### + +if HAVE_BOOST_PYTHON + +lib_LTLIBRARIES += libledger_python.la + +libledger_python_la_SOURCES = \ + src/pyutils.h \ + src/pyfstream.h \ + src/py_amount.cc \ + src/py_balance.cc \ + src/py_chain.cc \ + src/py_commodity.cc \ + src/py_expr.cc \ + src/py_flags.cc \ + src/py_format.cc \ + src/py_global.cc \ + src/py_item.cc \ + src/py_journal.cc \ + src/py_post.cc \ + src/py_report.cc \ + src/py_scope.cc \ + src/py_session.cc \ + src/py_timelog.cc \ + src/py_times.cc \ + src/py_utils.cc \ + src/py_value.cc \ + src/py_xact.cc \ + src/pyinterp.cc + +libledger_python_la_CPPFLAGS = $(lib_cppflags) -I$(srcdir)/python + +pyexec_LTLIBRARIES = ledger.la + +ledger_la_CPPFLAGS = $(libledger_python_la_CPPFLAGS) +ledger_la_SOURCES = src/pyledger.cc +ledger_la_DEPENDENCIES = $(lib_LTLIBRARIES) +ledger_la_LDFLAGS = -avoid-version -module +ledger_la_LIBADD = $(LIBOBJS) $(lib_LTLIBRARIES) $(INTLLIBS) + +pkgpython_PYTHON = python/__init__.py \ + python/hello.py \ + python/server.py + +endif + +###################################################################### + +TESTS = + +if HAVE_PYTHON +TESTS += RegressTests BaselineTests ConfirmTests GenerateTests +endif + +if HAVE_CPPUNIT +TESTS += \ + UtilTests \ + MathTests \ + ExprTests \ + DataTests \ + ReportTests +endif + +if HAVE_BOOST_PYTHON +TESTS += PyUnitTests +endif + +check_PROGRAMS = $(TESTS) + +UtilTests_SOURCES = \ + test/UnitTests.cc \ + test/UnitTests.h \ + test/UtilTests.cc \ + test/unit/t_utils.cc \ + test/unit/t_utils.h \ + test/unit/t_times.cc \ + test/unit/t_times.h + +UtilTests_CPPFLAGS = -I$(srcdir)/test $(lib_cppflags) +UtilTests_LDADD = libledger_util.la -lcppunit + +MathTests_SOURCES = \ + test/UnitTests.cc \ + test/UnitTests.h \ + test/MathTests.cc \ + test/unit/t_commodity.cc \ + test/unit/t_commodity.h \ + test/unit/t_amount.cc \ + test/unit/t_amount.h \ + test/unit/t_balance.cc \ + test/unit/t_balance.h + +MathTests_CPPFLAGS = -I$(srcdir)/test $(lib_cppflags) +MathTests_LDADD = libledger_math.la $(UtilTests_LDADD) + +ExprTests_SOURCES = \ + test/UnitTests.cc \ + test/UnitTests.h \ + test/ExprTests.cc \ + test/unit/t_expr.cc \ + test/unit/t_expr.h + +ExprTests_CPPFLAGS = -I$(srcdir)/test $(lib_cppflags) +ExprTests_LDADD = libledger_expr.la $(MathTests_LDADD) + +DataTests_SOURCES = \ + test/UnitTests.cc \ + test/UnitTests.h \ + test/DataTests.cc + +DataTests_CPPFLAGS = -I$(srcdir)/test $(lib_cppflags) +DataTests_LDADD = libledger_data.la $(ExprTests_LDADD) + +ReportTests_SOURCES = \ + test/UnitTests.cc \ + test/UnitTests.h \ + test/ReportTests.cc + +ReportTests_CPPFLAGS = -I$(srcdir)/test $(lib_cppflags) +ReportTests_LDADD = libledger_report.la $(DataTests_LDADD) + +all_tests_sources = \ + $(UtilTests_SOURCES) \ + $(MathTests_SOURCES) \ + $(ExprTests_SOURCES) \ + $(DataTests_SOURCES) \ + $(ReportTests_SOURCES) + +PyUnitTests_SOURCES = test/PyUnitTests.py + +all_py_tests_sources = \ + $(patsubst test/unit/%.cc,$(top_builddir)/test/python/%.py, \ + $(filter test/unit/t_%.cc,$(all_tests_sources))) + +test/python/%.py: test/unit/%.cc test/convert.py + $(PYTHON) $(srcdir)/test/convert.py $< $@ + +test/python/UnitTests.py: $(all_py_tests_sources) + @echo "from unittest import TextTestRunner, TestSuite" > $@ + @for file in $$(ls $(srcdir)/test/unit/*.cc); do \ + base=$$(basename $$file); \ + base=$$(echo $$base | sed 's/\.cc//'); \ + echo "import $$base" >> $@; \ + done + @echo "suites = [" >> $@ + @for file in $$(ls $(srcdir)/test/unit/*.cc); do \ + base=$$(basename $$file); \ + base=$$(echo $$base | sed 's/\.cc//'); \ + echo " $$base.suite()," >> $@; \ + done + @echo "]" >> $@ + @echo "TextTestRunner().run(TestSuite(suites))" >> $@ + +ledger_python = $(top_builddir)/ledger$(EXEEXT) python + +ESC_python=`echo "$(ledger_python)" | sed 's/\//\\\\\//g'` +ESC_srcdir=`echo "$(srcdir)" | sed 's/\//\\\\\//g'` +ESC_builddir=`echo "$(top_builddir)" | sed 's/\//\\\\\//g'` +ESC_distdir=`echo "$(distdir)" | sed 's/\//\\\\\//g'` + +# jww (2007-05-10): This rule will not be triggered on systems that +# define an EXEEXT. +PyUnitTests: test/PyUnitTests.py test/python/UnitTests.py + @cat $(srcdir)/test/PyUnitTests.py \ + | sed "s/%python%/$(ESC_python)/" \ + | sed "s/%srcdir%/$(ESC_srcdir)/g" \ + | sed "s/%builddir%/$(ESC_builddir)/g" > $@ + chmod 755 $@ + +RegressTests_SOURCES = test/RegressTests.py + +EXTRA_DIST += test/regress test/convert.py test/LedgerHarness.py + +RegressTests: $(srcdir)/test/RegressTests.py + echo "$(PYTHON) $(srcdir)/test/RegressTests.py $(top_builddir)/ledger$(EXEEXT) $(srcdir)/test/regress \"\$$@\"" > $@ + chmod 755 $@ + +BaselineTests_SOURCES = test/RegressTests.py + +EXTRA_DIST += test/baseline + +BaselineTests: $(srcdir)/test/RegressTests.py + echo "$(PYTHON) $(srcdir)/test/RegressTests.py $(top_builddir)/ledger$(EXEEXT) $(srcdir)/test/baseline \"\$$@\"" > $@ + chmod 755 $@ + +ConfirmTests_SOURCES = test/ConfirmTests.py + +EXTRA_DIST += test/input + +test/input/mondo.dat: test/input/standard.dat + @for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do \ + for j in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do \ + cat $< >> $@; \ + done; \ + done + +ConfirmTests: $(srcdir)/test/ConfirmTests.py + echo "$(PYTHON) $(srcdir)/test/ConfirmTests.py $(top_builddir)/ledger$(EXEEXT) $(srcdir)/test/input \"\$$@\"" > $@ + chmod 755 $@ + +GenerateTests_SOURCES = test/GenerateTests.py + +GenerateTests: $(srcdir)/test/GenerateTests.py + echo "$(PYTHON) $(srcdir)/test/GenerateTests.py $(top_builddir)/ledger$(EXEEXT) 1 20 \"\$$@\"" > $@ + chmod 755 $@ + +FULLCHECK=$(srcdir)/test/fullcheck.sh + +if HAVE_CPPUNIT +cppunittests: check + @sh $(FULLCHECK) $(top_builddir)/UtilTests$(EXEEXT) --verify \ + 2>&1 | grep -v '^GuardMalloc:' + @sh $(FULLCHECK) $(top_builddir)/MathTests$(EXEEXT) --verify \ + 2>&1 | grep -v '^GuardMalloc:' + @sh $(FULLCHECK) $(top_builddir)/ExprTests$(EXEEXT) --verify \ + 2>&1 | grep -v '^GuardMalloc:' + @sh $(FULLCHECK) $(top_builddir)/DataTests$(EXEEXT) --verify \ + 2>&1 | grep -v '^GuardMalloc:' + @sh $(FULLCHECK) $(top_builddir)/ReportTests$(EXEEXT) --verify \ + 2>&1 | grep -v '^GuardMalloc:' +else +cppunittests: check + @test 1 -eq 1 +endif + +fullcheck: cppunittests + @$(top_builddir)/RegressTests --verify + @$(top_builddir)/BaselineTests --verify + @$(top_builddir)/ConfirmTests --verify + @$(top_builddir)/GenerateTests --verify + @$(top_builddir)/RegressTests --gmalloc + @$(top_builddir)/BaselineTests --gmalloc +# @$(top_builddir)/ConfirmTests --gmalloc +# @$(top_builddir)/GenerateTests --gmalloc + +###################################################################### + +EXTRA_DIST += doc/README doc/LICENSE doc/NEWS doc/ledger.pdf +if USE_DOXYGEN +EXTRA_DIST += doc/Doxyfile doc/refman.pdf +endif + +DISTCLEANFILES += doc/ledger.info doc/ledger.pdf +if USE_DOXYGEN +DISTCLEANFILES += Doxyfile.gen doc/Doxyfile.bak doc/refman.pdf +endif + +if USE_DOXYGEN +dist-hook-doxygen: + find $(distdir)/doc -name .dirstamp -delete + rm -fr $(distdir)/doc/latex \ + $(distdir)/doc/Doxyfile.bak \ + $(distdir)/doc/Doxyfile.gen + cp -pR doc/html $(distdir)/doc +else +dist-hook-doxygen: + @test 1 -eq 1 +endif + +dist-hook: dist-hook-doxygen + find $(distdir) -name .DS_Store -delete + find $(distdir) -name .localized -delete + rm -f $(distdir)/README.textile + cp -p $(srcdir)/doc/README $(distdir)/README + +if USE_DOXYGEN +distclean-local-doxygen: + rm -fr doc/html doc/latex + rm -f doc/refman.pdf +else +distclean-local-doxygen: + @test 1 -eq 1 +endif + +distclean-local: distclean-local-doxygen + rm -fr test/python + +if USE_DOXYGEN +ESC_top_builddir=`cd $(top_builddir); pwd | sed 's/\//\\\\\//g'` + +Doxyfile.gen: doc/Doxyfile + cat $< | sed "s/%srcdir%/$(ESC_srcdir)/g" \ + | sed "s/%builddir%/$(ESC_top_builddir)/g" > $@ + +doc/html/index.html: Doxyfile.gen $(all_files) + BUILD_DIR=`cd $(top_builddir); pwd`; \ + (cd $(srcdir); doxygen $$BUILD_DIR/Doxyfile.gen) + +# The intention with the following rules is that all of the Doxygen +# documentation (both HTML and PDF) is built locally before distcheck is +# run, since it's quite possible that the user will not have a complete +# TeX + Doxygen + dot environment on their own system. + +doc/refman.pdf: doc/html/index.html + (cd doc/latex && make) + cp doc/latex/refman.pdf $@ + +docs: pdf doc/refman.pdf +else +docs: pdf +endif + +libs: + @echo Building dependency libs and installing in /usr/local/stow ... + git submodule update --init + (cd lib; make) + +report: all + -rm -fr build + lcov -d $(shell pwd) --zerocounters + -mkdir doc/report + lcov -c -i -d $(shell pwd) -o doc/report/ledger_base.info + make fullcheck + lcov -c -d $(shell pwd) --checksum -o doc/report/ledger_test.info + lcov -a doc/report/ledger_base.info \ + -a doc/report/ledger_test.info -o doc/report/ledger_total.info + lcov --extract doc/report/ledger_total.info '*src/ledger/*' \ + -o doc/report/ledger_cov.info + genhtml -o doc/report doc/report/ledger_cov.info + @echo Coverage reported generated\; now open doc/report/index.html + +# Makefile.am ends here diff --git a/tools/autogen.sh b/tools/autogen.sh new file mode 100755 index 00000000..a8b63eff --- /dev/null +++ b/tools/autogen.sh @@ -0,0 +1,1491 @@ +#!/bin/sh +# a u t o g e n . s h +# +# Copyright (c) 2005-2007 United States Government as represented by +# the U.S. Army Research Laboratory. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +### +# +# Script for automatically preparing the sources for compilation by +# performing the myrid of necessary steps. The script attempts to +# detect proper version support, and outputs warnings about particular +# systems that have autotool peculiarities. +# +# Basically, if everything is set up and installed correctly, the +# script will validate that minimum versions of the GNU Build System +# tools are installed, account for several common configuration +# issues, and then simply run autoreconf for you. +# +# If autoreconf fails, which can happen for many valid configurations, +# this script proceeds to run manual preparation steps effectively +# providing a POSIX shell script (mostly complete) reimplementation of +# autoreconf. +# +# The AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER +# environment variables and corresponding _OPTIONS variables (e.g. +# AUTORECONF_OPTIONS) may be used to override the default automatic +# detection behaviors. Similarly the _VERSION variables will override +# the minimum required version numbers. +# +# Examples: +# +# To obtain help on usage: +# ./autogen.sh --help +# +# To obtain verbose output: +# ./autogen.sh --verbose +# +# To skip autoreconf and prepare manually: +# AUTORECONF=false ./autogen.sh +# +# To verbosely try running with an older (unsupported) autoconf: +# AUTOCONF_VERSION=2.50 ./autogen.sh --verbose +# +# Author: Christopher Sean Morrison +# +###################################################################### + +# set to minimum acceptible version of autoconf +if [ "x$AUTOCONF_VERSION" = "x" ] ; then + AUTOCONF_VERSION=2.52 +fi +# set to minimum acceptible version of automake +if [ "x$AUTOMAKE_VERSION" = "x" ] ; then + AUTOMAKE_VERSION=1.6.0 +fi +# set to minimum acceptible version of libtool +if [ "x$LIBTOOL_VERSION" = "x" ] ; then + LIBTOOL_VERSION=1.4.2 +fi + + +################## +# ident function # +################## +ident ( ) { + # extract copyright from header + __copyright="`grep Copyright $AUTOGEN_SH | head -${HEAD_N}1 | awk '{print $4}'`" + if [ "x$__copyright" = "x" ] ; then + __copyright="`date +%Y`" + fi + + # extract version from CVS Id string + __id="$Id: autogen.sh,v 14.97 2007/06/18 22:25:02 brlcad Exp $" + __version="`echo $__id | sed 's/.*\([0-9][0-9][0-9][0-9]\)[-\/]\([0-9][0-9]\)[-\/]\([0-9][0-9]\).*/\1\2\3/'`" + if [ "x$__version" = "x" ] ; then + __version="" + fi + + echo "autogen.sh build preparation script by Christopher Sean Morrison" + echo "revised 3-clause BSD-style license, copyright (c) $__copyright" + echo "script version $__version, ISO/IEC 9945 POSIX shell script" +} + + +################## +# USAGE FUNCTION # +################## +usage ( ) { + echo "Usage: $AUTOGEN_SH [-h|--help] [-v|--verbose] [-q|--quiet] [--version]" + echo " --help Help on $NAME_OF_AUTOGEN usage" + echo " --verbose Verbose progress output" + echo " --quiet Quiet suppressed progress output" + echo " --version Only perform GNU Build System version checks" + echo + echo "Description: This script will validate that minimum versions of the" + echo "GNU Build System tools are installed and then run autoreconf for you." + echo "Should autoreconf fail, manual preparation steps will be run" + echo "potentially accounting for several common preparation issues. The" + + echo "AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER," + echo "PROJECT, & CONFIGURE environment variables and corresponding _OPTIONS" + echo "variables (e.g. AUTORECONF_OPTIONS) may be used to override the" + echo "default automatic detection behavior." + echo + + ident + + return 0 +} + + +########################## +# VERSION_ERROR FUNCTION # +########################## +version_error ( ) { + if [ "x$1" = "x" ] ; then + echo "INTERNAL ERROR: version_error was not provided a version" + exit 1 + fi + if [ "x$2" = "x" ] ; then + echo "INTERNAL ERROR: version_error was not provided an application name" + exit 1 + fi + $ECHO + $ECHO "ERROR: To prepare the ${PROJECT} build system from scratch," + $ECHO " at least version $1 of $2 must be installed." + $ECHO + $ECHO "$NAME_OF_AUTOGEN does not need to be run on the same machine that will" + $ECHO "run configure or make. Either the GNU Autotools will need to be installed" + $ECHO "or upgraded on this system, or $NAME_OF_AUTOGEN must be run on the source" + $ECHO "code on another system and then transferred to here. -- Cheers!" + $ECHO +} + +########################## +# VERSION_CHECK FUNCTION # +########################## +version_check ( ) { + if [ "x$1" = "x" ] ; then + echo "INTERNAL ERROR: version_check was not provided a minimum version" + exit 1 + fi + _min="$1" + if [ "x$2" = "x" ] ; then + echo "INTERNAL ERROR: version check was not provided a comparison version" + exit 1 + fi + _cur="$2" + + # needed to handle versions like 1.10 and 1.4-p6 + _min="`echo ${_min}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`" + _cur="`echo ${_cur}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`" + + _min_major="`echo $_min | cut -d. -f1`" + _min_minor="`echo $_min | cut -d. -f2`" + _min_patch="`echo $_min | cut -d. -f3`" + + _cur_major="`echo $_cur | cut -d. -f1`" + _cur_minor="`echo $_cur | cut -d. -f2`" + _cur_patch="`echo $_cur | cut -d. -f3`" + + if [ "x$_min_major" = "x" ] ; then + _min_major=0 + fi + if [ "x$_min_minor" = "x" ] ; then + _min_minor=0 + fi + if [ "x$_min_patch" = "x" ] ; then + _min_patch=0 + fi + if [ "x$_cur_minor" = "x" ] ; then + _cur_major=0 + fi + if [ "x$_cur_minor" = "x" ] ; then + _cur_minor=0 + fi + if [ "x$_cur_patch" = "x" ] ; then + _cur_patch=0 + fi + + $VERBOSE_ECHO "Checking if ${_cur_major}.${_cur_minor}.${_cur_patch} is greater than ${_min_major}.${_min_minor}.${_min_patch}" + + if [ $_min_major -lt $_cur_major ] ; then + return 0 + elif [ $_min_major -eq $_cur_major ] ; then + if [ $_min_minor -lt $_cur_minor ] ; then + return 0 + elif [ $_min_minor -eq $_cur_minor ] ; then + if [ $_min_patch -lt $_cur_patch ] ; then + return 0 + elif [ $_min_patch -eq $_cur_patch ] ; then + return 0 + fi + fi + fi + return 1 +} + + +###################################### +# LOCATE_CONFIGURE_TEMPLATE FUNCTION # +###################################### +locate_configure_template ( ) { + _pwd="`pwd`" + if test -f "./configure.ac" ; then + echo "./configure.ac" + elif test -f "./configure.in" ; then + echo "./configure.in" + elif test -f "$_pwd/configure.ac" ; then + echo "$_pwd/configure.ac" + elif test -f "$_pwd/configure.in" ; then + echo "$_pwd/configure.in" + elif test -f "$PATH_TO_AUTOGEN/configure.ac" ; then + echo "$PATH_TO_AUTOGEN/configure.ac" + elif test -f "$PATH_TO_AUTOGEN/configure.in" ; then + echo "$PATH_TO_AUTOGEN/configure.in" + fi +} + + +################## +# argument check # +################## +ARGS="$*" +PATH_TO_AUTOGEN="`dirname $0`" +NAME_OF_AUTOGEN="`basename $0`" +AUTOGEN_SH="$PATH_TO_AUTOGEN/$NAME_OF_AUTOGEN" + +LIBTOOL_M4="${PATH_TO_AUTOGEN}/misc/libtool.m4" + +if [ "x$HELP" = "x" ] ; then + HELP=no +fi +if [ "x$QUIET" = "x" ] ; then + QUIET=no +fi +if [ "x$VERBOSE" = "x" ] ; then + VERBOSE=no +fi +if [ "x$VERSION_ONLY" = "x" ] ; then + VERSION_ONLY=no +fi +if [ "x$AUTORECONF_OPTIONS" = "x" ] ; then + AUTORECONF_OPTIONS="-i -f" +fi +if [ "x$AUTOCONF_OPTIONS" = "x" ] ; then + AUTOCONF_OPTIONS="-f" +fi +if [ "x$AUTOMAKE_OPTIONS" = "x" ] ; then + AUTOMAKE_OPTIONS="-a -c -f" +fi +ALT_AUTOMAKE_OPTIONS="-a -c" +if [ "x$LIBTOOLIZE_OPTIONS" = "x" ] ; then + LIBTOOLIZE_OPTIONS="--automake -c -f" +fi +ALT_LIBTOOLIZE_OPTIONS="--automake --copy --force" +if [ "x$ACLOCAL_OPTIONS" = "x" ] ; then + ACLOCAL_OPTIONS="" +fi +if [ "x$AUTOHEADER_OPTIONS" = "x" ] ; then + AUTOHEADER_OPTIONS="" +fi +for arg in $ARGS ; do + case "x$arg" in + x--help) HELP=yes ;; + x-[hH]) HELP=yes ;; + x--quiet) QUIET=yes ;; + x-[qQ]) QUIET=yes ;; + x--verbose) VERBOSE=yes ;; + x-[vV]) VERBOSE=yes ;; + x--version) VERSION_ONLY=yes ;; + *) + echo "Unknown option: $arg" + echo + usage + exit 1 + ;; + esac +done + + +##################### +# environment check # +##################### + +# sanity check before recursions potentially begin +if [ ! -f "$AUTOGEN_SH" ] ; then + echo "INTERNAL ERROR: $AUTOGEN_SH does not exist" + if [ ! "x$0" = "x$AUTOGEN_SH" ] ; then + echo "INTERNAL ERROR: dirname/basename inconsistency: $0 != $AUTOGEN_SH" + fi + exit 1 +fi + +# force locale setting to C so things like date output as expected +LC_ALL=C + +# commands that this script expects +for __cmd in echo head tail pwd ; do + echo "test" | $__cmd > /dev/null 2>&1 + if [ $? != 0 ] ; then + echo "INTERNAL ERROR: '${__cmd}' command is required" + exit 2 + fi +done +echo "test" | grep "test" > /dev/null 2>&1 +if test ! x$? = x0 ; then + echo "INTERNAL ERROR: grep command is required" + exit 1 +fi +echo "test" | sed "s/test/test/" > /dev/null 2>&1 +if test ! x$? = x0 ; then + echo "INTERNAL ERROR: sed command is required" + exit 1 +fi + + +# determine the behavior of echo +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +# determine the behavior of head +case "x`echo 'head' | head -n 1 2>&1`" in + *xhead*) HEAD_N="n " ;; + *) HEAD_N="" ;; +esac + +# determine the behavior of tail +case "x`echo 'tail' | tail -n 1 2>&1`" in + *xtail*) TAIL_N="n " ;; + *) TAIL_N="" ;; +esac + +VERBOSE_ECHO=: +ECHO=: +if [ "x$QUIET" = "xyes" ] ; then + if [ "x$VERBOSE" = "xyes" ] ; then + echo "Verbose output quelled by quiet option. Further output disabled." + fi +else + ECHO=echo + if [ "x$VERBOSE" = "xyes" ] ; then + echo "Verbose output enabled" + VERBOSE_ECHO=echo + fi +fi + + +# allow a recursive run to disable further recursions +if [ "x$RUN_RECURSIVE" = "x" ] ; then + RUN_RECURSIVE=yes +fi + + +################################################ +# check for help arg and bypass version checks # +################################################ +if [ "x`echo $ARGS | sed 's/.*[hH][eE][lL][pP].*/help/'`" = "xhelp" ] ; then + HELP=yes +fi +if [ "x$HELP" = "xyes" ] ; then + usage + $ECHO "---" + $ECHO "Help was requested. No preparation or configuration will be performed." + exit 0 +fi + + +####################### +# set up signal traps # +####################### +untrap_abnormal ( ) { + for sig in 1 2 13 15; do + trap - $sig + done +} + +# do this cleanup whenever we exit. +trap ' + # start from the root + if test -d "$START_PATH" ; then + cd "$START_PATH" + fi + + # restore/delete backup files + if test "x$PFC_INIT" = "x1" ; then + recursive_restore + fi +' 0 + +# trap SIGHUP (1), SIGINT (2), SIGPIPE (13), SIGTERM (15) +for sig in 1 2 13 15; do + trap ' + $ECHO "" + $ECHO "Aborting $NAME_OF_AUTOGEN: caught signal '$sig'" + + # start from the root + if test -d "$START_PATH" ; then + cd "$START_PATH" + fi + + # clean up on abnormal exit + $VERBOSE_ECHO "rm -rf autom4te.cache" + rm -rf autom4te.cache + + if test -f "acinclude.m4.$$.backup" ; then + $VERBOSE_ECHO "cat acinclude.m4.$$.backup > acinclude.m4" + chmod u+w acinclude.m4 + cat acinclude.m4.$$.backup > acinclude.m4 + + $VERBOSE_ECHO "rm -f acinclude.m4.$$.backup" + rm -f acinclude.m4.$$.backup + fi + + { (exit 1); exit 1; } +' $sig +done + + +############################# +# look for a configure file # +############################# +if [ "x$CONFIGURE" = "x" ] ; then + CONFIGURE="`locate_configure_template`" + if [ ! "x$CONFIGURE" = "x" ] ; then + $VERBOSE_ECHO "Found a configure template: $CONFIGURE" + fi +else + $ECHO "Using CONFIGURE environment variable override: $CONFIGURE" +fi +if [ "x$CONFIGURE" = "x" ] ; then + if [ "x$VERSION_ONLY" = "xyes" ] ; then + CONFIGURE=/dev/null + else + $ECHO + $ECHO "A configure.ac or configure.in file could not be located implying" + $ECHO "that the GNU Build System is at least not used in this directory. In" + $ECHO "any case, there is nothing to do here without one of those files." + $ECHO + $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`" + exit 1 + fi +fi + +#################### +# get project name # +#################### +if [ "x$PROJECT" = "x" ] ; then + PROJECT="`grep AC_INIT $CONFIGURE | grep -v '.*#.*AC_INIT' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_INIT(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" + if [ "x$PROJECT" = "xAC_INIT" ] ; then + # projects might be using the older/deprecated arg-less AC_INIT .. look for AM_INIT_AUTOMAKE instead + PROJECT="`grep AM_INIT_AUTOMAKE $CONFIGURE | grep -v '.*#.*AM_INIT_AUTOMAKE' | tail -${TAIL_N}1 | sed 's/^[ ]*AM_INIT_AUTOMAKE(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" + fi + if [ "x$PROJECT" = "xAM_INIT_AUTOMAKE" ] ; then + PROJECT="project" + fi + if [ "x$PROJECT" = "x" ] ; then + PROJECT="project" + fi +else + $ECHO "Using PROJECT environment variable override: $PROJECT" +fi +$ECHO "Preparing the $PROJECT build system...please wait" +$ECHO + + +######################## +# check for autoreconf # +######################## +HAVE_AUTORECONF=no +if [ "x$AUTORECONF" = "x" ] ; then + for AUTORECONF in autoreconf ; do + $VERBOSE_ECHO "Checking autoreconf version: $AUTORECONF --version" + $AUTORECONF --version > /dev/null 2>&1 + if [ $? = 0 ] ; then + HAVE_AUTORECONF=yes + break + fi + done +else + HAVE_AUTORECONF=yes + $ECHO "Using AUTORECONF environment variable override: $AUTORECONF" +fi + + +########################## +# autoconf version check # +########################## +_acfound=no +if [ "x$AUTOCONF" = "x" ] ; then + for AUTOCONF in autoconf ; do + $VERBOSE_ECHO "Checking autoconf version: $AUTOCONF --version" + $AUTOCONF --version > /dev/null 2>&1 + if [ $? = 0 ] ; then + _acfound=yes + break + fi + done +else + _acfound=yes + $ECHO "Using AUTOCONF environment variable override: $AUTOCONF" +fi + +_report_error=no +if [ ! "x$_acfound" = "xyes" ] ; then + $ECHO "ERROR: Unable to locate GNU Autoconf." + _report_error=yes +else + _version="`$AUTOCONF --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" + if [ "x$_version" = "x" ] ; then + _version="0.0.0" + fi + $ECHO "Found GNU Autoconf version $_version" + version_check "$AUTOCONF_VERSION" "$_version" + if [ $? -ne 0 ] ; then + _report_error=yes + fi +fi +if [ "x$_report_error" = "xyes" ] ; then + version_error "$AUTOCONF_VERSION" "GNU Autoconf" + exit 1 +fi + + +########################## +# automake version check # +########################## +_amfound=no +if [ "x$AUTOMAKE" = "x" ] ; then + for AUTOMAKE in automake ; do + $VERBOSE_ECHO "Checking automake version: $AUTOMAKE --version" + $AUTOMAKE --version > /dev/null 2>&1 + if [ $? = 0 ] ; then + _amfound=yes + break + fi + done +else + _amfound=yes + $ECHO "Using AUTOMAKE environment variable override: $AUTOMAKE" +fi + + +_report_error=no +if [ ! "x$_amfound" = "xyes" ] ; then + $ECHO + $ECHO "ERROR: Unable to locate GNU Automake." + _report_error=yes +else + _version="`$AUTOMAKE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" + if [ "x$_version" = "x" ] ; then + _version="0.0.0" + fi + $ECHO "Found GNU Automake version $_version" + version_check "$AUTOMAKE_VERSION" "$_version" + if [ $? -ne 0 ] ; then + _report_error=yes + fi +fi +if [ "x$_report_error" = "xyes" ] ; then + version_error "$AUTOMAKE_VERSION" "GNU Automake" + exit 1 +fi + + +######################## +# check for libtoolize # +######################## +HAVE_LIBTOOLIZE=yes +HAVE_ALT_LIBTOOLIZE=no +_ltfound=no +if [ "x$LIBTOOLIZE" = "x" ] ; then + LIBTOOLIZE=libtoolize + $VERBOSE_ECHO "Checking libtoolize version: $LIBTOOLIZE --version" + $LIBTOOLIZE --version > /dev/null 2>&1 + if [ ! $? = 0 ] ; then + HAVE_LIBTOOLIZE=no + $ECHO + if [ "x$HAVE_AUTORECONF" = "xno" ] ; then + $ECHO "Warning: libtoolize does not appear to be available." + else + $ECHO "Warning: libtoolize does not appear to be available. This means that" + $ECHO "the automatic build preparation via autoreconf will probably not work." + $ECHO "Preparing the build by running each step individually, however, should" + $ECHO "work and will be done automatically for you if autoreconf fails." + fi + + # look for some alternates + for tool in glibtoolize libtoolize15 libtoolize14 libtoolize13 ; do + $VERBOSE_ECHO "Checking libtoolize alternate: $tool --version" + _glibtoolize="`$tool --version > /dev/null 2>&1`" + if [ $? = 0 ] ; then + $VERBOSE_ECHO "Found $tool --version" + _glti="`which $tool`" + if [ "x$_glti" = "x" ] ; then + $VERBOSE_ECHO "Cannot find $tool with which" + continue; + fi + if test ! -f "$_glti" ; then + $VERBOSE_ECHO "Cannot use $tool, $_glti is not a file" + continue; + fi + _gltidir="`dirname $_glti`" + if [ "x$_gltidir" = "x" ] ; then + $VERBOSE_ECHO "Cannot find $tool path with dirname of $_glti" + continue; + fi + if test ! -d "$_gltidir" ; then + $VERBOSE_ECHO "Cannot use $tool, $_gltidir is not a directory" + continue; + fi + HAVE_ALT_LIBTOOLIZE=yes + LIBTOOLIZE="$tool" + $ECHO + $ECHO "Fortunately, $tool was found which means that your system may simply" + $ECHO "have a non-standard or incomplete GNU Autotools install. If you have" + $ECHO "sufficient system access, it may be possible to quell this warning by" + $ECHO "running:" + $ECHO + sudo -V > /dev/null 2>&1 + if [ $? = 0 ] ; then + $ECHO " sudo ln -s $_glti $_gltidir/libtoolize" + $ECHO + else + $ECHO " ln -s $_glti $_gltidir/libtoolize" + $ECHO + $ECHO "Run that as root or with proper permissions to the $_gltidir directory" + $ECHO + fi + _ltfound=yes + break + fi + done + else + _ltfound=yes + fi +else + _ltfound=yes + $ECHO "Using LIBTOOLIZE environment variable override: $LIBTOOLIZE" +fi + + +############################ +# libtoolize version check # +############################ +_report_error=no +if [ ! "x$_ltfound" = "xyes" ] ; then + $ECHO + $ECHO "ERROR: Unable to locate GNU Libtool." + _report_error=yes +else + _version="`$LIBTOOLIZE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" + if [ "x$_version" = "x" ] ; then + _version="0.0.0" + fi + $ECHO "Found GNU Libtool version $_version" + version_check "$LIBTOOL_VERSION" "$_version" + if [ $? -ne 0 ] ; then + _report_error=yes + fi +fi +if [ "x$_report_error" = "xyes" ] ; then + version_error "$LIBTOOL_VERSION" "GNU Libtool" + exit 1 +fi + + +##################### +# check for aclocal # +##################### +if [ "x$ACLOCAL" = "x" ] ; then + for ACLOCAL in aclocal ; do + $VERBOSE_ECHO "Checking aclocal version: $ACLOCAL --version" + $ACLOCAL --version > /dev/null 2>&1 + if [ $? = 0 ] ; then + break + fi + done +else + $ECHO "Using ACLOCAL environment variable override: $ACLOCAL" +fi + + +######################## +# check for autoheader # +######################## +if [ "x$AUTOHEADER" = "x" ] ; then + for AUTOHEADER in autoheader ; do + $VERBOSE_ECHO "Checking autoheader version: $AUTOHEADER --version" + $AUTOHEADER --version > /dev/null 2>&1 + if [ $? = 0 ] ; then + break + fi + done +else + $ECHO "Using AUTOHEADER environment variable override: $AUTOHEADER" +fi + + +######################### +# check if version only # +######################### +$VERBOSE_ECHO "Checking whether to only output version information" +if [ "x$VERSION_ONLY" = "xyes" ] ; then + $ECHO + ident + $ECHO "---" + $ECHO "Version requested. No preparation or configuration will be performed." + exit 0 +fi + + +################################# +# PROTECT_FROM_CLOBBER FUNCTION # +################################# +protect_from_clobber ( ) { + PFC_INIT=1 + + # protect COPYING & INSTALL from overwrite by automake. the + # automake force option will (inappropriately) ignore the existing + # contents of a COPYING and/or INSTALL files (depending on the + # version) instead of just forcing *missing* files like it does + # for AUTHORS, NEWS, and README. this is broken but extremely + # prevalent behavior, so we protect against it by keeping a backup + # of the file that can later be restored. + + if test -f COPYING ; then + if test -f COPYING.$$.protect_from_automake.backup ; then + $VERBOSE_ECHO "Already backed up COPYING in `pwd`" + else + $VERBOSE_ECHO "Backing up COPYING in `pwd`" + $VERBOSE_ECHO "cp -p COPYING COPYING.$$.protect_from_automake.backup" + cp -p COPYING COPYING.$$.protect_from_automake.backup + fi + fi + if test -f INSTALL ; then + if test -f INSTALL.$$.protect_from_automake.backup ; then + $VERBOSE_ECHO "Already backed up INSTALL in `pwd`" + else + $VERBOSE_ECHO "Backing up INSTALL in `pwd`" + $VERBOSE_ECHO "cp -p INSTALL INSTALL.$$.protect_from_automake.backup" + cp -p INSTALL INSTALL.$$.protect_from_automake.backup + fi + fi +} + + +############################## +# RECURSIVE_PROTECT FUNCTION # +############################## +recursive_protect ( ) { + + # for projects using recursive configure, run the build + # preparation steps for the subdirectories. this function assumes + # START_PATH was set to pwd before recursion begins so that + # relative paths work. + + # git 'r done, protect COPYING and INSTALL from being clobbered + protect_from_clobber + + if test -d autom4te.cache ; then + $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it" + $VERBOSE_ECHO "rm -rf autom4te.cache" + rm -rf autom4te.cache + fi + + # find configure template + _configure="`locate_configure_template`" + if [ "x$_configure" = "x" ] ; then + return + fi + # $VERBOSE_ECHO "Looking for configure template found `pwd`/$_configure" + + # look for subdirs + # $VERBOSE_ECHO "Looking for subdirs in `pwd`" + _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" + CHECK_DIRS="" + for dir in $_det_config_subdirs ; do + if test -d "`pwd`/$dir" ; then + CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\"" + fi + done + + # process subdirs + if [ ! "x$CHECK_DIRS" = "x" ] ; then + $VERBOSE_ECHO "Recursively scanning the following directories:" + $VERBOSE_ECHO " $CHECK_DIRS" + for dir in $CHECK_DIRS ; do + $VERBOSE_ECHO "Protecting files from automake in $dir" + cd "$START_PATH" + eval "cd $dir" + + # recursively git 'r done + recursive_protect + done + fi +} # end of recursive_protect + + +############################# +# RESTORE_CLOBBERED FUNCION # +############################# +restore_clobbered ( ) { + + # The automake (and autoreconf by extension) -f/--force-missing + # option may overwrite COPYING and INSTALL even if they do exist. + # Here we restore the files if necessary. + + spacer=no + + # COPYING + if test -f COPYING.$$.protect_from_automake.backup ; then + if test -f COPYING ; then + # compare entire content, restore if needed + if test "x`cat COPYING`" != "x`cat COPYING.$$.protect_from_automake.backup`" ; then + if test "x$spacer" = "xno" ; then + $VERBOSE_ECHO + spacer=yes + fi + # restore the backup + $VERBOSE_ECHO "Restoring COPYING from backup (automake -f likely clobbered it)" + $VERBOSE_ECHO "rm -f COPYING" + rm -f COPYING + $VERBOSE_ECHO "mv COPYING.$$.protect_from_automake.backup COPYING" + mv COPYING.$$.protect_from_automake.backup COPYING + fi # check contents + elif test -f COPYING.$$.protect_from_automake.backup ; then + $VERBOSE_ECHO "mv COPYING.$$.protect_from_automake.backup COPYING" + mv COPYING.$$.protect_from_automake.backup COPYING + fi # -f COPYING + + # just in case + $VERBOSE_ECHO "rm -f COPYING.$$.protect_from_automake.backup" + rm -f COPYING.$$.protect_from_automake.backup + fi # -f COPYING.$$.protect_from_automake.backup + + # INSTALL + if test -f INSTALL.$$.protect_from_automake.backup ; then + if test -f INSTALL ; then + # compare entire content, restore if needed + if test "x`cat INSTALL`" != "x`cat INSTALL.$$.protect_from_automake.backup`" ; then + if test "x$spacer" = "xno" ; then + $VERBOSE_ECHO + spacer=yes + fi + # restore the backup + $VERBOSE_ECHO "Restoring INSTALL from backup (automake -f likely clobbered it)" + $VERBOSE_ECHO "rm -f INSTALL" + rm -f INSTALL + $VERBOSE_ECHO "mv INSTALL.$$.protect_from_automake.backup INSTALL" + mv INSTALL.$$.protect_from_automake.backup INSTALL + fi # check contents + elif test -f INSTALL.$$.protect_from_automake.backup ; then + $VERBOSE_ECHO "mv INSTALL.$$.protect_from_automake.backup INSTALL" + mv INSTALL.$$.protect_from_automake.backup INSTALL + fi # -f INSTALL + + # just in case + $VERBOSE_ECHO "rm -f INSTALL.$$.protect_from_automake.backup" + rm -f INSTALL.$$.protect_from_automake.backup + fi # -f INSTALL.$$.protect_from_automake.backup + + CONFIGURE="`locate_configure_template`" + if [ "x$CONFIGURE" = "x" ] ; then + return + fi + + _aux_dir="`grep AC_CONFIG_AUX_DIR $CONFIGURE | grep -v '.*#.*AC_CONFIG_AUX_DIR' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_CONFIG_AUX_DIR(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" + if test ! -d "$_aux_dir" ; then + _aux_dir=. + fi + + for file in config.guess config.sub ltmain.sh ; do + if test -f "${_aux_dir}/${file}" ; then + $VERBOSE_ECHO "rm -f \"${_aux_dir}/${file}.backup\"" + rm -f "${_aux_dir}/${file}.backup" + fi + done +} # end of restore_clobbered + + +############################## +# RECURSIVE_RESTORE FUNCTION # +############################## +recursive_restore ( ) { + + # restore COPYING and INSTALL from backup if they were clobbered + # for each directory recursively. + + # git 'r undone + restore_clobbered + + # find configure template + _configure="`locate_configure_template`" + if [ "x$_configure" = "x" ] ; then + return + fi + + # look for subdirs + _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" + CHECK_DIRS="" + for dir in $_det_config_subdirs ; do + if test -d "`pwd`/$dir" ; then + CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\"" + fi + done + + # process subdirs + if [ ! "x$CHECK_DIRS" = "x" ] ; then + $VERBOSE_ECHO "Recursively scanning the following directories:" + $VERBOSE_ECHO " $CHECK_DIRS" + for dir in $CHECK_DIRS ; do + $VERBOSE_ECHO "Checking files for automake damage in $dir" + cd "$START_PATH" + eval "cd $dir" + + # recursively git 'r undone + recursive_restore + done + fi +} # end of recursive_restore + + +####################### +# INITIALIZE FUNCTION # +####################### +initialize ( ) { + + # this routine performs a variety of directory-specific + # initializations. some are sanity checks, some are preventive, + # and some are necessary setup detection. + # + # this function sets: + # CONFIGURE + # SEARCH_DIRS + # CONFIG_SUBDIRS + + ################################## + # check for a configure template # + ################################## + CONFIGURE="`locate_configure_template`" + if [ "x$CONFIGURE" = "x" ] ; then + $ECHO + $ECHO "A configure.ac or configure.in file could not be located implying" + $ECHO "that the GNU Build System is at least not used in this directory. In" + $ECHO "any case, there is nothing to do here without one of those files." + $ECHO + $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`" + exit 1 + fi + + ##################### + # detect an aux dir # + ##################### + _aux_dir="`grep AC_CONFIG_AUX_DIR $CONFIGURE | grep -v '.*#.*AC_CONFIG_AUX_DIR' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_CONFIG_AUX_DIR(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" + if test ! -d "$_aux_dir" ; then + _aux_dir=. + else + $VERBOSE_ECHO "Detected auxillary directory: $_aux_dir" + fi + + ################################ + # detect a recursive configure # + ################################ + CONFIG_SUBDIRS="" + _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $CONFIGURE | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" + for dir in $_det_config_subdirs ; do + if test -d "`pwd`/$dir" ; then + $VERBOSE_ECHO "Detected recursive configure directory: `pwd`/$dir" + CONFIG_SUBDIRS="$CONFIG_SUBDIRS `pwd`/$dir" + fi + done + + ########################################## + # make sure certain required files exist # + ########################################## + #for file in AUTHORS COPYING ChangeLog INSTALL NEWS README ; do + # if test ! -f $file ; then + # $VERBOSE_ECHO "Touching ${file} since it does not exist" + # touch $file + # fi + #done + + ################################################## + # make sure certain generated files do not exist # + ################################################## + for file in config.guess config.sub ltmain.sh ; do + if test -f "${_aux_dir}/${file}" ; then + $VERBOSE_ECHO "mv -f \"${_aux_dir}/${file}\" \"${_aux_dir}/${file}.backup\"" + mv -f "${_aux_dir}/${file}" "${_aux_dir}/${file}.backup" + fi + done + + ############################ + # search alternate m4 dirs # + ############################ + SEARCH_DIRS="" + for dir in m4 ; do + if [ -d $dir ] ; then + $VERBOSE_ECHO "Found extra aclocal search directory: $dir" + SEARCH_DIRS="$SEARCH_DIRS -I $dir" + fi + done + + ###################################### + # remove any previous build products # + ###################################### + if test -d autom4te.cache ; then + $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it" + $VERBOSE_ECHO "rm -rf autom4te.cache" + rm -rf autom4te.cache + fi +# tcl/tk (and probably others) have a customized aclocal.m4, so can't delete it +# if test -f aclocal.m4 ; then +# $VERBOSE_ECHO "Found an aclocal.m4 file, deleting it" +# $VERBOSE_ECHO "rm -f aclocal.m4" +# rm -f aclocal.m4 +# fi + +} # end of initialize() + + +############## +# initialize # +############## + +# stash path +START_PATH="`pwd`" + +# Before running autoreconf or manual steps, some prep detection work +# is necessary or useful. Only needs to occur once per directory, but +# does need to traverse the entire subconfigure hierarchy to protect +# files from being clobbered even by autoreconf. +recursive_protect + +# start from where we started +cd "$START_PATH" + +# get ready to process +initialize + + +############################################ +# prepare build via autoreconf or manually # +############################################ +reconfigure_manually=no +if [ "x$HAVE_AUTORECONF" = "xyes" ] ; then + $ECHO + $ECHO $ECHO_N "Automatically preparing build ... $ECHO_C" + + $VERBOSE_ECHO "$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS" + autoreconf_output="`$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS 2>&1`" + ret=$? + $VERBOSE_ECHO "$autoreconf_output" + + if [ ! $ret = 0 ] ; then + if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then + if [ ! "x`echo \"$autoreconf_output\" | grep libtoolize | grep \"No such file or directory\"`" = "x" ] ; then + $ECHO + $ECHO "Warning: autoreconf failed but due to what is usually a common libtool" + $ECHO "misconfiguration issue. This problem is encountered on systems that" + $ECHO "have installed libtoolize under a different name without providing a" + $ECHO "symbolic link or without setting the LIBTOOLIZE environment variable." + $ECHO + $ECHO "Restarting the preparation steps with LIBTOOLIZE set to $LIBTOOLIZE" + + export LIBTOOLIZE + RUN_RECURSIVE=no + export RUN_RECURSIVE + untrap_abnormal + + $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" + sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" + exit $? + fi + fi + + $ECHO "Warning: $AUTORECONF failed" + + if test -f ltmain.sh ; then + $ECHO "libtoolize being run by autoreconf is not creating ltmain.sh in the auxillary directory like it should" + fi + + $ECHO "Attempting to run the preparation steps individually" + reconfigure_manually=yes + fi +else + reconfigure_manually=yes +fi + + +############################ +# LIBTOOL_FAILURE FUNCTION # +############################ +libtool_failure ( ) { + + # libtool is rather error-prone in comparison to the other + # autotools and this routine attempts to compensate for some + # common failures. the output after a libtoolize failure is + # parsed for an error related to AC_PROG_LIBTOOL and if found, we + # attempt to inject a project-provided libtool.m4 file. + + _autoconf_output="$1" + + if [ "x$RUN_RECURSIVE" = "xno" ] ; then + # we already tried the libtool.m4, don't try again + return 1 + fi + + if test -f "$LIBTOOL_M4" ; then + found_libtool="`$ECHO $_autoconf_output | grep AC_PROG_LIBTOOL`" + if test ! "x$found_libtool" = "x" ; then + if test -f acinclude.m4 ; then + rm -f acinclude.m4.$$.backup + $VERBOSE_ECHO "cat acinclude.m4 > acinclude.m4.$$.backup" + cat acinclude.m4 > acinclude.m4.$$.backup + fi + $VERBOSE_ECHO "cat \"$LIBTOOL_M4\" >> acinclude.m4" + chmod u+w acinclude.m4 + cat "$LIBTOOL_M4" >> acinclude.m4 + + # don't keep doing this + RUN_RECURSIVE=no + export RUN_RECURSIVE + untrap_abnormal + + $ECHO + $ECHO "Restarting the preparation steps with libtool macros in acinclude.m4" + $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" + sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" + exit $? + fi + fi +} + + +########################### +# MANUAL_AUTOGEN FUNCTION # +########################### +manual_autogen ( ) { + + ################################################## + # Manual preparation steps taken are as follows: # + # aclocal [-I m4] # + # libtoolize --automake -c -f # + # aclocal [-I m4] # + # autoconf -f # + # autoheader # + # automake -a -c -f # + ################################################## + + ########### + # aclocal # + ########### + $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS" + aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`" + ret=$? + $VERBOSE_ECHO "$aclocal_output" + if [ ! $ret = 0 ] ; then $ECHO "ERROR: $ACLOCAL failed" && exit 2 ; fi + + ############## + # libtoolize # + ############## + need_libtoolize=no + for feature in AC_PROG_LIBTOOL LT_INIT ; do + $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" + found="`grep \"^$feature.*\" $CONFIGURE`" + if [ ! "x$found" = "x" ] ; then + need_libtoolize=yes + break + fi + done + if [ "x$need_libtoolize" = "xyes" ] ; then + if [ "x$HAVE_LIBTOOLIZE" = "xyes" ] ; then + $VERBOSE_ECHO "$LIBTOOLIZE $LIBTOOLIZE_OPTIONS" + libtoolize_output="`$LIBTOOLIZE $LIBTOOLIZE_OPTIONS 2>&1`" + ret=$? + $VERBOSE_ECHO "$libtoolize_output" + + if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi + else + if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then + $VERBOSE_ECHO "$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS" + libtoolize_output="`$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS 2>&1`" + ret=$? + $VERBOSE_ECHO "$libtoolize_output" + + if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi + fi + fi + + ########### + # aclocal # + ########### + # re-run again as instructed by libtoolize + $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS" + aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`" + ret=$? + $VERBOSE_ECHO "$aclocal_output" + + # libtoolize might put ltmain.sh in the wrong place + if test -f ltmain.sh ; then + if test ! -f "${_aux_dir}/ltmain.sh" ; then + $ECHO + $ECHO "Warning: $LIBTOOLIZE is creating ltmain.sh in the wrong directory" + $ECHO + $ECHO "Fortunately, the problem can be worked around by simply copying the" + $ECHO "file to the appropriate location (${_aux_dir}/). This has been done for you." + $ECHO + $VERBOSE_ECHO "cp -p ltmain.sh \"${_aux_dir}/ltmain.sh\"" + cp -p ltmain.sh "${_aux_dir}/ltmain.sh" + $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C" + fi + fi # ltmain.sh + fi # need_libtoolize + + ############ + # autoconf # + ############ + $VERBOSE_ECHO + $VERBOSE_ECHO "$AUTOCONF $AUTOCONF_OPTIONS" + autoconf_output="`$AUTOCONF $AUTOCONF_OPTIONS 2>&1`" + ret=$? + $VERBOSE_ECHO "$autoconf_output" + + if [ ! $ret = 0 ] ; then + # retry without the -f and check for usage of macros that are too new + ac2_59_macros="AC_C_RESTRICT AC_INCLUDES_DEFAULT AC_LANG_ASSERT AC_LANG_WERROR AS_SET_CATFILE" + ac2_55_macros="AC_COMPILER_IFELSE AC_FUNC_MBRTOWC AC_HEADER_STDBOOL AC_LANG_CONFTEST AC_LANG_SOURCE AC_LANG_PROGRAM AC_LANG_CALL AC_LANG_FUNC_TRY_LINK AC_MSG_FAILURE AC_PREPROC_IFELSE" + ac2_54_macros="AC_C_BACKSLASH_A AC_CONFIG_LIBOBJ_DIR AC_GNU_SOURCE AC_PROG_EGREP AC_PROG_FGREP AC_REPLACE_FNMATCH AC_FUNC_FNMATCH_GNU AC_FUNC_REALLOC AC_TYPE_MBSTATE_T" + + macros_to_search="" + ac_major="`echo ${AUTOCONF_VERSION}. | cut -d. -f1 | sed 's/[^0-9]//g'`" + ac_minor="`echo ${AUTOCONF_VERSION}. | cut -d. -f2 | sed 's/[^0-9]//g'`" + + if [ $ac_major -lt 2 ] ; then + macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros" + else + if [ $ac_minor -lt 54 ] ; then + macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros" + elif [ $ac_minor -lt 55 ] ; then + macros_to_search="$ac2_59_macros $ac2_55_macros" + elif [ $ac_minor -lt 59 ] ; then + macros_to_search="$ac2_59_macros" + fi + fi + + configure_ac_macros=__none__ + for feature in $macros_to_search ; do + $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" + found="`grep \"^$feature.*\" $CONFIGURE`" + if [ ! "x$found" = "x" ] ; then + if [ "x$configure_ac_macros" = "x__none__" ] ; then + configure_ac_macros="$feature" + else + configure_ac_macros="$feature $configure_ac_macros" + fi + fi + done + if [ ! "x$configure_ac_macros" = "x__none__" ] ; then + $ECHO + $ECHO "Warning: Unsupported macros were found in $CONFIGURE" + $ECHO + $ECHO "The `echo $CONFIGURE | basename` file was scanned in order to determine if any" + $ECHO "unsupported macros are used that exceed the minimum version" + $ECHO "settings specified within this file. As such, the following macros" + $ECHO "should be removed from configure.ac or the version numbers in this" + $ECHO "file should be increased:" + $ECHO + $ECHO "$configure_ac_macros" + $ECHO + $ECHO $ECHO_N "Ignorantly continuing build preparation ... $ECHO_C" + fi + + ################### + # autoconf, retry # + ################### + $VERBOSE_ECHO + $VERBOSE_ECHO "$AUTOCONF" + autoconf_output="`$AUTOCONF 2>&1`" + ret=$? + $VERBOSE_ECHO "$autoconf_output" + + if [ ! $ret = 0 ] ; then + # test if libtool is busted + libtool_failure "$autoconf_output" + + # let the user know what went wrong + cat < + #include + #include + #include + #include + #include ]], + [[int status, pfd[2]; + status = pipe(pfd); + status = fork(); + if (status < 0) { + ; + } else if (status == 0) { + char *arg0 = NULL; + + status = dup2(pfd[0], STDIN_FILENO); + + close(pfd[1]); + close(pfd[0]); + + execlp("", arg0, (char *)0); + perror("execl"); + exit(1); + } else { + close(pfd[0]); + }]])], + [pipes_avail_cv_=true], + [pipes_avail_cv_=false]) + AC_LANG_POP]) + +if [test x$pipes_avail_cv_ = xtrue ]; then + AC_DEFINE([HAVE_UNIX_PIPES], [1], [Whether UNIX pipes are available]) +fi + +# check for gmp +AC_CACHE_CHECK( + [if GMP is available], + [libgmp_avail_cv_], + [libgmp_save_libs=$LIBS + LIBS="-lgmp $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[mpz_t bar; + mpz_init(bar); + mpz_clear(bar);]])],[libgmp_avail_cv_=true],[libgmp_avail_cv_=false]) + AC_LANG_POP + LIBS=$libgmp_save_libs]) + +if [test x$libgmp_avail_cv_ = xtrue ]; then + LIBS="-lgmp $LIBS" +else + AC_MSG_FAILURE("Could not find gmp library (set CPPFLAGS and LDFLAGS?)") +fi + +# check for mpfr +AC_CACHE_CHECK( + [if MPFR is available], + [libmpfr_avail_cv_], + [libmpfr_save_libs=$LIBS + LIBS="-lmpfr $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[mpfr_t bar; + mpfr_init(bar); + char * buf = NULL; + mpfr_asprintf(&buf, "%Rf", bar); + mpfr_clear(bar);]])],[libmpfr_avail_cv_=true],[libmpfr_avail_cv_=false]) + AC_LANG_POP + LIBS=$libmpfr_save_libs]) + +if [test x$libmpfr_avail_cv_ = xtrue ]; then + LIBS="-lmpfr $LIBS" +else + AC_MSG_FAILURE("Could not find mpfr library 2.4.0 or higher (set CPPFLAGS and LDFLAGS?)") +fi + +# check for edit +AC_CACHE_CHECK( + [if libedit is available], + [libedit_avail_cv_], + [libedit_save_libs=$LIBS + LIBS="-ledit $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include + #include + #include ]], + [[rl_readline_name = const_cast("foo"); + char * line = readline(const_cast("foo: ")); + free(line);]])],[libedit_avail_cv_=true],[libedit_avail_cv_=false]) + AC_LANG_POP + LIBS=$libedit_save_libs]) + +if [test x$libedit_avail_cv_ = xtrue ]; then + LIBS="-ledit $LIBS" + AC_DEFINE([HAVE_LIBEDIT], [1], [If the libedit library is available]) +fi + +# check for boost_regex +AC_CACHE_CHECK( + [if boost_regex is available], + [boost_regex_avail_cv_], + [boost_regex_save_libs=$LIBS + LIBS="-lboost_regex$BOOST_SUFFIX $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[boost::regex foo_regexp("Hello, world!");]])], + [boost_regex_avail_cv_=true], + [boost_regex_avail_cv_=false]) + AC_LANG_POP + LIBS=$boost_regex_save_libs]) + +if [test x$boost_regex_avail_cv_ = xtrue ]; then + LIBS="-lboost_regex$BOOST_SUFFIX $LIBS" +else + AC_MSG_FAILURE("Could not find boost_regex library (set CPPFLAGS and LDFLAGS?)") +fi + +# check for boost_date_time +AC_CACHE_CHECK( + [if boost_date_time is available], + [boost_date_time_cpplib_avail_cv_], + [boost_date_time_save_libs=$LIBS + LIBS="-lboost_date_time$BOOST_SUFFIX $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + #include + #include + + using namespace boost::posix_time; + using namespace boost::date_time; + + #include + + inline ptime time_to_system_local(const ptime& when) { + struct std::tm tm_gmt = to_tm(when); + return from_time_t(mktime(&tm_gmt)); + }]], + [[ptime t10 = ptime(boost::gregorian::from_string("2007-01-15"), + ptime::time_duration_type()); + + ptime t12 = time_to_system_local(t10); + + return t10 != t12;]])], + [boost_date_time_cpplib_avail_cv_=true], + [boost_date_time_cpplib_avail_cv_=false]) + AC_LANG_POP + LIBS=$boost_date_time_save_libs]) + +if [test x$boost_date_time_cpplib_avail_cv_ = xtrue ]; then + LIBS="-lboost_date_time$BOOST_SUFFIX $LIBS" +else + AC_MSG_FAILURE("Could not find boost_date_time library (set CPPFLAGS and LDFLAGS?)") +fi + +# check for boost_filesystem +AC_CACHE_CHECK( + [if boost_filesystem is available], + [boost_filesystem_cpplib_avail_cv_], + [boost_filesystem_save_libs=$LIBS + LIBS="-lboost_filesystem$BOOST_SUFFIX -lboost_system$BOOST_SUFFIX $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[boost::filesystem::path this_path("Hello");]])], + [boost_filesystem_cpplib_avail_cv_=true], + [boost_filesystem_cpplib_avail_cv_=false]) + AC_LANG_POP + LIBS=$boost_filesystem_save_libs]) + +if [test x$boost_filesystem_cpplib_avail_cv_ = xtrue ]; then + LIBS="-lboost_filesystem$BOOST_SUFFIX -lboost_system$BOOST_SUFFIX $LIBS" +else + AC_MSG_FAILURE("Could not find boost_filesystem library (set CPPFLAGS and LDFLAGS?)") +fi + +# check for boost_iostreams +AC_CACHE_CHECK( + [if boost_iostreams is available], + [boost_iostreams_cpplib_avail_cv_], + [boost_iostreams_save_libs=$LIBS + LIBS="-lboost_iostreams$BOOST_SUFFIX -lboost_system$BOOST_SUFFIX $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include ]], + [[namespace io = boost::iostreams; + typedef io::stream ofdstream; + ofdstream outstream(1);]])], + [boost_iostreams_cpplib_avail_cv_=true], + [boost_iostreams_cpplib_avail_cv_=false]) + AC_LANG_POP + LIBS=$boost_iostreams_save_libs]) + +if [test x$boost_iostreams_cpplib_avail_cv_ = xtrue ]; then + LIBS="-lboost_iostreams$BOOST_SUFFIX -lboost_system$BOOST_SUFFIX $LIBS" +else + AC_MSG_FAILURE("Could not find boost_iostreams library (set CPPFLAGS and LDFLAGS?)") +fi + +# check for boost_serialization +AC_CACHE_CHECK( + [if boost_serialization is available], + [boost_serialization_cpplib_avail_cv_], + [boost_serialization_save_libs=$LIBS + LIBS="-lboost_serialization$BOOST_SUFFIX -lboost_system$BOOST_SUFFIX $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + struct foo { + int a; + template + void serialize(Archive & ar, const unsigned int) { + ar & a; + } + };]], + [[boost::archive::binary_oarchive oa(std::cout); + foo x; + oa << x;]])], + [boost_serialization_cpplib_avail_cv_=true], + [boost_serialization_cpplib_avail_cv_=false]) + AC_LANG_POP + LIBS=$boost_serialization_save_libs]) + +if [test x$boost_serialization_cpplib_avail_cv_ = xtrue ]; then + AC_DEFINE([HAVE_BOOST_SERIALIZATION], [1], [Whether Boost.Serialization is available]) + LIBS="-lboost_serialization$BOOST_SUFFIX $LIBS" +fi +AM_CONDITIONAL(HAVE_BOOST_SERIALIZATION, test x$boost_serialization_cpplib_avail_cv_ = xtrue) + +# check for Python +AM_PATH_PYTHON(2.4,, :) +if [test "$PYTHON" != :]; then + AM_CONDITIONAL(HAVE_PYTHON, true) + AC_CACHE_CHECK( + [if boost_python is available], + [boost_python_cpplib_avail_cv_], + [boost_python_save_libs=$LIBS + LIBS="-lboost_python$BOOST_SUFFIX -lpython$PYTHON_VERSION $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + using namespace boost::python; + class foo {}; + BOOST_PYTHON_MODULE(samp) { + class_< foo > ("foo") ; + }]], + [[return 0]])], + [boost_python_cpplib_avail_cv_=true], + [boost_python_cpplib_avail_cv_=false]) + AC_LANG_POP + LIBS=$boost_python_save_libs]) + + if [ test x$boost_python_cpplib_avail_cv_ = xtrue ]; then + AC_DEFINE([HAVE_BOOST_PYTHON], [1], [Whether Boost.Python is available]) + LIBS="-lboost_python$BOOST_SUFFIX -lpython$PYTHON_VERSION $LIBS" + fi +else + AM_CONDITIONAL(HAVE_PYTHON, false) +fi +AM_CONDITIONAL(HAVE_BOOST_PYTHON, test x$boost_python_cpplib_avail_cv_ = xtrue) + +# check for CppUnit +AC_CACHE_CHECK( + [if cppunit is available], + [cppunit_avail_cv_], + [cppunit_save_libs=$LIBS + LIBS="-lcppunit $LIBS" + AC_LANG_PUSH(C++) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + #include + #include + #include + #include + #include + #include ]], + [[CPPUNIT_NS::TestResult controller; + CPPUNIT_NS::TestResultCollector result;]])], + [cppunit_avail_cv_=true], + [cppunit_avail_cv_=false]) + AC_LANG_POP + LIBS=$cppunit_save_libs]) + +AM_CONDITIONAL(HAVE_CPPUNIT, test x$cppunit_avail_cv_ = xtrue) + +# Checks for header files. +AC_HEADER_STDC +AC_HEADER_STAT +AC_CHECK_HEADERS([langinfo.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_SIZE_T +AC_STRUCT_TM + +# Checks for library functions. +#AC_FUNC_MKTIME +#AC_FUNC_STAT +#AC_FUNC_STRFTIME +AC_CHECK_FUNCS([access realpath getpwuid getpwnam isatty]) + +# Pepare the Makefiles +AC_CONFIG_FILES([Makefile po/Makefile.in intl/Makefile]) +AC_OUTPUT -- cgit v1.2.3