Repository: scalaris-team/scalaris
Branch: master
Commit: 8579b0d44624
Files: 1263
Total size: 12.4 MB
Directory structure:
gitextract_gzxzccox/
├── .gitattributes
├── .gitignore
├── .project
├── .pydevproject
├── .settings/
│ ├── org.eclipse.core.resources.prefs
│ ├── org.erlide.core.prefs
│ └── org.erlide.model.prefs
├── .travis.yml
├── AUTHORS
├── ChangeLog
├── Doxyfile
├── Emakefile.in
├── LICENSE
├── Makefile.in
├── README.md
├── VERSION
├── bin/
│ ├── .gitignore
│ ├── find_erlang.bat
│ ├── firstnode.bat
│ ├── firstnode.sh
│ ├── joining_node.bat
│ ├── joining_node.sh
│ ├── jsonclient.in
│ ├── mgmt-server.sh
│ ├── quorum_node.sh
│ ├── scalaris.cfg
│ ├── scalaris.local.cfg.example
│ ├── scalaris.local.ssl.bad.cfg
│ ├── scalaris.local.ssl.cfg
│ ├── scalaris.local.ssl.good.cfg
│ ├── scalarisctl.conf
│ ├── scalarisctl.in
│ ├── setup-ring-for-benchmarks.sh
│ ├── setup-ring.sh
│ └── slurmctl
├── bootstrap.sh
├── build-aux/
│ ├── compile
│ ├── config.guess
│ ├── config.sub
│ ├── install-sh
│ └── missing
├── build.bat
├── configure
├── configure.ac
├── contrib/
│ ├── .gitignore
│ ├── 4caast/
│ │ ├── blueprints/
│ │ │ ├── Scalaris-v01.xml
│ │ │ ├── Scalaris-v02.xml
│ │ │ ├── Scalaris-v03.xml
│ │ │ ├── WikiOnScalaris-v01.xml
│ │ │ ├── WikiOnScalaris-v02.xml
│ │ │ └── WikiOnScalaris-v03.xml
│ │ └── monitoring/
│ │ ├── README
│ │ ├── probe-config.wiki.xml
│ │ └── probe-config.xml
│ ├── benchmark/
│ │ ├── bench_tt
│ │ ├── clean.sh
│ │ ├── cluster_run.pl
│ │ ├── latex.rb
│ │ ├── main.tex.erb
│ │ ├── plot.gnuplot.erb
│ │ ├── plotall.gnuplot.erb
│ │ ├── run_local_bench.sh
│ │ └── simple.run
│ ├── chef/
│ │ ├── apt/
│ │ │ ├── README.md
│ │ │ ├── TODO.org
│ │ │ ├── files/
│ │ │ │ └── default/
│ │ │ │ ├── apt-cacher
│ │ │ │ ├── apt-cacher.conf
│ │ │ │ └── apt-proxy-v2.conf
│ │ │ ├── metadata.json
│ │ │ ├── metadata.rb
│ │ │ ├── providers/
│ │ │ │ └── repository.rb
│ │ │ ├── recipes/
│ │ │ │ ├── cacher-client.rb
│ │ │ │ ├── cacher.rb
│ │ │ │ └── default.rb
│ │ │ └── resources/
│ │ │ └── repository.rb
│ │ └── scalaris_PIC/
│ │ ├── attributes/
│ │ │ └── default.rb
│ │ ├── metadata.rb
│ │ ├── recipes/
│ │ │ ├── Deploy_PIC.rb
│ │ │ ├── Start_PIC.rb
│ │ │ ├── Stop_PIC.rb
│ │ │ └── Undeploy_PIC.rb
│ │ └── templates/
│ │ └── default/
│ │ ├── initd.conf.erb
│ │ └── scalaris.local.cfg.erb
│ ├── datanucleus/
│ │ ├── .gitignore
│ │ ├── scalaris-datanucleus-store/
│ │ │ ├── .classpath
│ │ │ ├── .settings/
│ │ │ │ ├── org.eclipse.core.resources.prefs
│ │ │ │ ├── org.eclipse.jdt.core.prefs
│ │ │ │ ├── org.eclipse.jdt.ui.prefs
│ │ │ │ └── org.eclipse.m2e.core.prefs
│ │ │ ├── License.txt
│ │ │ ├── META-INF/
│ │ │ │ ├── LICENSE.txt
│ │ │ │ ├── MANIFEST.MF
│ │ │ │ └── NOTICE.txt
│ │ │ ├── maven_git_hook.sh
│ │ │ ├── mkThirdPartyLicenseFile.sh
│ │ │ ├── plugin.xml
│ │ │ ├── pom.xml
│ │ │ ├── src/
│ │ │ │ └── java/
│ │ │ │ └── org/
│ │ │ │ └── datanucleus/
│ │ │ │ └── store/
│ │ │ │ └── scalaris/
│ │ │ │ ├── ConnectionFactoryImpl.java
│ │ │ │ ├── Localisation.properties
│ │ │ │ ├── ScalarisPersistenceHandler.java
│ │ │ │ ├── ScalarisSchemaHandler.java
│ │ │ │ ├── ScalarisStoreManager.java
│ │ │ │ ├── ScalarisUtils.java
│ │ │ │ ├── fieldmanager/
│ │ │ │ │ ├── FetchFieldManager.java
│ │ │ │ │ └── StoreFieldManager.java
│ │ │ │ └── query/
│ │ │ │ ├── JDOQLQuery.java
│ │ │ │ ├── JPQLQuery.java
│ │ │ │ ├── ScalarisJDOQLEvaluator.java
│ │ │ │ └── ScalarisJDOQLResultClassMapper.java
│ │ │ └── start-scalaris.sh
│ │ └── scalaris-datanucleus-store-test/
│ │ ├── .classpath
│ │ ├── .settings/
│ │ │ ├── org.eclipse.core.resources.prefs
│ │ │ ├── org.eclipse.jdt.core.prefs
│ │ │ └── org.eclipse.m2e.core.prefs
│ │ ├── LICENSE.txt
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── de/
│ │ │ │ └── zib/
│ │ │ │ └── scalaris/
│ │ │ │ └── datanucleus/
│ │ │ │ └── store/
│ │ │ │ └── test/
│ │ │ │ ├── Author.java
│ │ │ │ ├── Book.java
│ │ │ │ ├── Inventory.java
│ │ │ │ └── Product.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── persistence.xml
│ │ │ ├── log4j.properties
│ │ │ └── package-excel.orm
│ │ └── test/
│ │ └── java/
│ │ └── de/
│ │ └── zib/
│ │ └── scalaris/
│ │ └── datanucleus/
│ │ └── store/
│ │ └── test/
│ │ ├── ScalarisStoreTests.java
│ │ ├── StoreUtils.java
│ │ ├── TestScalarisQuery.java
│ │ └── TestScalarisStorage.java
│ ├── dialyzer-col.sed
│ ├── dotgraph_cyclon.sh
│ ├── dotto/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.rst
│ │ ├── erlang.mk
│ │ ├── src/
│ │ │ ├── dotto.app.src
│ │ │ └── dotto.erl
│ │ └── test/
│ │ └── dotto_SUITE.erl
│ ├── init.d/
│ │ ├── .gitignore
│ │ ├── initd-first.conf
│ │ ├── initd.conf
│ │ ├── scalaris-monitor.in
│ │ └── scalaris.in
│ ├── log4erl/
│ │ ├── API.txt
│ │ ├── Appenders_API.txt
│ │ ├── CHANGELOG.txt
│ │ ├── CONFIGURATION.txt
│ │ ├── LICENSE.txt
│ │ ├── Makefile
│ │ ├── README.txt
│ │ ├── TODO.txt
│ │ ├── include/
│ │ │ └── log4erl.hrl
│ │ ├── priv/
│ │ │ ├── l4e.conf
│ │ │ └── log4erl.conf
│ │ └── src/
│ │ ├── Makefile
│ │ ├── console_appender.erl
│ │ ├── dummy_appender.erl
│ │ ├── email_msg.erl
│ │ ├── error_logger_log4erl_h.erl
│ │ ├── file_appender.erl
│ │ ├── log4erl.app.src
│ │ ├── log4erl.erl
│ │ ├── log4erl_conf.erl
│ │ ├── log4erl_lex.xrl
│ │ ├── log4erl_parser.yrl
│ │ ├── log4erl_sup.erl
│ │ ├── log4erl_utils.erl
│ │ ├── log_filter.erl
│ │ ├── log_filter_codegen.erl
│ │ ├── log_formatter.erl
│ │ ├── log_manager.erl
│ │ ├── logger_guard.erl
│ │ ├── smtp_appender.erl
│ │ ├── smtp_fsm.erl
│ │ ├── syslog_appender.erl
│ │ └── xml_appender.erl
│ ├── log4erl-setup.txt
│ ├── packages/
│ │ ├── bindings/
│ │ │ ├── PKGBUILD
│ │ │ ├── checkout.sh
│ │ │ ├── debian.changelog
│ │ │ ├── debian.compat
│ │ │ ├── debian.control
│ │ │ ├── debian.rules
│ │ │ ├── debian.source.lintian-overrides
│ │ │ ├── scalaris-bindings.changes
│ │ │ ├── scalaris-bindings.dsc
│ │ │ └── scalaris-bindings.spec
│ │ ├── examples-wiki/
│ │ │ ├── checkout.sh
│ │ │ ├── debian.changelog
│ │ │ ├── debian.compat
│ │ │ ├── debian.control
│ │ │ ├── debian.rules
│ │ │ ├── debian.scalaris-examples-wiki-tomcat5.conffiles
│ │ │ ├── debian.scalaris-examples-wiki-tomcat6.conffiles
│ │ │ ├── debian.source.lintian-overrides
│ │ │ ├── scalaris-examples-wiki-rpmlintrc
│ │ │ ├── scalaris-examples-wiki.changes
│ │ │ ├── scalaris-examples-wiki.dsc
│ │ │ └── scalaris-examples-wiki.spec
│ │ ├── main/
│ │ │ ├── PKGBUILD
│ │ │ ├── checkout.sh
│ │ │ ├── debian.changelog
│ │ │ ├── debian.compat
│ │ │ ├── debian.control
│ │ │ ├── debian.rules
│ │ │ ├── debian.scalaris.postinst
│ │ │ ├── debian.scalaris.postrm
│ │ │ ├── debian.scalaris.prerm
│ │ │ ├── debian.source.lintian-overrides
│ │ │ ├── install
│ │ │ ├── scalaris-rpmlintrc
│ │ │ ├── scalaris.changes
│ │ │ ├── scalaris.dsc
│ │ │ └── scalaris.spec
│ │ └── scalaris-pattern.xml
│ ├── scalaris-start-local.sh
│ ├── slurm/
│ │ ├── README
│ │ ├── basho-bench.sh
│ │ ├── basho-bench.slurm
│ │ ├── basho_slurm_lg.slurm
│ │ ├── cleanup.sh
│ │ ├── config/
│ │ │ ├── basho-bench.cfg
│ │ │ └── env.sh
│ │ ├── count-channels.slurm
│ │ ├── example-job-script.slurm
│ │ ├── increment-bench.sh
│ │ ├── increment-bench.slurm
│ │ └── util/
│ │ ├── checkdir.sh
│ │ ├── collect_crashdumps.sh
│ │ ├── crashreport.awk
│ │ ├── crashwatcher.sh
│ │ ├── start-basho-bench.sh
│ │ ├── start-scalaris.sh
│ │ ├── start-vm.sh
│ │ ├── stop-scalaris.sh
│ │ ├── sync_scalaris_to_local_dir.sh
│ │ ├── toplog.sh
│ │ └── watchdog.sh
│ ├── systemd/
│ │ ├── .gitignore
│ │ ├── README
│ │ ├── scalaris-first.conf
│ │ ├── scalaris.conf
│ │ ├── scalaris.fc
│ │ ├── scalaris.if
│ │ ├── scalaris.service.in
│ │ └── scalaris.te
│ ├── wikipedia/
│ │ ├── .gitignore
│ │ ├── README
│ │ ├── build.xml
│ │ ├── contrib/
│ │ │ ├── .gitignore
│ │ │ ├── apache-tomcat/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── LICENSE
│ │ │ │ ├── NOTICE
│ │ │ │ ├── RELEASE-NOTES
│ │ │ │ ├── RUNNING.txt
│ │ │ │ ├── bin/
│ │ │ │ │ ├── bootstrap.jar
│ │ │ │ │ ├── catalina-tasks.xml
│ │ │ │ │ ├── catalina.bat
│ │ │ │ │ ├── catalina.sh
│ │ │ │ │ ├── commons-daemon.jar
│ │ │ │ │ ├── configtest.bat
│ │ │ │ │ ├── configtest.sh
│ │ │ │ │ ├── cpappend.bat
│ │ │ │ │ ├── daemon.sh
│ │ │ │ │ ├── digest.bat
│ │ │ │ │ ├── digest.sh
│ │ │ │ │ ├── setclasspath.bat
│ │ │ │ │ ├── setclasspath.sh
│ │ │ │ │ ├── shutdown.bat
│ │ │ │ │ ├── shutdown.sh
│ │ │ │ │ ├── startup.bat
│ │ │ │ │ ├── startup.sh
│ │ │ │ │ ├── tomcat-juli.jar
│ │ │ │ │ ├── tool-wrapper.bat
│ │ │ │ │ ├── tool-wrapper.sh
│ │ │ │ │ ├── version.bat
│ │ │ │ │ └── version.sh
│ │ │ │ ├── conf/
│ │ │ │ │ ├── catalina.policy
│ │ │ │ │ ├── catalina.properties
│ │ │ │ │ ├── context.xml
│ │ │ │ │ ├── logging.properties
│ │ │ │ │ ├── server.xml
│ │ │ │ │ ├── tomcat-users.xml
│ │ │ │ │ └── web.xml
│ │ │ │ ├── lib/
│ │ │ │ │ ├── annotations-api.jar
│ │ │ │ │ ├── catalina-ant.jar
│ │ │ │ │ ├── catalina-ha.jar
│ │ │ │ │ ├── catalina-tribes.jar
│ │ │ │ │ ├── catalina.jar
│ │ │ │ │ ├── ecj-4.2.2.jar
│ │ │ │ │ ├── el-api.jar
│ │ │ │ │ ├── jasper-el.jar
│ │ │ │ │ ├── jasper.jar
│ │ │ │ │ ├── jsp-api.jar
│ │ │ │ │ ├── servlet-api.jar
│ │ │ │ │ ├── tomcat-api.jar
│ │ │ │ │ ├── tomcat-coyote.jar
│ │ │ │ │ ├── tomcat-dbcp.jar
│ │ │ │ │ ├── tomcat-i18n-es.jar
│ │ │ │ │ ├── tomcat-i18n-fr.jar
│ │ │ │ │ ├── tomcat-i18n-ja.jar
│ │ │ │ │ ├── tomcat-jdbc.jar
│ │ │ │ │ └── tomcat-util.jar
│ │ │ │ ├── temp/
│ │ │ │ │ └── safeToDelete.tmp
│ │ │ │ └── webapps/
│ │ │ │ └── ROOT/
│ │ │ │ └── index.jsp
│ │ │ ├── bliki-core-3.0.20-SNAPSHOT.jar
│ │ │ ├── commons-codec-1.6.jar
│ │ │ ├── commons-compress-1.6.jar
│ │ │ ├── commons-httpclient-3.1.jar
│ │ │ ├── commons-lang-2.6.jar
│ │ │ ├── commons-logging-1.1.1.jar
│ │ │ ├── java-bloomfilter-1.0.jar
│ │ │ ├── libsqlite4java-osx-10.4.jnilib
│ │ │ ├── libsqlite4java-osx-ppc.jnilib
│ │ │ ├── libsqlite4java-osx.jnilib
│ │ │ ├── sqlite4java.jar
│ │ │ ├── update-tomcat.txt
│ │ │ └── xz-1.4.jar
│ │ ├── epl-v10.htm
│ │ ├── scalaris-wiki/
│ │ │ ├── META-INF/
│ │ │ │ └── MANIFEST.MF
│ │ │ ├── WEB-INF/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── dumps/
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── empty-de.xml
│ │ │ │ │ ├── empty-en.xml
│ │ │ │ │ └── empty-es.xml
│ │ │ │ ├── plugins/
│ │ │ │ │ └── .gitignore
│ │ │ │ └── web.xml
│ │ │ ├── index.jsp
│ │ │ ├── page.jsp
│ │ │ ├── pageEdit.jsp
│ │ │ ├── pageHistory.jsp
│ │ │ ├── pageSpecial_pagelist.jsp
│ │ │ └── skins/
│ │ │ ├── load.css
│ │ │ └── load_002.css
│ │ └── src/
│ │ └── de/
│ │ └── zib/
│ │ └── scalaris/
│ │ └── examples/
│ │ └── wikipedia/
│ │ ├── ErlangConverter.java
│ │ ├── InvolvedKey.java
│ │ ├── MyScalarisOpExecWrapper.java
│ │ ├── MyScalarisSingleOpExecutor.java
│ │ ├── MyScalarisTxOpExecutor.java
│ │ ├── NamespaceUtils.java
│ │ ├── Options.java
│ │ ├── PageHistoryResult.java
│ │ ├── Result.java
│ │ ├── RevisionResult.java
│ │ ├── SQLiteDataHandler.java
│ │ ├── SavePageResult.java
│ │ ├── ScalarisDataHandler.java
│ │ ├── ScalarisDataHandlerNormalised.java
│ │ ├── ScalarisDataHandlerUnnormalised.java
│ │ ├── ScalarisOpType.java
│ │ ├── ScalarisReadListOp1.java
│ │ ├── ScalarisReadNumberOp1.java
│ │ ├── ScalarisReadRandomListEntryOp1.java
│ │ ├── ValueResult.java
│ │ ├── WikiServletContext.java
│ │ ├── bliki/
│ │ │ ├── ExistingPagesCache.java
│ │ │ ├── MyConfiguration.java
│ │ │ ├── MyFullurl.java
│ │ │ ├── MyIfexistTemplateFun.java
│ │ │ ├── MyLocalurl.java
│ │ │ ├── MyMagicWord.java
│ │ │ ├── MyNamespace.java
│ │ │ ├── MyParsingIfTemplateFun.java
│ │ │ ├── MyParsingSwitchTemplateFun.java
│ │ │ ├── MyParsingWikiModel.java
│ │ │ ├── MySQLiteMagicWord.java
│ │ │ ├── MySQLiteWikiModel.java
│ │ │ ├── MyScalarisMagicWord.java
│ │ │ ├── MyScalarisWikiModel.java
│ │ │ ├── MyWikiModel.java
│ │ │ ├── NormalisedTitle.java
│ │ │ ├── WikiPageBean.java
│ │ │ ├── WikiPageBeanBase.java
│ │ │ ├── WikiPageEditBean.java
│ │ │ ├── WikiPageListBean.java
│ │ │ ├── WikiServlet.java
│ │ │ ├── WikiServletDataHandler.java
│ │ │ └── WikiServletScalaris.java
│ │ ├── data/
│ │ │ ├── Contribution.java
│ │ │ ├── Contributor.java
│ │ │ ├── Page.java
│ │ │ ├── Revision.java
│ │ │ ├── ShortRevision.java
│ │ │ ├── SiteInfo.java
│ │ │ └── xml/
│ │ │ ├── Main.java
│ │ │ ├── SAXParsingInterruptedException.java
│ │ │ ├── WikiDump.java
│ │ │ ├── WikiDumpConvertPreparedSQLite.java
│ │ │ ├── WikiDumpGetCategoryTreeHandler.java
│ │ │ ├── WikiDumpHandler.java
│ │ │ ├── WikiDumpPageHandler.java
│ │ │ ├── WikiDumpPrepareSQLiteForScalarisHandler.java
│ │ │ ├── WikiDumpPreparedSQLiteToScalaris.java
│ │ │ ├── WikiDumpSQLiteLinkTables.java
│ │ │ ├── WikiDumpToScalarisHandler.java
│ │ │ ├── WikiDumpXml2SQLite.java
│ │ │ ├── XmlContributor.java
│ │ │ ├── XmlPage.java
│ │ │ ├── XmlRevision.java
│ │ │ ├── XmlSiteInfo.java
│ │ │ └── util/
│ │ │ └── SevenZInputStream.java
│ │ ├── plugin/
│ │ │ ├── PluginClassLoader.java
│ │ │ ├── WikiEventHandler.java
│ │ │ ├── WikiPlugin.java
│ │ │ └── fourcaast/
│ │ │ ├── FourCaastAccounting.java
│ │ │ ├── FourCaastAccountingPlugin.java
│ │ │ ├── FourCaastMonitoring.java
│ │ │ ├── FourCaastMonitoringMBean.java
│ │ │ └── FourCaastMonitoringPlugin.java
│ │ └── tomcat/
│ │ ├── FailedRequestFilter.java
│ │ ├── SetCharacterEncodingFilter.java
│ │ └── URLParamEncoder.java
│ ├── yaws/
│ │ ├── LICENSE
│ │ ├── include/
│ │ │ ├── soap-envelope.hrl
│ │ │ ├── soap.hrl
│ │ │ ├── wsdl11soap12.hrl
│ │ │ ├── yaws.hrl
│ │ │ ├── yaws_api.hrl
│ │ │ ├── yaws_dav.hrl
│ │ │ ├── yaws_lock.hrl
│ │ │ └── yaws_soap.hrl
│ │ ├── src/
│ │ │ ├── haxe.erl
│ │ │ ├── json.erl
│ │ │ ├── json2.erl
│ │ │ ├── jsonrpc.erl
│ │ │ ├── mime_type_c.erl
│ │ │ ├── mime_types.erl
│ │ │ ├── yaws.app.src
│ │ │ ├── yaws.app.src.script
│ │ │ ├── yaws.appup.src
│ │ │ ├── yaws.erl
│ │ │ ├── yaws_api.erl
│ │ │ ├── yaws_app.erl
│ │ │ ├── yaws_appdeps.hrl
│ │ │ ├── yaws_appmod_cgi.erl
│ │ │ ├── yaws_appmod_dav.erl
│ │ │ ├── yaws_appmod_fcgi.erl
│ │ │ ├── yaws_cgi.erl
│ │ │ ├── yaws_charset.hrl
│ │ │ ├── yaws_compile.erl
│ │ │ ├── yaws_config.erl
│ │ │ ├── yaws_ctl.erl
│ │ │ ├── yaws_debug.erl
│ │ │ ├── yaws_debug.hrl
│ │ │ ├── yaws_dime.erl
│ │ │ ├── yaws_dynopts.erl
│ │ │ ├── yaws_exhtml.erl
│ │ │ ├── yaws_generated.erl
│ │ │ ├── yaws_generated.template
│ │ │ ├── yaws_html.erl
│ │ │ ├── yaws_jsonrpc.erl
│ │ │ ├── yaws_log.erl
│ │ │ ├── yaws_log_file_h.erl
│ │ │ ├── yaws_logger.erl
│ │ │ ├── yaws_ls.erl
│ │ │ ├── yaws_multipart.erl
│ │ │ ├── yaws_outmod.erl
│ │ │ ├── yaws_pam.erl
│ │ │ ├── yaws_revproxy.erl
│ │ │ ├── yaws_rpc.erl
│ │ │ ├── yaws_rss.erl
│ │ │ ├── yaws_runmod_lock.erl
│ │ │ ├── yaws_sendfile.erl
│ │ │ ├── yaws_server.erl
│ │ │ ├── yaws_session_server.erl
│ │ │ ├── yaws_shaper.erl
│ │ │ ├── yaws_soap12_lib.erl
│ │ │ ├── yaws_soap_lib.erl
│ │ │ ├── yaws_soap_srv.erl
│ │ │ ├── yaws_sse.erl
│ │ │ ├── yaws_stats.erl
│ │ │ ├── yaws_sup.erl
│ │ │ ├── yaws_sup_restarts.erl
│ │ │ ├── yaws_ticker.erl
│ │ │ ├── yaws_trace.erl
│ │ │ ├── yaws_vdir.erl
│ │ │ ├── yaws_websockets.erl
│ │ │ ├── yaws_xmlrpc.erl
│ │ │ └── yaws_zlib.erl
│ │ └── vsn.mk
│ ├── yaws-revert-broken-utf8-decoding.patch
│ ├── yaws-setup.txt
│ └── ycsb/
│ ├── .gitignore
│ ├── BUILD
│ ├── CHANGELOG
│ ├── LICENSE.txt
│ ├── NOTICE.txt
│ ├── README
│ ├── bin/
│ │ ├── ycsb
│ │ └── ycsb.sh
│ ├── checkstyle.xml
│ ├── core/
│ │ ├── .gitignore
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── yahoo/
│ │ │ └── ycsb/
│ │ │ ├── BasicDB.java
│ │ │ ├── ByteArrayByteIterator.java
│ │ │ ├── ByteIterator.java
│ │ │ ├── Client.java
│ │ │ ├── CommandLine.java
│ │ │ ├── DB.java
│ │ │ ├── DBException.java
│ │ │ ├── DBFactory.java
│ │ │ ├── DBWrapper.java
│ │ │ ├── InputStreamByteIterator.java
│ │ │ ├── RandomByteIterator.java
│ │ │ ├── StringByteIterator.java
│ │ │ ├── TerminatorThread.java
│ │ │ ├── UnknownDBException.java
│ │ │ ├── Utils.java
│ │ │ ├── Workload.java
│ │ │ ├── WorkloadException.java
│ │ │ ├── generator/
│ │ │ │ ├── ConstantIntegerGenerator.java
│ │ │ │ ├── CounterGenerator.java
│ │ │ │ ├── DiscreteGenerator.java
│ │ │ │ ├── ExponentialGenerator.java
│ │ │ │ ├── FileGenerator.java
│ │ │ │ ├── Generator.java
│ │ │ │ ├── HistogramGenerator.java
│ │ │ │ ├── HotspotIntegerGenerator.java
│ │ │ │ ├── IntegerGenerator.java
│ │ │ │ ├── ScrambledZipfianGenerator.java
│ │ │ │ ├── SkewedLatestGenerator.java
│ │ │ │ ├── UniformGenerator.java
│ │ │ │ ├── UniformIntegerGenerator.java
│ │ │ │ └── ZipfianGenerator.java
│ │ │ ├── measurements/
│ │ │ │ ├── Measurements.java
│ │ │ │ ├── OneMeasurement.java
│ │ │ │ ├── OneMeasurementHistogram.java
│ │ │ │ ├── OneMeasurementTimeSeries.java
│ │ │ │ └── exporter/
│ │ │ │ ├── JSONMeasurementsExporter.java
│ │ │ │ ├── MeasurementsExporter.java
│ │ │ │ └── TextMeasurementsExporter.java
│ │ │ └── workloads/
│ │ │ ├── ConstantOccupancyWorkload.java
│ │ │ └── CoreWorkload.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── yahoo/
│ │ └── ycsb/
│ │ └── TestByteIterator.java
│ ├── distribution/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── assembly/
│ │ └── distribution.xml
│ ├── doc/
│ │ ├── coreproperties.html
│ │ ├── coreworkloads.html
│ │ ├── dblayer.html
│ │ ├── index.html
│ │ ├── javadoc/
│ │ │ ├── allclasses-frame.html
│ │ │ ├── allclasses-noframe.html
│ │ │ ├── com/
│ │ │ │ └── yahoo/
│ │ │ │ └── ycsb/
│ │ │ │ ├── BasicDB.html
│ │ │ │ ├── Client.html
│ │ │ │ ├── CounterGenerator.html
│ │ │ │ ├── DB.html
│ │ │ │ ├── DBException.html
│ │ │ │ ├── DBFactory.html
│ │ │ │ ├── DBWrapper.html
│ │ │ │ ├── DiscreteGenerator.html
│ │ │ │ ├── FindGoodAB.html
│ │ │ │ ├── FindGoodScrambleVector.html
│ │ │ │ ├── Generator.html
│ │ │ │ ├── IntegerGenerator.html
│ │ │ │ ├── Measurements.html
│ │ │ │ ├── OneMeasurement.html
│ │ │ │ ├── OneMeasurementHistogram.html
│ │ │ │ ├── OneMeasurementTimeSeries.html
│ │ │ │ ├── ScrambledZipfianGenerator.html
│ │ │ │ ├── SkewedLatestGenerator.html
│ │ │ │ ├── TestCollisions.html
│ │ │ │ ├── TestExpandedZipfian.html
│ │ │ │ ├── TestZipfian.html
│ │ │ │ ├── UniformGenerator.html
│ │ │ │ ├── UniformIntegerGenerator.html
│ │ │ │ ├── UnknownDBException.html
│ │ │ │ ├── Utils.html
│ │ │ │ ├── Workload.html
│ │ │ │ ├── WorkloadException.html
│ │ │ │ ├── ZipfianGenerator.html
│ │ │ │ ├── db/
│ │ │ │ │ ├── CassandraClient.html
│ │ │ │ │ ├── HBaseClient.html
│ │ │ │ │ ├── ShardClient.html
│ │ │ │ │ ├── SherpaClient.html
│ │ │ │ │ ├── package-frame.html
│ │ │ │ │ ├── package-summary.html
│ │ │ │ │ └── package-tree.html
│ │ │ │ ├── package-frame.html
│ │ │ │ ├── package-summary.html
│ │ │ │ ├── package-tree.html
│ │ │ │ └── workloads/
│ │ │ │ ├── CoreWorkload.html
│ │ │ │ ├── package-frame.html
│ │ │ │ ├── package-summary.html
│ │ │ │ └── package-tree.html
│ │ │ ├── constant-values.html
│ │ │ ├── deprecated-list.html
│ │ │ ├── help-doc.html
│ │ │ ├── index-all.html
│ │ │ ├── index.html
│ │ │ ├── overview-frame.html
│ │ │ ├── overview-summary.html
│ │ │ ├── overview-tree.html
│ │ │ ├── package-list
│ │ │ ├── serialized-form.html
│ │ │ └── stylesheet.css
│ │ ├── parallelclients.html
│ │ ├── tipsfaq.html
│ │ └── workload.html
│ ├── pom.xml
│ ├── scalaris/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── yahoo/
│ │ └── ycsb/
│ │ └── db/
│ │ └── ScalarisClient.java
│ └── workloads/
│ ├── workloada
│ ├── workloadb
│ ├── workloadc
│ ├── workloadd
│ ├── workloade
│ └── workloadf
├── cpp-api/
│ ├── .clang-format
│ ├── .gitignore
│ ├── Makefile.in
│ ├── include/
│ │ ├── connection.hpp
│ │ ├── converter.hpp
│ │ ├── exceptions.hpp
│ │ ├── json/
│ │ │ ├── json-forwards.h
│ │ │ └── json.h
│ │ ├── module.modulemap
│ │ ├── rbr.hpp
│ │ ├── req_list.hpp
│ │ ├── routing_table.hpp
│ │ ├── ssl-connection.hpp
│ │ ├── tcp-connection.hpp
│ │ └── transaction_single_op.hpp
│ ├── src/
│ │ ├── cli.cpp
│ │ ├── connection.cpp
│ │ ├── jsoncpp.cpp
│ │ ├── routing_table.cpp
│ │ ├── ssl-connection.cpp
│ │ └── tcp-connection.cpp
│ └── test/
│ ├── connection.cpp
│ ├── keep_alive.cpp
│ ├── rbr.cpp
│ ├── routing_table.cpp
│ ├── ssl-connection.cpp
│ ├── ssl-routing_table.cpp
│ ├── ssl-transaction_single_op.cpp
│ └── transaction_single_op.cpp
├── data/
│ └── .gitignore
├── doc/
│ ├── .gitignore
│ └── overview.edoc
├── docroot/
│ ├── .gitignore
│ ├── api/
│ │ ├── autoscale.yaws
│ │ ├── dht_raw.yaws
│ │ ├── monitor.yaws
│ │ ├── rbr.yaws
│ │ ├── rdht.yaws
│ │ ├── rt.yaws
│ │ ├── tx.yaws
│ │ ├── vm.yaws
│ │ └── yaws_handler.hrl
│ ├── bench.yaws
│ ├── dc.js
│ ├── dc.yaws
│ ├── dcMap.yaws
│ ├── debug.css
│ ├── debug.js
│ ├── debug.yaws
│ ├── documentation.yaws
│ ├── ext-all.css
│ ├── ext-all.js
│ ├── ext-base.js
│ ├── flot/
│ │ ├── API.txt
│ │ ├── LICENSE.txt
│ │ └── VERSION
│ ├── gossip.yaws
│ ├── graphs/
│ │ └── .gitignore
│ ├── icons/
│ │ └── .gitignore
│ ├── ie55-.css
│ ├── images/
│ │ └── default/
│ │ ├── dd/
│ │ │ └── .gitignore
│ │ ├── grid/
│ │ │ └── .gitignore
│ │ ├── panel/
│ │ │ └── .gitignore
│ │ └── tree/
│ │ └── .gitignore
│ ├── index.yaws
│ ├── indexed-ring.yaws
│ ├── jsonrpc.yaws
│ ├── local.yaws
│ ├── logger.yaws
│ ├── main.css
│ ├── monitor_client.yaws
│ ├── monitor_ring.yaws
│ ├── node.yaws
│ ├── plot_ring.js
│ ├── processinfo.yaws
│ ├── processtree.yaws
│ ├── ring.yaws
│ ├── tablesort/
│ │ └── blue/
│ │ └── style.css
│ ├── vivaldi.yaws
│ └── vivaldiMap.yaws
├── include/
│ ├── .gitignore
│ ├── atom_ext.hrl
│ ├── client_types.hrl
│ ├── gen_component.hrl
│ ├── lookup.hrl
│ ├── record_helpers.hrl
│ ├── rt.hrl.in
│ ├── rt_chord.hrl
│ ├── rt_frt.hrl
│ ├── rt_gfrt.hrl
│ ├── rt_simple.hrl
│ ├── scalaris.hrl
│ └── types.hrl
├── java-api/
│ ├── .classpath
│ ├── .gitignore
│ ├── .project
│ ├── .settings/
│ │ ├── org.eclipse.jdt.core.prefs
│ │ └── org.eclipse.jdt.ui.prefs
│ ├── Doxyfile
│ ├── README
│ ├── build.xml
│ ├── doc-contrib/
│ │ ├── apache_commons_cli/
│ │ │ └── package-list
│ │ ├── javase6/
│ │ │ └── package-list
│ │ └── jinterface/
│ │ └── package-list
│ ├── lib/
│ │ ├── .gitignore
│ │ ├── OtpErlang-1.6.1.jar
│ │ ├── ant_doxygen.jar
│ │ └── jakarta-commons-cli-1.2.jar
│ ├── maven_git_hook.sh
│ ├── pom.xml
│ ├── scalaris-java.conf.in
│ ├── scalaris-java.conf.sample
│ ├── scalaris.in
│ ├── src/
│ │ ├── de/
│ │ │ └── zib/
│ │ │ ├── scalaris/
│ │ │ │ ├── AbortException.java
│ │ │ │ ├── AbstractTransaction.java
│ │ │ │ ├── Benchmark.java
│ │ │ │ ├── CommonErlangObjects.java
│ │ │ │ ├── Connection.java
│ │ │ │ ├── ConnectionException.java
│ │ │ │ ├── ConnectionFactory.java
│ │ │ │ ├── ConnectionPolicy.java
│ │ │ │ ├── ConnectionPool.java
│ │ │ │ ├── DefaultConnectionPolicy.java
│ │ │ │ ├── DeleteResult.java
│ │ │ │ ├── EmptyListException.java
│ │ │ │ ├── ErlangValue.java
│ │ │ │ ├── ErlangValueJSONBase.java
│ │ │ │ ├── ErlangValueJSONInterface.java
│ │ │ │ ├── ErlangValueJSONToBean.java
│ │ │ │ ├── ErlangValueJSONToMap.java
│ │ │ │ ├── FixedNodeConnectionPolicy.java
│ │ │ │ ├── KeyChangedException.java
│ │ │ │ ├── LeastFailedNodesComparator.java
│ │ │ │ ├── LeastRecentlyFailedNodesComparator.java
│ │ │ │ ├── Main.java
│ │ │ │ ├── Monitor.java
│ │ │ │ ├── NodeDiscovery.java
│ │ │ │ ├── NotAListException.java
│ │ │ │ ├── NotANumberException.java
│ │ │ │ ├── NotFoundException.java
│ │ │ │ ├── PeerNode.java
│ │ │ │ ├── ReplicatedDHT.java
│ │ │ │ ├── RequestList.java
│ │ │ │ ├── ResultList.java
│ │ │ │ ├── RoundRobinConnectionPolicy.java
│ │ │ │ ├── RoutingTable.java
│ │ │ │ ├── Scalaris.java
│ │ │ │ ├── ScalarisVM.java
│ │ │ │ ├── TimeoutException.java
│ │ │ │ ├── Transaction.java
│ │ │ │ ├── TransactionSingleOp.java
│ │ │ │ ├── UnknownException.java
│ │ │ │ ├── examples/
│ │ │ │ │ ├── ErlangValueBitString.java
│ │ │ │ │ ├── ErlangValueFastString.java
│ │ │ │ │ ├── FastStringBenchmark.java
│ │ │ │ │ ├── TransactionReadExample.java
│ │ │ │ │ ├── TransactionReadWriteExample.java
│ │ │ │ │ ├── TransactionSingleOpReadExample.java
│ │ │ │ │ ├── TransactionSingleOpWriteExample.java
│ │ │ │ │ ├── TransactionWriteExample.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── executor/
│ │ │ │ │ ├── ScalarisChangeListOp1.java
│ │ │ │ │ ├── ScalarisChangeListOp2.java
│ │ │ │ │ ├── ScalarisIncrementOp1.java
│ │ │ │ │ ├── ScalarisIncrementOp2.java
│ │ │ │ │ ├── ScalarisListAppendRemoveOp1.java
│ │ │ │ │ ├── ScalarisListAppendRemoveOp2.java
│ │ │ │ │ ├── ScalarisOp.java
│ │ │ │ │ ├── ScalarisOpExecutor.java
│ │ │ │ │ ├── ScalarisReadOp.java
│ │ │ │ │ ├── ScalarisSingleOpExecutor.java
│ │ │ │ │ ├── ScalarisTxOpExecutor.java
│ │ │ │ │ └── ScalarisWriteOp.java
│ │ │ │ ├── jmx/
│ │ │ │ │ ├── MonitorNode.java
│ │ │ │ │ ├── MonitorNodeMBean.java
│ │ │ │ │ ├── MonitorService.java
│ │ │ │ │ └── MonitorServiceMBean.java
│ │ │ │ ├── operations/
│ │ │ │ │ ├── AddDelOnListOp.java
│ │ │ │ │ ├── AddOnNrOp.java
│ │ │ │ │ ├── CommitOp.java
│ │ │ │ │ ├── Operation.java
│ │ │ │ │ ├── PartialReadOp.java
│ │ │ │ │ ├── ReadOp.java
│ │ │ │ │ ├── ReadRandomFromListOp.java
│ │ │ │ │ ├── ReadSublistOp.java
│ │ │ │ │ ├── TestAndSetOp.java
│ │ │ │ │ ├── TransactionOperation.java
│ │ │ │ │ ├── TransactionSingleOpOperation.java
│ │ │ │ │ └── WriteOp.java
│ │ │ │ └── package-info.java
│ │ │ └── tools/
│ │ │ ├── CircularByteArrayOutputStream.java
│ │ │ ├── LinkedMultiHashMap.java
│ │ │ ├── MultiHashMap.java
│ │ │ ├── MultiMap.java
│ │ │ ├── PropertyLoader.java
│ │ │ └── package-info.java
│ │ └── scalaris.properties
│ ├── test/
│ │ ├── de/
│ │ │ └── zib/
│ │ │ ├── scalaris/
│ │ │ │ ├── ConnectionTest.java
│ │ │ │ ├── DefaultConnectionPolicyTest.java
│ │ │ │ ├── ErlangValueTest.java
│ │ │ │ ├── InterOpTest.java
│ │ │ │ ├── MonitorTest.java
│ │ │ │ ├── PeerNodeTest.java
│ │ │ │ ├── ReplicatedDHTTest.java
│ │ │ │ ├── ScalarisTest.java
│ │ │ │ ├── ScalarisVMTest.java
│ │ │ │ ├── TransactionSingleOpTest.java
│ │ │ │ └── TransactionTest.java
│ │ │ └── tools/
│ │ │ ├── PropertyLoaderTest.java
│ │ │ └── test.properties
│ │ └── scalaris.properties
│ └── test-lib/
│ ├── ant-junit-1.9.0.jar
│ ├── hamcrest-core-1.3.jar
│ ├── jetty-util-8.0.4.v20111024.jar
│ └── junit-4.11.jar
├── log/
│ └── .gitignore
├── m4/
│ ├── ax_boost_asio.m4
│ ├── ax_boost_base.m4
│ ├── ax_boost_program_options.m4
│ ├── ax_boost_regex.m4
│ ├── ax_boost_system.m4
│ ├── ax_boost_test_exec_monitor.m4
│ ├── ax_boost_unit_test_framework.m4
│ ├── ax_check_compile_flag.m4
│ ├── ax_check_openssl.m4
│ ├── ax_cxx_compile_stdcxx.m4
│ └── ax_cxx_compile_stdcxx_14.m4
├── priv/
│ └── .gitignore
├── python-api/
│ ├── .gitignore
│ ├── Scalaris.e4p
│ ├── doc/
│ │ └── .gitignore
│ ├── epydoc.html.cfg
│ ├── epydoc.pdf.cfg
│ ├── scalaris.in
│ ├── scalaris.py
│ ├── scalaris_bench.py
│ ├── scalaris_client.py
│ ├── scalaris_interop_test.py
│ ├── scalaris_test.py
│ ├── scalaris_userdevguide_jsontrace.py
│ └── setup.py
├── ruby-api/
│ ├── .gitignore
│ ├── scalaris.gemspec
│ ├── scalaris.in
│ ├── scalaris.rb
│ ├── scalaris_client.rb
│ ├── scalaris_interop_test.rb
│ └── scalaris_test.rb
├── src/
│ ├── .gitignore
│ ├── admin.erl
│ ├── admin_first.erl
│ ├── api_autoscale.erl
│ ├── api_dht.erl
│ ├── api_dht_raw.erl
│ ├── api_monitor.erl
│ ├── api_mr.erl
│ ├── api_rdht.erl
│ ├── api_ring.erl
│ ├── api_rt.erl
│ ├── api_tx.erl
│ ├── api_tx.hrl
│ ├── api_txc.erl
│ ├── api_vm.erl
│ ├── autoscale.erl
│ ├── autoscale_server.erl
│ ├── bench.erl
│ ├── bench_fun.erl
│ ├── bench_load.erl
│ ├── bench_server.erl
│ ├── bulkowner.erl
│ ├── cloud_beh.erl
│ ├── cloud_local.erl
│ ├── cloud_ssh.erl
│ ├── comm.erl
│ ├── comm_layer/
│ │ ├── comm_connection.erl
│ │ ├── comm_logger.erl
│ │ ├── comm_server.erl
│ │ ├── comm_ssl_acceptor.erl
│ │ ├── comm_stats.erl
│ │ └── comm_tcp_acceptor.erl
│ ├── config.erl
│ ├── configure.erl
│ ├── cp/
│ │ ├── l_on_cseq.erl
│ │ ├── lease_checker.erl
│ │ ├── lease_checker2.erl
│ │ ├── lease_list.erl
│ │ ├── lease_recover.erl
│ │ ├── leases.erl
│ │ └── rm_leases.erl
│ ├── crdt/
│ │ ├── crdt_acceptor.erl
│ │ ├── crdt_on_cseq.erl
│ │ ├── crdt_proposer.erl
│ │ ├── crdt_wait_free_wrapper.erl
│ │ ├── gcounter_on_cseq.erl
│ │ ├── gla_acceptor.erl
│ │ ├── gla_proposer.erl
│ │ ├── pncounter_on_cseq.erl
│ │ ├── types/
│ │ │ ├── crdt.erl
│ │ │ ├── crdt_beh.erl
│ │ │ ├── crdt_beh.hrl
│ │ │ ├── gcounter.erl
│ │ │ ├── gset.erl
│ │ │ ├── optorset.erl
│ │ │ └── pncounter.erl
│ │ ├── zheng_acceptor.erl
│ │ └── zheng_proposer.erl
│ ├── cyclon_cache.erl
│ ├── db_backend_beh.erl
│ ├── db_bitcask.erl
│ ├── db_bitcask_merge_extension.erl
│ ├── db_dht.erl
│ ├── db_entry.erl
│ ├── db_ets.erl
│ ├── db_hanoidb.erl
│ ├── db_mnesia.erl
│ ├── db_prbr.erl
│ ├── db_toke.erl
│ ├── db_util.erl
│ ├── dc_centroids.erl
│ ├── dc_clustering.erl
│ ├── debug.erl
│ ├── dht_node.erl
│ ├── dht_node_cache.erl
│ ├── dht_node_db_cache.erl
│ ├── dht_node_extensions.erl
│ ├── dht_node_join.erl
│ ├── dht_node_join_recover.erl
│ ├── dht_node_lookup.erl
│ ├── dht_node_monitor.erl
│ ├── dht_node_move.erl
│ ├── dht_node_reregister.erl
│ ├── dht_node_state.erl
│ ├── dn_cache.erl
│ ├── fd.erl
│ ├── fd_hbs.erl
│ ├── fix_queue.erl
│ ├── ganglia.erl
│ ├── gen_component.erl
│ ├── gossip.erl
│ ├── gossip_beh.erl
│ ├── gossip_cyclon.erl
│ ├── gossip_cyclon_feeder.erl
│ ├── gossip_load.erl
│ ├── gossip_load_beh.erl
│ ├── gossip_load_default.erl
│ ├── gossip_vivaldi.erl
│ ├── histogram.erl
│ ├── histogram_rt.erl
│ ├── intervals.erl
│ ├── json/
│ │ ├── api_json.erl
│ │ ├── api_json_autoscale.erl
│ │ ├── api_json_dht_raw.erl
│ │ ├── api_json_monitor.erl
│ │ ├── api_json_rbr.erl
│ │ ├── api_json_rdht.erl
│ │ ├── api_json_ring.erl
│ │ ├── api_json_rt.erl
│ │ ├── api_json_tx.erl
│ │ ├── api_json_vm.erl
│ │ ├── api_jsonclient.erl
│ │ ├── bench_json_helper.erl
│ │ └── jsonclient.erl
│ ├── lb_active.erl
│ ├── lb_active_beh.erl
│ ├── lb_active_directories.erl
│ ├── lb_active_gossip_load_metric.erl
│ ├── lb_active_gossip_request_metric.erl
│ ├── lb_active_karger.erl
│ ├── lb_common.erl
│ ├── lb_info.erl
│ ├── lb_op.erl
│ ├── lb_psv_beh.erl
│ ├── lb_psv_beh.hrl
│ ├── lb_psv_gossip.erl
│ ├── lb_psv_simple.erl
│ ├── lb_psv_split.erl
│ ├── lb_stats.erl
│ ├── log.erl
│ ├── log4erl_ctpal_appender.erl
│ ├── math_pos.erl
│ ├── mathlib.erl
│ ├── mgmt_server.erl
│ ├── modr.erl
│ ├── monitor.erl
│ ├── monitor_perf.erl
│ ├── mr.erl
│ ├── mr_master.erl
│ ├── mr_master_state.erl
│ ├── mr_state.erl
│ ├── msg_delay.erl
│ ├── msg_queue.erl
│ ├── mymaps.erl
│ ├── nifs/
│ │ ├── clocks.cpp
│ │ └── prime.cpp
│ ├── node.erl
│ ├── node_details.erl
│ ├── nodelist.erl
│ ├── paxos/
│ │ ├── acceptor.erl
│ │ ├── acceptor_state.hrl
│ │ ├── learner.erl
│ │ ├── learner_state.hrl
│ │ ├── proposer.erl
│ │ └── proposer_state.hrl
│ ├── pdb.erl
│ ├── pdb_beh.erl
│ ├── pdb_ets.erl
│ ├── pid_groups.erl
│ ├── prime.erl
│ ├── proto_sched.erl
│ ├── quorum.erl
│ ├── randoms.erl
│ ├── rbr/
│ │ ├── inc_on_cseq.erl
│ │ ├── json_on_cseq.erl
│ │ ├── kv_on_cseq.erl
│ │ ├── pr.erl
│ │ ├── prbr.erl
│ │ ├── rbrcseq.erl
│ │ └── replication.erl
│ ├── rm_beh.erl
│ ├── rm_beh.hrl
│ ├── rm_chord.erl
│ ├── rm_loop.erl
│ ├── rm_tman.erl
│ ├── rm_tman_state.erl
│ ├── rrd.erl
│ ├── rrepair/
│ │ ├── art.erl
│ │ ├── bloom.erl
│ │ ├── cbf.erl
│ │ ├── hfs_beh.erl
│ │ ├── hfs_lhsp.erl
│ │ ├── hfs_plain.erl
│ │ ├── iblt.erl
│ │ ├── merkle_tree.erl
│ │ ├── rr_recon.erl
│ │ ├── rr_recon_stats.erl
│ │ ├── rr_resolve.erl
│ │ └── rrepair.erl
│ ├── rt_beh.erl
│ ├── rt_beh.hrl
│ ├── rt_chord.erl
│ ├── rt_frt.erl
│ ├── rt_loop.erl
│ ├── rt_simple.erl
│ ├── scalaris.erl
│ ├── service_per_vm.erl
│ ├── slide_beh.erl
│ ├── slide_chord.erl
│ ├── slide_leases.erl
│ ├── slide_op.erl
│ ├── snapshot.erl
│ ├── snapshot_leader.erl
│ ├── snapshot_leader_state.erl
│ ├── snapshot_state.erl
│ ├── statistics.erl
│ ├── sup.erl
│ ├── sup_comm_layer.erl
│ ├── sup_dht_node.erl
│ ├── sup_dht_node_core.erl
│ ├── sup_dht_node_core_tx.erl
│ ├── sup_paxos.erl
│ ├── sup_scalaris.erl
│ ├── sup_wpool.erl
│ ├── sup_yaws.erl
│ ├── time/
│ │ └── clocks.erl
│ ├── top.erl
│ ├── trace_mpath.erl
│ ├── tracer.erl
│ ├── transactions/
│ │ ├── rdht_tx.erl
│ │ ├── rdht_tx_add_del_on_list.erl
│ │ ├── rdht_tx_add_on_nr.erl
│ │ ├── rdht_tx_read.erl
│ │ ├── rdht_tx_read_state.hrl
│ │ ├── rdht_tx_test_and_set.erl
│ │ ├── rdht_tx_write.erl
│ │ ├── tx_item_state.hrl
│ │ ├── tx_op_beh.erl
│ │ ├── tx_state.hrl
│ │ ├── tx_tlog.erl
│ │ ├── tx_tm_rtm.erl
│ │ └── tx_tp.erl
│ ├── tx/
│ │ ├── tx_tm.erl
│ │ └── txid_on_cseq.erl
│ ├── uid.erl
│ ├── util.erl
│ ├── vivaldi_latency.erl
│ ├── webhelpers.erl
│ ├── wpool.erl
│ └── wpool_worker.erl
├── test/
│ ├── .gitignore
│ ├── 0001-rt_chord-reduce-key-size-to-16-bits-for-better-debug.patch
│ ├── all_TESTS.cfg
│ ├── all_with_cover_TESTS.cfg
│ ├── api_json_SUITE.erl
│ ├── api_tx_SUITE.erl
│ ├── api_tx_SUITE.hrl
│ ├── api_tx_concurrent_SUITE.erl
│ ├── api_tx_proto_sched_SUITE.erl
│ ├── art_SUITE.erl
│ ├── autoconf_SUITE.erl
│ ├── banking_account_SUITE.erl
│ ├── benchmark_SUITE.erl
│ ├── bloom_SUITE.erl
│ ├── bloom_SUITE.hrl
│ ├── buildbot_TESTS.cfg
│ ├── bulkowner_SUITE.erl
│ ├── cbf_SUITE.erl
│ ├── churn_SUITE.erl
│ ├── collect_module_info_SUITE.erl
│ ├── consistent_lookup_chord_SUITE.erl
│ ├── consistent_lookup_leases_SUITE.erl
│ ├── crash_recovery_SUITE.erl
│ ├── crdt_SUITE.erl
│ ├── db_backend_SUITE.hrl
│ ├── db_bitcask_SUITE.erl
│ ├── db_dht_SUITE.erl
│ ├── db_ets_SUITE.erl
│ ├── db_generator.erl
│ ├── db_generator_SUITE.erl
│ ├── db_hanoidb_SUITE.erl
│ ├── db_mnesia_SUITE.erl
│ ├── db_toke_SUITE.erl
│ ├── dc_centroids_SUITE.erl
│ ├── dc_clustering_SUITE.erl
│ ├── default_TESTS.cfg
│ ├── dht_node_move_SUITE.erl
│ ├── dht_node_move_SUITE.hrl
│ ├── dht_node_move_proto_sched_SUITE.erl
│ ├── dn_cache_SUITE.erl
│ ├── erl_id_trans.erl
│ ├── gossip_SUITE.erl
│ ├── gossip_TESTS.cfg
│ ├── gossip_cyclon_SUITE.erl
│ ├── gossip_types_TESTS.cfg
│ ├── gossip_vivaldi_SUITE.erl
│ ├── histogram_SUITE.erl
│ ├── histogram_rt_SUITE.erl
│ ├── iblt_SUITE.erl
│ ├── intervals_SUITE.erl
│ ├── join_leave_SUITE.erl
│ ├── join_leave_SUITE.hrl
│ ├── join_leave_proto_sched_SUITE.erl
│ ├── json_on_cseq_SUITE.erl
│ ├── l_on_cseq_SUITE.erl
│ ├── lease_helper.erl
│ ├── leases_TESTS.cfg
│ ├── leases_proto_sched_SUITE.erl
│ ├── math_pos_SUITE.erl
│ ├── mathlib_SUITE.erl
│ ├── measure_util.erl
│ ├── memtest_SUITE.erl
│ ├── merkle_tree_SUITE.erl
│ ├── mockup.erl
│ ├── mockup_dht_node.erl
│ ├── mockup_l_on_cseq.erl
│ ├── mockup_l_on_cseq_SUITE.erl
│ ├── mr_SUITE.erl
│ ├── mr_SUITE.hrl
│ ├── mr_proto_sched_SUITE.erl
│ ├── node_details_SUITE.erl
│ ├── nodelist_SUITE.erl
│ ├── non_deterministic_TESTS.cfg
│ ├── paxos_SUITE.erl
│ ├── performance_SUITE.erl
│ ├── performance_TESTS.cfg
│ ├── prbr_SUITE.erl
│ ├── proto_sched_SUITE.erl
│ ├── proto_sched_TESTS.cfg
│ ├── random_bias.erl
│ ├── random_bias_SUITE.erl
│ ├── rbr_interleaving_SUITE.erl
│ ├── recover_SUITE.erl
│ ├── recover_mnesia_SUITE.erl
│ ├── repeated_TESTS.cfg
│ ├── rm_SUITE.erl
│ ├── rm_leases_SUITE.erl
│ ├── rr_eval_admin.erl
│ ├── rr_eval_export.erl
│ ├── rr_eval_point.erl
│ ├── rr_recon_performance_SUITE.erl
│ ├── rr_records.hrl
│ ├── rrd_SUITE.erl
│ ├── rrepair_SUITE.erl
│ ├── rrepair_SUITE.hrl
│ ├── rrepair_TESTS.cfg
│ ├── rrepair_proto_sched_SUITE.erl
│ ├── rt_SUITE.erl
│ ├── rt_SUITE_rt_chord.erl
│ ├── rt_SUITE_rt_frt.erl
│ ├── rt_SUITE_rt_simple.erl
│ ├── runner.erl
│ ├── scalaris.coverspec
│ ├── scalaris_cth.erl
│ ├── scalaris_cth_SUITE.erl
│ ├── skipped_TESTS.cfg
│ ├── slide_leases_SUITE.erl
│ ├── snapshot_SUITE.erl
│ ├── ssl_TESTS.cfg
│ ├── tester.erl
│ ├── tester.hrl
│ ├── tester_SUITE.erl
│ ├── tester_collect_function_info.erl
│ ├── tester_global_state.erl
│ ├── tester_helper.erl
│ ├── tester_parse_state.erl
│ ├── tester_randomized_TESTS.cfg
│ ├── tester_type_checker.erl
│ ├── tester_value_collector.erl
│ ├── tester_value_creator.erl
│ ├── tester_value_creator_scalaris.erl
│ ├── tester_variable_substitutions.erl
│ ├── tx_tm_rtm_SUITE.erl
│ ├── type_check_SUITE.erl
│ ├── type_check_TESTS.cfg
│ ├── unittest.hrl
│ ├── unittest_global_state.erl
│ ├── unittest_helper.erl
│ ├── unittest_helper_SUITE.erl
│ └── util_SUITE.erl
└── user-dev-guide/
├── .gitignore
├── Makefile
├── dev-dirs.tex
├── dev-hints.tex
├── dev-infrastructure.tex
├── dev-java.tex
├── dev-join.tex
├── dev-overlay.tex
├── dev-rrepair.tex
├── dev-slide.tex
├── dev-tx.tex
├── dht_node_join_phases2.tikz
├── etextools.sty
├── etoolbox.sty
├── gen_component.tex
├── latex-col.awk
├── letltxmacro.sty
├── main.tex
├── pdfoptions.tex
├── rrepair/
│ ├── .gitignore
│ ├── Makefile
│ ├── bloom_sd_uml.pic
│ ├── key_sync_s.pic
│ ├── merkle_sd_uml.pic
│ ├── sequence.pic
│ └── trivial_sd_uml.pic
├── slide_send_to_pred-2.0.tikz
├── slide_send_to_succ-2.0.tikz
├── supervision.dia
├── tikz_footer.tex
├── tikz_header.tex
├── user-config.tex
├── user-install.tex
├── user-intro.tex
├── user-systemuse.tex
├── user-tests.tex
└── user-troubleshoot.tex
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.pdf -crlf -diff
================================================
FILE: .gitignore
================================================
/Makefile
/Emakefile
/.Emakefile
/config.status
/ct_run.*ct*@*
/ct_run.nonode*
/all_runs.html
/index.html
/.externalToolBuilders
/.Makefile.swp
/.make-doc
/variables-ct*@*
/variables-*_ct*@*
/variables-nonode@nohost
/erl_crash.dump
/autom4te.cache
/aclocal.m4
*.beam
*~
/ct_log_cache
/result_increment_10_1000.txt
/result_increment_1_10000.txt
/result_read_10_10000.txt
/result_read_1_100000.txt
/Thumbs.db
/python3-api
/TAGS*
/*.log
ebin/
*.swp
*.swo
.DS_Store
Session.vim
.vimrc
/src/user_default.erl
/ct_default.css
/jquery-latest.js
/jquery.tablesorter.min.js
/contrib/toke
/contrib/erlang_js
contrib/slurm/slurm-*.out
/java-api/target
/cpp-api/scalaris
/cpp-api/ssl-tests
/.maven
/priv/*.so
/priv/*.so.dSYM/
/contrib/log4erl/src/log4erl_lex.erl
/contrib/log4erl/src/log4erl_parser.erl
/cpp-api/tests.dSYM/
/cpp-api/compile_commands.json
/bin/jsonclient
================================================
FILE: .project
================================================
Scalaris
org.python.pydev.PyDevBuilder
net.sourceforge.texlipse.builder.TexlipseBuilder
org.erlide.core.erlbuilder
net.sourceforge.texlipse.builder.TexlipseNature
org.erlide.core.erlnature
org.python.pydev.pythonNature
1489147896928
10
org.eclipse.ui.ide.multiFilter
1.0-name-matches-false-false-java-api
1489147896931
14
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-*ct*@*
1489147896934
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-ct_*.log
1489147896937
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-TAGS*
1489147896939
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-all_runs.html
1489147896942
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-ct_default.css
1489147896944
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-jquery-latest.js
1489147896946
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-jquery.tablesorter.min.js
1489147896948
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-ct_log_cache
1489147896950
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-config.log
1489147896952
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-config.status
1489147896954
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-index.html
1318159459801
contrib
10
org.eclipse.ui.ide.multiFilter
1.0-name-matches-false-false-wikipedia
1378048114063
test
6
org.eclipse.ui.ide.multiFilter
1.0-name-matches-true-false-*.beam
================================================
FILE: .pydevproject
================================================
Default
python 2.7
================================================
FILE: .settings/org.eclipse.core.resources.prefs
================================================
#Wed Jul 28 11:29:12 CEST 2010
eclipse.preferences.version=1
encoding//user-dev-guide/main.tex=ISO-8859-1
================================================
FILE: .settings/org.erlide.core.prefs
================================================
backend_version=R16
compiler/raw={d, enable_debug}, {d, with_crypto_hash}, {d, with_rand}, {d, have_callback_support}, {d, with_maps}\n , {d, 'HAVE_ERLANG_SENDFILE'}, {d, 'HAVE_CRYPTO_HASH'}
eclipse.preferences.version=1
external_includes=
external_modules=
include_dirs=contrib/yaws/include;contrib/log4erl/include;include;
output_dir=ebin/eclipse
source_dirs=test;src;src/comm_layer;src/json;src/rbr;src/tx;src/transactions;src/rrepair;src/cp;src/paxos;
use_pathz=false
================================================
FILE: .settings/org.erlide.model.prefs
================================================
builderData=INTERNAL|compile|clean|test|
configType=INTERNAL
eclipse.preferences.version=1
================================================
FILE: .travis.yml
================================================
language: generic
matrix:
include:
- os: osx
osx_image: xcode11.4
addons:
homebrew:
packages:
- boost
- erlang
- python
- ant
- openssl
- os: linux
sudo: false
addons:
apt:
sources:
- boost-latest
packages:
- automake
- clang
- libboost-all-dev
- python3
- erlang
- erlang-dev
- ant
script:
- env | grep TRAVIS
- clang++ -v
- 'if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then CXX=clang++ ./configure --with-openssl=/usr/local/opt/openssl; fi'
- 'if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then CXX=clang++ ./configure; fi'
- touch TAGS.root TAGS.contrib
- make
- make cpp
- make python
- 'if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make python3; fi'
- make java
================================================
FILE: AUTHORS
================================================
Ufuk Celebi
Jens Fischer
Christian Hennig
Mikael Högqvist
Marie Hoffmann
Stefan Keidel
Nico Kruber
Maik Lange
Maximilian Michels
Monika Moser
Magnus Müller
Stefan Plantikow
Tanguy Racinet
Florian Schintke
Thorsten Schütt
Jan Skrzypczak
Jeroen Vlek
================================================
FILE: ChangeLog
================================================
Scalaris 0.9.0 (codename "Vriesea scalaris") - February 29, 2016
============================================================
(partly supported by the EU project IES Cities http://iescities.eu/)
Packaging:
- add a libscalaris-dev[el] package with the C++ API (rpm, deb)
- Maven: let Maven also create a source jar file for the Java-API
- Maven: allow proper snapshot versions for the maven repository at
https://scalaris-team.github.io/scalaris/maven
API:
- CPP-API: provide a new C++ client library
- DataNucleus: provide a new storage back-end for Scalaris
- add a Scalaris adapter for YCSB
- new functions in all APIs for generic routing table operations
Business Logic:
- rrepair: considerably improve the set reconciliation algorithms' performance
and run more processes in parallel
- rrepair: further reduce the reconciliation costs
- rrepair: re-use left-over failure probability from phase 1 for phase 2
- rrepair: increase accuracy in several formulaes of the set reconciliation
algorithms
- rrepair: support creating multiple Merkle trees for fewer message rounds
('rr_merkle_num_trees' configuration variable)
- rrepair: remove support for aligning bit sizes (no improvements there)
- transactions: speed up write ops when the transaction log already contains
a read op on the same key
- RM: optimise the traffic of state exchanges during ring maintenance
- RT: improve routing parallelism by handling more messages in the routing
process itself instead of inside the dht_node process
- RT: improve performance along the routing path
- support for dynamic replication factors given by the 'replication_factor'
configuration variable
- pid_groups: shuffle pids in find_a/1 for more better distributed (parallel)
requests
Infrastructure:
- pid_groups: group names are now atoms instead of strings
(allows faster access)
- scalarisctl: do not set any default Erlang scheduler flags (allow changes
through the ERL_SCHED_FLAGS environment variable)
- extend the example scripts for running Scalaris on a SLURM cluster
- add SLURM scripts for running Basho Bench
- use configure to select the routing table type (--with-rt=rt_chord)
- change hanoidb detection to "configure --enable-hanoidb=
"
- change erlang_js detection to "configure --enable-erlang-js="
- dht_node_monitor: switch messages on/off via configuration variable
'dht_node_monitor'
- msg_delay: remove extraneous error messages for trigger messages of killed
processes
- prbr: allow write_filter to return value to qwrite calling process
- update yaws to version 2.0.2
- support for Erlang R14B04 up to 18.2.3 and current otp master
Tests:
- allow running single test groups via "make :_GROUP"
Tools:
- gen_component: allow processes to provide their own start functions
- trace_mpath: write whole message of log_info to the tex output
Bugs:
- fix cleanup of some special cases with transactions
- fix several math issues and increase the math functions' performance
- fix some errors which occurred in large scale deployments
- fix several warnings reported by Coverity Scan
- fix numerous more bugs
Scalaris 0.8.2 - July 24, 2015
============================================================
(partly supported by the EU project IES Cities http://iescities.eu/)
Business Logic:
- rrepair: minor performance improvements
Bugs:
- rrepair: fix a rare crash due to hash collisions
- rrepair: fix calculation of the next MaxItemCount in the merkle tree
repair protocol (was one level behind)
- tests: fix rare crashes in some unit tests
- fix a few more minor bugs
Scalaris 0.8.1 - July 12, 2015
============================================================
(partly supported by the EU project IES Cities http://iescities.eu/)
Business Logic:
- rrepair: allow specifying the minimum number of hash bits to use
to create non-approximate algorithms
Bugs:
- rrepair: fix a badarith if rr_recon_version_bits is set to 'variable'
- rrepair: fix a bug in the accuracy of the evaluation
- fix two crashes in gossip
Scalaris 0.8.0 (codename "Picoides scalaris") - July 10, 2015
============================================================
(partly supported by the EU project IES Cities http://iescities.eu/
and the EIT ICT Labs project MCData)
Packaging:
- also install docs on Arch Linux
- fix lintian errors and warnings for Debian-based packages
- fix permissions on the log directory (owned by the 'scalaris' user)
and the config files (not owned by the 'scalaris' user anymore!)
- adapt packages for newer distributions
API:
- Java-API: integrate new OtpErlang library (1.5.12 from Erlang 17.4)
- Python-API: do not include a shebang with a pre-defined path to python
anymore
- Python-API: fix unclosed sockets in various tests
- Python-API: increase python{2,3} test speed
- Ruby-API: try to fallback to the normal json module if the gem is missing
- Ruby-API: considerably increase the ruby test speed
- remove the Publish/Subscribe API
Business Logic:
- rrepair: faster and more accurate bloom filter repair protocol
- rrepair: faster, more accurate and less bandwidth-consuming merkle tree
repair protocol
- rrepair: reduce memory footprint of merkle_tree
- rrepair: more accurate and less bandwidth-consuming trivial repair
protocol
- rrepair: add a new simple hash ('shash') algorithm
- rrepair: switch to (the more efficient) push-only resolve phase for
synchronisation
- rrepair: add replica repair algorithm evaluation scripts
- RM: faster cyclon cache integration, especially during node jumps
- comm_layer: envelops can be nested
- comm_layer: allow send options for comm:send_local/3 and msg_delay
(currently only ?quiet supported)
Infrastructure:
- FD: simplify the API, support envelopes and remove own cookie handling
- FD: extend the failure detector with generic notifications (not just
crashes) to subscribed nodes
- DB: add an (experimental) mnesia back-end
- DB: add an (experimental) hanoidb back-end
- DB: make the back-end configurable via the scalaris.cfg option
'db_backend'
- improve the speed of several utility functions
- scalarisctl: add '-l' parameter for specifying the logdir
- scalarisctl: do not use the '-s' parameter anymore, instead specify the
start type with the new '-t' parameter
- scalarisctl: allow starting several dht_nodes per vm with given keys via
the new parameter '-j'
- update yaws to version 1.99
- make "$HOME/.scalaris/log" the default log dir
- support for Erlang R14B04 up to 18.0.2 and current otp master
- add example scripts for running Scalaris on a SLURM cluster
- move sources to github: https://github.com/scalaris-team/scalaris
- new project homepage: http://scalaris.zib.de
Tests:
- reduce log spam in proto_sched tests and only print proto_sched results
when the tests fail
- extended and improved various test suites
Tools:
- proto_sched: support callbacks
- proto_sched: add support for user msg shepherds
- proto_sched: better error handling when sending messages to dead
(local) processes
- tester: add value creator and type checker for orddict:orddict()
- tester: full support for Erlang 18.0
- let 'make dialyzer' run over test as well and ignore some false-positives
for Erlang >= 18.0 using the '-dialyzer()' attribute
Bugs:
- slide: fix some race conditions with 'jump' operations
- JSON-API: fix test_and_set not working correctly inside req_list
- fix numerous more bugs
Scalaris 0.7.2 - October 23, 2014
============================================================
(partly supported by the EU project IES Cities http://iescities.eu/
and the EIT ICT Labs project MCData)
Packaging:
- fix ArchLinux packages with newest Java versions
Demonstrator "Wiki on Scalaris":
- fix the separate count key optimisation not using Scalaris' increment
operation
Business Logic:
- rrepair: let the trivial algorithm assume the worst case in order to always
meet the configured "recon probability of one error" (p1e)
- rrepair: fix the trivial algorithm having an effectively doubled p1e
- rrepair: fix the bloom algorithm having an effectively tripled p1e
- rrepair: allow disabling byte-alignment
Bugs:
- fix a few minor bugs
Scalaris 0.7.1 - September 30, 2014
============================================================
(partly supported by the EU project IES Cities http://iescities.eu/
and the EIT ICT Labs project MCData)
Packaging:
- add support for new distribution versions
- support systemd and SELinux
- include daemon for monitoring Scalaris through JMX
API:
- Java-API: integrate new OtpErlang library (1.5.10 from Erlang 17.3)
Demonstrator "Wiki on Scalaris":
- fix storing template back-links for magic words
- fix ARTICLE_COUNT partitioning with hashes
Business Logic:
- more robust (still experimental) support for active load balancing with
Karger and Ruhl's algorithm including more flexible "load" definitions
- rm_tman: less overhead by only sending unknown nodes to neighbours
- slide: better support for slide aborts
- node join: less overhead during joins, especially in setups with huge
lists of known nodes
- cyclon: move to new gossip framework
- vivaldi: move to new gossip framework
- monitor: move performance monitor to the basic_services group
(once per VM)
Infrastructure:
- several smaller performance optimisations
- support for Erlang R13B01 up to 17.3 and current otp master
Tests:
- some new unit tests and higher test coverage
Documentation:
- add rrepair sequence diagrams
Bugs:
- fix numerous bugs
Scalaris 0.7.0 (codename "Stauroderus scalaris") - April 28, 2014
============================================================
API:
- Java-API: integrate new OtpErlang library (1.5.9 from Erlang 17.0)
Demonstrator "Wiki on Scalaris" (supported by 4CaaSt http://www.4caast.eu/
and Contrail http://contrail-project.eu):
- add support for reading 7z dumps
Business Logic (partly supported by the EU project IES Cities http://iescities.eu/
and the EIT ICT Labs project MCData):
- add an experimental Map-Reduce framework on top of Scalaris
- add experimental support for active load balancing with Karger and
Ruhl's algorithm including more flexible "load" definitions
- rrepair: completely new merkle tree sync protocol with an order of
magnitude lower traffic costs (use dynamic signature sizes based
on a "recon probability of one error" (p1e) in the leaf nodes)
- rrepair: add a trivial probabilistic reconciliation protocol using the
"recon probability of one error" (p1e)
- rrepair: replace bloom_fpr parameter with a generic "recon probability of
one error" (p1e)
- rrepair: add a trivial reconciliation phase for the differences identified
by bloom
- rrepair: more efficient resolve also including a list of keys to request
- gossip: completely new (more flexible) gossip framework
- slide: add support for 'jump' operations
- slide: do not create a timer for each received message (use a periodic
cleanup)
- comm_layer: tune TCP connection parameters to increase throughput and
latency (no delay_send)
- comm_layer: close idle TCP connections, support for no_keep_alive
connections (used by cyclon, for example)
- comm_layer: try to bundle more messages
- node join: less overhead during joins, especially in small rings
- rm_tman: less overhead by not adding nodes in the cache to the dn_cache
- rt_chord: skip trying to contact nodes in the own range
- rt_chord: stop stabilize when the own node is reached
Infrastructure:
- intervals: more compact (and transfer-friendly) representation
- trigger: replace modules with msg_delay:send_trigger/2
- config: replace implementation with a public ets table
- tune the garbage collection of some core processes and periodically
garbage collect all processes
- reduce the number of generated atoms and the number of ets tables used
- several smaller performance optimisations
- support for Erlang R13B01 up to 17.0 and current otp master
Tests:
- improve test coverage (manual tests and random tests)
- change test definitions and allow groups of tests, e.g.
test (default), test-skipped,
all_TESTS, all_with_cover_TESTS, performance_TESTS, proto_sched_TESTS,
type_check_TESTS
Documentation:
- add rrepair documentation
Tools:
- proto_sched: new API, better determinism, more strict self-control
- proto_sched: support for short-lived processes
- proto_sched: more information in get_infos
- trace_mpath: more flexible LaTeX exports with more detailed message info
- trace_mpath: support meaningful PID names when tracing remote messages
- tester: full support for Erlang 17.0
- make: re-compile after Emakefile changes
Bugs:
- rrepair: fix unnecessary feedback for KVV items of the same version
- bulkowner: some fixes for (gracefully) leaving nodes
- fix numerous more (less severe) bugs
Scalaris 0.6.1 - October 11, 2013
============================================================
Packaging:
- add ArchLinux ruby API packages
API:
- Java-API: add Maven build support
- Java-API: add CircularByteArrayOutputStream#clear()
- Java-API: fix ConnectionPool#getConnection(timeout) throwing
IllegalMonitorStateException if a single ConnectionPool is used
by multiple threads and no more connections are available
- Java-API: add a "-monitor" command line parameter
- api_monitor: return the latency and stddev values of the micro-benchmark
executed by monitor_perf for node and service performance
Demonstrator "Wiki on Scalaris" (supported by 4CaaSt http://www.4caast.eu/
and Contrail http://contrail-project.eu):
- separate list counters from their list partitions for a better data layout
- fix high memory use of the Scalaris import if the import is slow
- use tomcat 7.0.42
Business Logic:
- rrepair: reduce overhead of ART reconciliation
- rrepair: allow resolving of multiple merkle node leaves with a single
resolve request
- rrepair: don't create resolve requests for empty intervals
- rrepair: reduce overhead of update_key_entry requests (use a single request
with all the data instead of one request for each item)
- rrepair: allow arbitrary intervals in interval_upd and interval_upd_send
resolve requests again
- rrepair: when hashing merkle_tree/ART children, also include the represented
interval (fixes indistinguishable empty leaf nodes in ART)
- tx_tm_rtm: re-enable takeover by rtms on tm crash
- rt_chord: only re-build the RT if the pred or succ processes change or the
own new node ID is not between the new pred and succ any more
Infrastructure:
- DB: improve performance of fold[lr] implementations by a factor of 2
- FD: get rid of annoying, wrongly raised log warnings
- RM: provide a more generic Reason for RM subscriptions
- RM: remove trigger infections
- RT: don't trigger an update when a slide finishes
- RT, FRT: reduce the number of messages sent on lookups
- log: don't exit with a badmatch if our error_logger is not the only one
Tests:
- add protocol scheduler tests for slide, join and leave
Documentation:
- user-dev-guide: add section on scalarisctl checkinstallation
- user-dev-guide: clarify the section about how to set up Scalaris
Tools:
- proto scheduler: continue in case of send errors
- top: improve process messages output
Bugs:
- node join: fix not being able to join a system with passive load balancer
if the number of items in the DB is too high
- tx_tm_rtm: fix wrong asserts
- fix node resposibility check not always including message forward and
db_range intervals
- tx_tp: add missing snapshot number in tp_do_commit_abort message
- bulkowner: respect the nodes' DB ranges and forward requests for
non-responsible ranges
- dn_cache: fix reporting wrong PIDs back as zombies after node reboots
- fix some more (less severe) bugs
Scalaris 0.6.0 (codename "Conus scalaris") - August 19, 2013
============================================================
Packaging:
- add ArchLinux packages
- add support for new distribution versions
API:
- no more timeouts in client APIs
- Java-API: re-worked the request and result list handling
-> move result processing to the operation classes
- Java-API: better support for custom operations
- Java-API: support the new partial reads:
ReadRandomFromListOp and ReadSublistOp
- Java-API: compile with "vars" debug info
- Java-API: integrate new OtpErlang library (1.5.8 from R16B) with fixed
support for compressed binaries
- Java-API: add back-ports from the Wiki on Scalaris demonstrator:
* list-change operations: ScalarisChangeListOp and ScalarisListAppendRemoveOp
* MultiMap classes are now in de.zib.tools
* CircularByteArrayOutputStream
- Java-API: fix hostname issues with Erlang and Java
- Java-API: slightly changed the delete API
- JSON-API: add API for auto-scale requests
- Python-API: add API for auto-scale requests
- Python-API: use default socket timeout
- Ruby-API: use default socket timeout
- all APIs: support lists of composite types
Demonstrator "Wiki on Scalaris" (supported by 4CaaSt http://www.4caast.eu/
and Contrail http://contrail-project.eu):
- allow monitoring via JMX in the FourCaastMonitoringPlugin
- support for getting random articles via the new partial read op
- new optimisation scheme "Buckets with Write Cache" - uses a single big list
to read from and the rest of the buckets to write to
- improve import and dump-processing (faster, more memory-efficient)
- add on-the-fly conversion to the different optimisation schemes during import
(only one prepared DB dump needed now)
- several UI enhancements and rendering fixes
- update bliki lib (includes code ported to upstream)
- add auto-import ability
- use tomcat 7.0.33
Business Logic:
- replace common message tags with integers to reduce bandwidth
- more flexible read operations (easier to extend)
- add support for the following partial reads: random_from_list and sublist
- save bandwidth by not returning the full value for write operations
(only the version is required)
- new DB back-end implementation with a smaller and cleaner interface
- faster DB get_chunk processing
- tx: allow overwriting old/outdated DB entries
- tx: allow overwriting old/outdated write-locked entries
- tx: allow setting write lock on old/outdated read-locked entries
- tx: always reply when the majority replied during read
- tx: make sure that if not_found is reported to the user (while reading),
a write cannot go through if it is not also based on not_found
- tx: committing a test_and_set op on a non-existing entry now fails as well
(the op itself already returned the failure)
- tx: add a 2s delay to wait for slow learner_decide answers before cleaning up
(results in a faster state cleanup after the fourth response)
- tx: small performance improvements in several modules
- rm: only add alive, non-leaving nodes
- rm: if a predecessor crashes, start repairing the range (rrepair)
- rrepair: stabilised rrepair (not considered experimental any more)
- rrepair: also update entries with existing but outdated WriteLocks
- rrepair: several performance improvements
(bloom, merkle_tree, art and rrepair processes in general)
- rrepair: re-design of rr_recon
- rrepair: don't offload heavy work onto the dht_node (increases responsiveness
of the dht_node process during replica repair)
- rrepair: improve db_generator tool and random_bias binomial distribution used
for tests
- rrepair: support differently configured nodes (use the same reconciliation
structure parameters)
- rrepair: de-activate self-repair (a node with multiple copies of the same
items does not need a reconciliation structure to repair some of
them)
- rrepair: activate rrepair periodically every 10 minutes with a probability
of 33%
- slide v2.0: fewer message to initiate a slide
- slide v2.0: generic (asynchronous) call-backs for different ring maintenance
algorithms
- slide v2.0: re-work handling of planned next operations, e.g. used by
incremental slides
- slide v2.0: don't directly work on the DB any more (there may be more data
needed to slide) - let dht_node_state decide
- slide v2.0: activate incremental join and leave operations
- slide v2.0: actively report graceful node shutdown to the local FD of the
leaving node to inform subscribers
- slide v2.0: code clean-up
- slide v2.0: some fixes for incremental slides
- slide v2.0: more robust in general
- more smooth node joins by also reporting when a join is not possible due to
a running slide at the existing node
- passive load balancing: random selection of (equally qualified) nodes
- add new routing algorithms FRT-Chord (flexible routing tables) and
GFRT-Chord (supports proximity routing and data centers) as alternatives to
Chord (see rt_frtchord and rt_gfrtchord modules)
- add auto-scale framework, e.g. for cloud environments (supported by
Contrail http://contrail-project.eu/) which is able to scale the deployment
to maintain a given target latency of executed transactions
- cache config reads in the process dictionary for better performance
- cyclon: if the cache is empty, try one of the nodes in known_hosts
- add support for consistent snapshots (experimental)
Infrastructure:
- add a daemon to monitor Scalaris via JMX
- disable message compression (only client values are compressed - the rest is
too expensive, at least on GbE)
- support for distributions with python3 available as "python" and
python2 as "python2"
- support for Ruby 1.9
- yaws 1.96 (with patch to compile on otp master and a patch to fix a
performance regression)
- support for Erlang R13B01 up to R16B01 and current otp master
Tests:
- add test suite to find memory leaks
- let "make test" run the major test suites and "make test-skipped" for some
more (time-consuming) tests
- clean-up ring after timetrap timeout failures via common test hook
- new ?compare macro for custom comparison functions
- higher test coverage with more random-testing via the "tester"
Documentation:
- user-dev-guide: add user tutorial on using scalaris
- user-dev-guide: add a section about the slide protocol
- user-dev-guide: extended description of scientific background
- add replica repair sequence diagrams
- better code descriptions
Tools:
- gen_component: synchronous breakpoint set and delete for more deterministic
usage
- trace_mpath: allow selective tracing via filter fun
- trace_mpath: fix several triggers becoming infected by trace_mpath resulting
in infinite tracing
- trace_mpath: improve latex output of traces
- tester: copy dictionary to worker threads
- tester: add support for more types, e.g. neg_integer(), gb_rees
- tester: better type check error reporting
- tester: print tester last calls when aborting unit tests
(timeout or exception)
- tester: add support for constraints in type specs ("when is_subtype(A,B)")
- web debug interface: add cluster graph visualisation
- web debug interface: display vivaldi distance
- web debug interface: add IP addresses and ports to the ring charts and tables
- web debug interface: allow navigating to the web interfaces of shown nodes
- top: support for showing messages in message queue of an inspected PID
- top: support for showing larger dictionary values
- allow recursive reply_as envelopes
- experimental protocol scheduler to check protocols with random message
interleavings (see proto_sched module)
Bugs:
- fix RM handling of (out-dated) nodes with the same ID as newly added nodes
- fix ganglia integration not working any more
- restore the ability to start nodes at a specific key via "scalarisctl -k ..."
- fix some memory leaks in the tx system
- fix statistics of comm_connection (not send in some cases, not overflow-aware)
- use /bin/bash instead of /bin/sh which may not result in a bash session
- fix init.d scripts not checking for existing processes correctly
- fix dc_clustering
- fix numerous other bugs
Scalaris 0.5.0 (codename "Saperda scalaris") - October 11, 2012
===============================================================
Packaging:
- new init.d script to start Scalaris
- added chef scripts to deploy Scalaris nodes
- improved Windows start scripts (support for R15B01 and R15B02, don't close
command prompt window immediately after shutdown if double-clicked)
- more flexible scalarisctl (arbitrary parameter order, allow setting cookie,
ports and number of nodes in VM via parameters, allow using screen for
daemonised sessions, allow graceful leave via "gstop" command, new "status"
command)
- support for new linux distributions (Fedora 17, Ubuntu 12.04, openSUSE 12.2)
- let scalarisctl checkinstallation also perform runtime tests for the APIs
API:
- allow Scalaris monitoring via JMX through the Java API
- added an executor-service to the Java-API (de.zib.scalaris.executor.*)
- added a node discovery daemon to the Java-API
- allow compressed communication between the Java-API and Erlang for increased
performance, especially if the two are on separate nodes
- added VM management support to the JSON- and Python-API
- added transaction log filtering to the Java-API, i.e. only sent the needed
parts of the tlog back to Erlang and re-combine the result
- fixed api_tx:req_list_commit_each/1 not running requests in parallel
-> do not assure any order of requests, even if on same key!
Demonstrator "Wiki on Scalaris" (supported by 4CaaSt http://www.4caast.eu/
and Contrail http://contrail-project.eu):
- allow different partitioned data models for better performance and
scalability
- allow logging of user requests
- added support for checking whether another article exists (approximate)
-> show link colours based on this check
- added check for bad page titles
- allow SERVERNAME and SERVERPATH in config for setups with load balancers
- reduced memory footprint of Wiki data in Scalaris
- support for newer wiki xml dumps
- added support for using a MediaWiki-like SQLite-DB backend for e.g.
filtering
- improved overall performance
- several rendering fixes
Business Logic:
- added (experimental) support for replica repair (disabled by default)
(thanks to Maik Lange)
- added monitoring of memory statistics (also available via web interface)
- better error reporting in the failure detector
- reduced message overhead by UIDs and message/tuple tags
- reduced overall message size of transactions:
* do not include the (uncompressed) value in messages of the read phase of
write operations
* do not include the value in init_TP messages
- allow VM-flag "first" to be set via config file
- gather overall connection statistics in comm_stats (also available via web
interface)
- reduced erroneous failure messages on node shutdown
- integrated comm_layer into comm_server
- better scalability in pid_groups (find processes round-robin in find_a/1)
- several changes to improve overall performance and/or CPU time at the nodes
Tests:
- support for more types in the runtime type-checker
- verify several API functions via runtime type-checker (also test private
functions if possible!)
Tools:
- distributed protocol visualisation via trace_mpath (text-based or latex-file
for graphical presentation)
- better profiling via top for Erlang processes
- better debugging, e.g. via ASCII supervisor-tree rendering in verbose mode
Bugs:
- fixed memory leaks in read and write operations
- fixed memory leaks in tx_tm_rtm
- prevent potential endless loops in tx_tm_rtm
- fixed inform RTMs sometimes informing the wrong RTMs
- fixed numerous other bugs
Scalaris 0.4.1 - March 22, 2012
===============================
Packaging:
- new official ConPaaS packages (http://www.conpaas.eu/)
- install rubygem dependencies in Debian postinstall scripts for Ruby API
- improved Windows start scripts (if set, uses the ERLANG_HOME environment
variable to find Erlang, otherwise searches for Erlang in common paths)
Bugs:
- better tx cleanup (should fix rare occurance of duplicate client inform)
- forward additional parameters of the start scripts to new syntax of scalarisctl
Scalaris 0.4.0 (codename "Pomacea scalaris") - January 25, 2012
===============================================================
API:
- new functions for incremental data change:
test_and_set: check for a provided old value before setting a new one
add_on_nr: increment a numeric value
add_del_on_list: append or delete entries from a list value
- added VM API to manage Scalaris nodes inside an Erlang virtual machine
- added monitoring API to retrieve some live metrics
- added a connection pool convenience class (Java, Python)
Demonstrator "Wiki on Scalaris" (supported by 4CaaSt http://www.4caast.eu/):
- improved performance of page edits
- improved performance of Wikipedia dump loading
- several rendering fixes
Business Logic:
- improved handling of large values by reducing overhead of transaction
log handling (empty TLog after commit), no copy of value in TLog
returned to user after read requests)
- eliminated timeouts in data hand-over protocol (relies on fd now)
- added a DB subscribe mechanism, e.g. to become informed when locks
are freed
- fixed a strong consistency issue in the tx protocol
- gather some run-time statistics and expose them via the APIs and the
web debug interface
Infrastructure:
- support for Erlang 15B
- fd now also uses feedback from TCP layer
- made message sending more flexible (gets an option list)
- added and corrected several Erlang type specifications
- added scripts to create Scalaris images for OpenNebula
- added tools for using Scalaris as the Database as a Service
component in ConPaaS (http://www.conpaas.eu/) which is part of the
EU project Contrail (http://contrail-project.eu/)
- added a separate communication channel for priority messages, e.g. fd
(reduces falsely reported node crashes under heavy load)
Tests:
- added runtime type-checker for random testing extended unittests
Documentation:
- updated documentation to extended APIs
Bugs:
- fixed numerous bugs
Scalaris 0.3.0 (codename "Rhinechis Scalaris") - July 15, 2011
==============================================================
API:
- new API with interoperable bindings to Java, Python, Ruby, and JSON
- support for several data types, including strings, integers, JSON
objects, binary objects.
- new transaction interface with support for bundled requests for
better latency.
- separate APIs to access the raw DHT, a DHT with replication, and the
transactional DHT
Demonstrator:
- added Wikipedia-hosting using Scalaris as demonstrator application
Business Logic:
- fault-tolerant startup: start Scalaris when a quorum of the
known_hosts becomes available (option -q in bin/scalarisctl)
- perform data hand-over when nodes join/gracefully leave
(also works when transactions are executed concurrently)
- added passive load balancing (when a node joins a ring, it samples
several other nodes and joins at the node that balances the number
of stored items the most)
- completely rewritten transaction layer (more modular, more
extendible, less latency)
- modularized / reimplemented Paxos algorithm, so the algorithm can
also be used outside transactions (e.g. used for quorum-startup)
- switched almost all components to our component framework 'gen_component'
- added gossiping for estimating e.g. the number of nodes or the
average load in a ring
- more reliable unreliable look-up
- better ring start-up on slow networks
Infrastructure:
- Vivaldi and topology inference
- support for Erlang 13B01 and newer
- faster TCP/IP communication between Scalaris nodes
- completely rewritten failure detector framework for more accurate
detection of node failures
- added numerous Erlang type specifications
- extended unittests
Tests:
- added own random testing framework that reads type specifications
and scans the source code for constants to generate proper random
test-data
- extended gen_component with breakpoint-support for debugging and
testing (perform deterministic pseudo-random message interleaving
tests)
- added numerous unittests
- added language-binding interoperability tests
Documentation:
- extended, but - as always - by far not enough...
Bugs:
- fixed countless bugs
Scalaris 0.2.0 - 0.2.3
======================
- changes not explicitly recorded (see the corresponding
commit messages)
================================================
FILE: Doxyfile
================================================
# Doxyfile 1.8.9.1
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all text
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
# for the list of possible encodings.
# The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME = "Scalaris Project"
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER =
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.
PROJECT_BRIEF = "Scalaris, a distributed, transactional key-value store"
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
# in the documentation. The maximum height of the logo should not exceed 55
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.
PROJECT_LOGO =
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
OUTPUT_DIRECTORY = docs
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
# will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes
# performance problems for the file system.
# The default value is: NO.
CREATE_SUBDIRS = NO
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
# U+3044.
# The default value is: NO.
ALLOW_UNICODE_NAMES = NO
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
# Ukrainian and Vietnamese.
# The default value is: English.
OUTPUT_LANGUAGE = English
# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.
BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
# The default value is: YES.
REPEAT_BRIEF = YES
# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.
ABBREVIATE_BRIEF =
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
# description.
# The default value is: NO.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
# The default value is: NO.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.
FULL_PATH_NAMES = YES
# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
# part of the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the path to
# strip.
#
# Note that you can specify absolute paths here, but also relative paths, which
# will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES.
STRIP_FROM_PATH =
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which
# header file to include in order to use a class. If left blank only the name of
# the header file containing the class definition is used. Otherwise one should
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.
STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
# support long names like on DOS, Mac, or CD-ROM.
# The default value is: NO.
SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.
JAVADOC_AUTOBRIEF = NO
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.
QT_AUTOBRIEF = NO
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
# a brief description. This used to be the default behavior. The new default is
# to treat a multi-line C++ comment block as a detailed description. Set this
# tag to YES if you prefer the old behavior instead.
#
# Note that setting this tag to YES also means that rational rose comments are
# not recognized any more.
# The default value is: NO.
MULTILINE_CPP_IS_BRIEF = NO
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.
INHERIT_DOCS = YES
# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
# page for each member. If set to NO, the documentation of a member will be part
# of the file/class/namespace that contains it.
# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
# uses this value to replace tabs by spaces in code fragments.
# Minimum value: 1, maximum value: 16, default value: 4.
TAB_SIZE = 4
# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:\n"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". You can put \n's in the value part of an alias to insert
# newlines.
ALIASES =
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.
TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
# members will be omitted, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C = YES
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
# for that language. For instance, namespaces will be presented as packages,
# qualified scopes will look different, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources. Doxygen will then generate output that is tailored for Fortran.
# The default value is: NO.
OPTIMIZE_FOR_FORTRAN = NO
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for VHDL.
# The default value is: NO.
OPTIMIZE_OUTPUT_VHDL = NO
# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
# Fortran. In the later case the parser tries to guess whether the code is fixed
# or free formatted code, this is the default for Fortran type files), VHDL. For
# instance to make doxygen treat .inc files as Fortran files (default is PHP),
# and .f files as C (default is Fortran), use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen.
EXTENSION_MAPPING =
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See http://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
# The default value is: YES.
MARKDOWN_SUPPORT = YES
# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or
# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.
AUTOLINK_SUPPORT = YES
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.
BUILTIN_STL_SUPPORT = YES
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
# The default value is: NO.
CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.
SIP_SUPPORT = NO
# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.
IDL_PROPERTY_SUPPORT = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.
DISTRIBUTE_GROUP_DOC = NO
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.
SUBGROUPING = YES
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
# and RTF).
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.
INLINE_GROUPED_CLASSES = NO
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.
INLINE_SIMPLE_STRUCTS = NO
# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
# enum is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically be
# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
# The default value is: NO.
TYPEDEF_HIDES_STRUCT = NO
# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.
LOOKUP_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.
EXTRACT_ALL = NO
# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.
EXTRACT_PRIVATE = NO
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.
EXTRACT_PACKAGE = NO
# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC = NO
# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. If set to YES, local methods,
# which are defined in the implementation section but not in the interface are
# included in the documentation. If set to NO, only methods in the interface are
# included.
# The default value is: NO.
EXTRACT_LOCAL_METHODS = NO
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.
EXTRACT_ANON_NSPACES = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option
# has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO, these declarations will be
# included in the documentation.
# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.
INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
# names in lower-case letters. If set to YES, upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
# The default value is: system dependent.
CASE_SENSE_NAMES = NO
# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.
HIDE_SCOPE_NAMES = NO
# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
# YES the compound reference will be hidden.
# The default value is: NO.
HIDE_COMPOUND_REFERENCE= NO
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.
SHOW_INCLUDE_FILES = YES
# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.
SHOW_GROUPED_MEMB_INC = NO
# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.
FORCE_LOCAL_INCLUDES = NO
# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.
INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.
SORT_MEMBER_DOCS = YES
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.
SORT_BRIEF_DOCS = NO
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.
SORT_MEMBERS_CTORS_1ST = NO
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.
SORT_GROUP_NAMES = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.
STRICT_PROTO_MATCHING = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.
GENERATE_TODOLIST = YES
# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.
GENERATE_TESTLIST = YES
# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.
GENERATE_BUGLIST = YES
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if ... \endif and \cond
# ... \endcond blocks.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.
SHOW_USED_FILES = YES
# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.
SHOW_FILES = YES
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.
SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.
FILE_VERSION_FILTER =
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.
LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.
QUIET = NO
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.
WARNINGS = YES
# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some parameters
# in a documented function, or documenting parameters that don't exist or using
# markup commands wrongly.
# The default value is: YES.
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong or incomplete
# parameter documentation, but not about the absence of documentation.
# The default value is: NO.
WARN_NO_PARAMDOC = NO
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER)
# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard
# error (stderr).
WARN_LOGFILE =
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
# spaces.
# Note: If this tag is empty the current directory is searched.
INPUT = cpp-api
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see: http://www.gnu.org/software/libiconv) for the list of
# possible encodings.
# The default value is: UTF-8.
INPUT_ENCODING = UTF-8
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank the
# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
# *.qsf, *.as and *.js.
FILE_PATTERNS = *.hpp *.h *.cpp
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.
RECURSIVE = YES
# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
#
# Note that relative paths are relative to the directory from which doxygen is
# run.
EXCLUDE =
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
# The default value is: NO.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS =
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*
EXCLUDE_SYMBOLS =
# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
# command).
EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.
EXAMPLE_PATTERNS =
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.
EXAMPLE_RECURSIVE = NO
# The IMAGE_PATH tag can be used to specify one or more files or directories
# that contain images that are to be included in the documentation (see the
# \image command).
IMAGE_PATH =
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command:
#
#
#
# where is the value of the INPUT_FILTER tag, and is the
# name of an input file. Doxygen will then use the output that the filter
# program writes to standard output. If FILTER_PATTERNS is specified, this tag
# will be ignored.
#
# Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly.
INPUT_FILTER =
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form: pattern=filter
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied.
FILTER_PATTERNS =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will also be used to filter the input files that are used for
# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
# The default value is: NO.
FILTER_SOURCE_FILES = NO
# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
# it is also possible to disable source filtering for a specific pattern using
# *.ext= (so without naming a filter).
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
FILTER_SOURCE_PATTERNS =
# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
# generated. Documented entities will be cross-referenced with these sources.
#
# Note: To get rid of all source code in the generated output, make sure that
# also VERBATIM_HEADERS is set to NO.
# The default value is: NO.
SOURCE_BROWSER = NO
# Setting the INLINE_SOURCES tag to YES will include the body of functions,
# classes and enums directly into the documentation.
# The default value is: NO.
INLINE_SOURCES = NO
# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
# special comment blocks from generated source code fragments. Normal C, C++ and
# Fortran comments will always remain visible.
# The default value is: YES.
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# function all documented functions referencing it will be listed.
# The default value is: NO.
REFERENCED_BY_RELATION = NO
# If the REFERENCES_RELATION tag is set to YES then for each documented function
# all documented entities called/used by that function will be listed.
# The default value is: NO.
REFERENCES_RELATION = NO
# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
# to YES then the hyperlinks from functions in REFERENCES_RELATION and
# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
# link to the documentation.
# The default value is: YES.
REFERENCES_LINK_SOURCE = YES
# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
# source code will show a tooltip with additional information such as prototype,
# brief description and links to the definition and documentation. Since this
# will make the HTML file larger and loading of large files a bit slower, you
# can opt to disable this feature.
# The default value is: YES.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see http://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
# - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
# - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal
#
# Doxygen will invoke htags (and that will in turn invoke gtags), so these
# tools must be available from the command line (i.e. in the search path).
#
# The result: instead of the source browser generated by doxygen, the links to
# source code will now point to the output of htags.
# The default value is: NO.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
USE_HTAGS = NO
# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
# verbatim copy of the header file for each class for which an include is
# specified. Set to NO to disable this.
# See also: Section \class.
# The default value is: YES.
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
# compounds will be generated. Enable this if the project contains a lot of
# classes, structs, unions or interfaces.
# The default value is: YES.
ALPHABETICAL_INDEX = YES
# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
# which the alphabetical index list will be split.
# Minimum value: 1, maximum value: 20, default value: 5.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
# while generating the index headers.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
# The default value is: YES.
GENERATE_HTML = YES
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
# The default value is: .html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
#
# To get valid HTML the header file that includes any scripts and style sheets
# that doxygen needs, which is dependent on the configuration options used (e.g.
# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
# default header using
# doxygen -w html new_header.html new_footer.html new_stylesheet.css
# YourConfigFile
# and then modify the file new_header.html. See also section "Doxygen usage"
# for information on how to generate the default header that doxygen normally
# uses.
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. For a description
# of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard
# footer. See HTML_HEADER for more information on how to generate a default
# footer and what special commands can be used inside the footer. See also
# section "Doxygen usage" for information on how to generate the default footer
# that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of
# the HTML output. If left blank doxygen will generate a default style sheet.
# See also section "Doxygen usage" for information on how to generate the style
# sheet that doxygen normally uses.
# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
# it is more robust and this tag (HTML_STYLESHEET) will in the future become
# obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_STYLESHEET =
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
# standard style sheet and is therefore more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_STYLESHEET =
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
# that these files will be copied to the base HTML output directory. Use the
# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
# files will be copied as-is; there are no commands or markers available.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_FILES =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_HUE = 220
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
# in the HTML output. For a value of 0 the output will use grayscales only. A
# value of 255 will produce the most vivid colors.
# Minimum value: 0, maximum value: 255, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_SAT = 100
# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
# luminance component of the colors in the HTML output. Values below 100
# gradually make the output lighter, whereas values above 100 make the output
# darker. The value divided by 100 is the actual gamma applied, so 80 represents
# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
# change the gamma.
# Minimum value: 40, maximum value: 240, default value: 80.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_GAMMA = 80
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting this
# to NO can help when comparing the output of multiple runs.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = YES
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_DYNAMIC_SECTIONS = NO
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand
# and collapse entries dynamically later on. Doxygen will expand the tree to
# such a level that at most the specified number of entries are visible (unless
# a fully collapsed tree already exceeds this amount). So setting the number of
# entries 1 will produce a full collapsed tree by default. 0 is a special value
# representing an infinite number of entries and will result in a full expanded
# tree by default.
# Minimum value: 0, maximum value: 9999, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_INDEX_NUM_ENTRIES = 100
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see: http://developer.apple.com/tools/xcode/), introduced with
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
# Makefile in the HTML output directory. Running make will produce the docset in
# that directory and running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_DOCSET = NO
# This tag determines the name of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# The default value is: Doxygen generated docs.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_FEEDNAME = "Doxygen generated docs"
# This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_BUNDLE_ID = org.doxygen.Project
# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.
# The default value is: org.doxygen.Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
# The default value is: Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_NAME = Publisher
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
# Windows.
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
# files are now used as the Windows 98 help format, and will replace the old
# Windows help format (.hlp) on all Windows platforms in the future. Compressed
# HTML files also contain an index, a table of contents, and you can search for
# words in the documentation. The HTML workshop also contains a viewer for
# compressed HTML files.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_HTMLHELP = NO
# The CHM_FILE tag can be used to specify the file name of the resulting .chm
# file. You can add a path in front of the file if the result should not be
# written to the html output directory.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_FILE =
# The HHC_LOCATION tag can be used to specify the location (absolute path
# including file name) of the HTML help compiler (hhc.exe). If non-empty,
# doxygen will try to run the HTML help compiler on the generated index.hhp.
# The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
HHC_LOCATION =
# The GENERATE_CHI flag controls if a separate .chi index file is generated
# (YES) or that it should be included in the master .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
GENERATE_CHI = NO
# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
# and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_INDEX_ENCODING =
# The BINARY_TOC flag controls whether a binary table of contents is generated
# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
# enables the Previous and Next buttons.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members to
# the table of contents of the HTML help documentation and to the tree view.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
TOC_EXPAND = NO
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
# (.qch) of the generated HTML documentation.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_QHP = NO
# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
# the file name of the resulting .qch file. The path specified is relative to
# the HTML output folder.
# This tag requires that the tag GENERATE_QHP is set to YES.
QCH_FILE =
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace
# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_NAMESPACE = org.doxygen.Project
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
# folders).
# The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_VIRTUAL_FOLDER = doc
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_NAME =
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see:
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_SECT_FILTER_ATTRS =
# The QHG_LOCATION tag can be used to specify the location of Qt's
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
# generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHG_LOCATION =
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
# generated, together with the HTML files, they form an Eclipse help plugin. To
# install this plugin and make it available under the help contents menu in
# Eclipse, the contents of the directory containing the HTML and XML files needs
# to be copied into the plugins directory of eclipse. The name of the directory
# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
# After copying Eclipse needs to be restarted before the help appears.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_ECLIPSEHELP = NO
# A unique identifier for the Eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have this
# name. Each documentation set should have its own identifier.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
ECLIPSE_DOC_ID = org.doxygen.Project
# If you want full control over the layout of the generated HTML pages it might
# be necessary to disable the index and replace it with your own. The
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
# of each HTML page. A value of NO enables the index and the value YES disables
# it. Since the tabs in the index contain the same information as the navigation
# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
DISABLE_INDEX = NO
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information. If the tag
# value is set to YES, a side panel will be generated containing a tree-like
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine-tune the look of the index. As an example, the default style
# sheet generated by doxygen has an example that shows how to put an image at
# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
# the same information as the tab index, you could consider setting
# DISABLE_INDEX to YES when enabling this option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_TREEVIEW = NO
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
# doxygen will group on one line in the generated HTML documentation.
#
# Note that a value of 0 will completely suppress the enum values from appearing
# in the overview section.
# Minimum value: 0, maximum value: 20, default value: 4.
# This tag requires that the tag GENERATE_HTML is set to YES.
ENUM_VALUES_PER_LINE = 4
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
# to set the initial width (in pixels) of the frame in which the tree is shown.
# Minimum value: 0, maximum value: 1500, default value: 250.
# This tag requires that the tag GENERATE_HTML is set to YES.
TREEVIEW_WIDTH = 250
# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
# external symbols imported via tag files in a separate window.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
EXT_LINKS_IN_WINDOW = NO
# Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML
# output directory to force them to be regenerated.
# Minimum value: 8, maximum value: 50, default value: 10.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_FONTSIZE = 10
# Use the FORMULA_TRANPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
# Note that when changing this option you need to delete any form_*.png files in
# the HTML output directory before the changes have effect.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
USE_MATHJAX = NO
# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
# http://docs.mathjax.org/en/latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_FORMAT = HTML-CSS
# When MathJax is enabled you need to specify the location relative to the HTML
# output directory using the MATHJAX_RELPATH option. The destination directory
# should contain the MathJax.js script. For instance, if the mathjax directory
# is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from http://www.mathjax.org before deployment.
# The default value is: http://cdn.mathjax.org/mathjax/latest.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_CODEFILE =
# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and
# should work on any modern browser. Note that when using HTML help
# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
# there is already a search function so this one should typically be disabled.
# For large projects the javascript based search engine can be slow, then
# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
# search using the keyboard; to jump to the search box use + S
# (what the is depends on the OS and browser, but it is typically
# , /, or both). Inside the search box use the to jump into the search results window, the results can be navigated
# using the . Press to select an item or to cancel
# the search. The filter options can be selected when the cursor is inside the
# search box by pressing +. Also here use the
# to select a filter and or to activate or cancel the filter
# option.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using Javascript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
# and searching needs to be provided by external tools. See the section
# "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.
SERVER_BASED_SEARCH = NO
# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
# script for searching. Instead the search results are written to an XML file
# which needs to be processed by an external indexer. Doxygen will invoke an
# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
# search results.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTERNAL_SEARCH = NO
# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will return the search results when EXTERNAL_SEARCH is enabled.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). See the section "External Indexing and
# Searching" for details.
# This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHENGINE_URL =
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
# search data is written to a file for indexing by an external tool. With the
# SEARCHDATA_FILE tag the name of this file can be specified.
# The default file is: searchdata.xml.
# This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHDATA_FILE = searchdata.xml
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
# projects and redirect the results back to the right project.
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTERNAL_SEARCH_ID =
# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
# projects other than the one defined by this configuration file, but that are
# all added to the same external search index. Each project needs to have a
# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
# to a relative location where the documentation can be found. The format is:
# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
# The default value is: YES.
GENERATE_LATEX = NO
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked.
#
# Note that when enabling USE_PDFLATEX this option is only used for generating
# bitmaps for formulas in the HTML output, but not in the Makefile that is
# written to the output directory.
# The default file is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX.
# The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used by the
# printer.
# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
# 14 inches) and executive (7.25 x 10.5 inches).
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = a4
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. To get the times font for
# instance you can specify
# EXTRA_PACKAGES=times
# If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES.
EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
# generated LaTeX document. The header should contain everything until the first
# chapter. If it is left blank doxygen will generate a standard header. See
# section "Doxygen usage" for information on how to let doxygen write the
# default header to a separate file.
#
# Note: Only use a user-defined header if you know what you are doing! The
# following commands have a special meaning inside the header: $title,
# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
# string, for the replacement values of the other commands the user is referred
# to HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HEADER =
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
# generated LaTeX document. The footer should contain everything after the last
# chapter. If it is left blank doxygen will generate a standard footer. See
# LATEX_HEADER for more information on how to generate a default footer and what
# special commands can be used inside the footer.
#
# Note: Only use a user-defined footer if you know what you are doing!
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_FOOTER =
# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# LaTeX style sheets that are included after the standard style sheets created
# by doxygen. Using this option one can overrule certain style aspects. Doxygen
# will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list).
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_STYLESHEET =
# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output
# directory. Note that the files will be copied as-is; there are no commands or
# markers available.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_FILES =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
# contain links (just like the HTML output) instead of page references. This
# makes the output suitable for online browsing using a PDF viewer.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
PDF_HYPERLINKS = YES
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
# the PDF file directly from the LaTeX files. Set this option to YES, to get a
# higher quality PDF documentation.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = YES
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
# command to the generated LaTeX files. This will instruct LaTeX to keep running
# if errors occur, instead of asking the user for help. This option is also used
# when generating formulas in HTML.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BATCHMODE = NO
# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
# index chapters (such as File Index, Compound Index, etc.) in the output.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HIDE_INDICES = NO
# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
# code with syntax highlighting in the LaTeX output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BIB_STYLE = plain
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
# RTF output is optimized for Word 97 and may not look too pretty with other RTF
# readers/editors.
# The default value is: NO.
GENERATE_RTF = NO
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: rtf.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_OUTPUT = rtf
# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
COMPACT_RTF = NO
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
# contain hyperlink fields. The RTF file will contain links (just like the HTML
# output) instead of page references. This makes the output suitable for online
# browsing using Word or some other Word compatible readers that support those
# fields.
#
# Note: WordPad (write) and others do not support links.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's config
# file, i.e. a series of assignments. You only have to provide replacements,
# missing definitions are set to their default value.
#
# See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's config file. A template extensions file can be generated
# using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_EXTENSIONS_FILE =
# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
# with syntax highlighting in the RTF output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
# classes and files.
# The default value is: NO.
GENERATE_MAN = NO
# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it. A directory man3 will be created inside the directory specified by
# MAN_OUTPUT.
# The default directory is: man.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_OUTPUT = man
# The MAN_EXTENSION tag determines the extension that is added to the generated
# man pages. In case the manual section does not start with a number, the number
# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
# optional.
# The default value is: .3.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_EXTENSION = .3
# The MAN_SUBDIR tag determines the name of the directory created within
# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
# MAN_EXTENSION with the initial . removed.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_SUBDIR =
# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
# will generate one additional man file for each entity documented in the real
# man page(s). These additional files only source the real man page, but without
# them the man command would be unable to find the correct page.
# The default value is: NO.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_LINKS = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
# captures the structure of the code including all documentation.
# The default value is: NO.
GENERATE_XML = NO
# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: xml.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_OUTPUT = xml
# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
# The default value is: YES.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
# that can be used to generate PDF.
# The default value is: NO.
GENERATE_DOCBOOK = NO
# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
# front of it.
# The default directory is: docbook.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_OUTPUT = docbook
# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
# program listings (including syntax highlighting and cross-referencing
# information) to the DOCBOOK output. Note that enabling this will significantly
# increase the size of the DOCBOOK output.
# The default value is: NO.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
# AutoGen Definitions (see http://autogen.sf.net) file that captures the
# structure of the code including all documentation. Note that this feature is
# still experimental and incomplete at the moment.
# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
# file that captures the structure of the code including all documentation.
#
# Note that this feature is still experimental and incomplete at the moment.
# The default value is: NO.
GENERATE_PERLMOD = NO
# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
# output from the Perl module output.
# The default value is: NO.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_LATEX = NO
# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
# formatted so it can be parsed by a human reader. This is useful if you want to
# understand what is going on. On the other hand, if this tag is set to NO, the
# size of the Perl module output will be much smaller and Perl will parse it
# just the same.
# The default value is: YES.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_PRETTY = YES
# The names of the make variables in the generated doxyrules.make file are
# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
# so different doxyrules.make files included by the same Makefile don't
# overwrite each other's variables.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
# C-preprocessor directives found in the sources and include files.
# The default value is: YES.
ENABLE_PREPROCESSING = YES
# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
# in the source code. If set to NO, only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
# EXPAND_AS_DEFINED tags.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO
# If the SEARCH_INCLUDES tag is set to YES, the include files in the
# INCLUDE_PATH will be searched if a #include is found.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES = YES
# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by the
# preprocessor.
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will be
# used.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that are
# defined before the preprocessor is started (similar to the -D option of e.g.
# gcc). The argument of the tag is a list of macros of the form: name or
# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
# is assumed. To prevent a macro definition from being undefined via #undef or
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
# macro definition that is found in the sources will be used. Use the PREDEFINED
# tag if you want to use a different macro definition that overrules the
# definition found in the source code.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
# remove all references to function-like macros that are alone on a line, have
# an all uppercase name, and do not end with a semicolon. Such function macros
# are typically used for boiler-plate code, and will confuse the parser if not
# removed.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
# The TAGFILES tag can be used to specify one or more tag files. For each tag
# file the location of the external documentation should be added. The format of
# a tag file without this location is as follows:
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where loc1 and loc2 can be relative or absolute paths or URLs. See the
# section "Linking to external documentation" for more information about the use
# of tag files.
# Note: Each tag file must have a unique name (where the name does NOT include
# the path). If a tag file is not located in the directory in which doxygen is
# run, you must also specify the path to the tagfile here.
TAGFILES =
# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
# tag file that is based on the input files it reads. See section "Linking to
# external documentation" for more information about the usage of tag files.
GENERATE_TAGFILE =
# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
# the class index. If set to NO, only the inherited external classes will be
# listed.
# The default value is: NO.
ALLEXTERNALS = NO
# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will be
# listed.
# The default value is: YES.
EXTERNAL_GROUPS = YES
# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
# the related pages index. If set to NO, only the current project's pages will
# be listed.
# The default value is: YES.
EXTERNAL_PAGES = YES
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of 'which perl').
# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
# NO turns the diagrams off. Note that this option also works with HAVE_DOT
# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
# The default value is: YES.
CLASS_DIAGRAMS = YES
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see:
# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.
MSCGEN_PATH =
# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path.
DIA_PATH =
# If set to YES the inheritance and collaboration graphs will hide inheritance
# and usage relations if the target is undocumented or is not a class.
# The default value is: YES.
HIDE_UNDOC_RELATIONS = YES
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz (see:
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is
# set to NO
# The default value is: NO.
HAVE_DOT = NO
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
# to run in parallel. When set to 0 doxygen will base this on the number of
# processors available in the system. You can set it explicitly to a value
# larger than 0 to get control over the balance between CPU load and processing
# speed.
# Minimum value: 0, maximum value: 32, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_NUM_THREADS = 0
# When you want a differently looking font in the dot files that doxygen
# generates you can specify the font name using DOT_FONTNAME. You need to make
# sure dot is able to find the font, which can be done by putting it in a
# standard location or by setting the DOTFONTPATH environment variable or by
# setting DOT_FONTPATH to the directory containing the font.
# The default value is: Helvetica.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTNAME = Helvetica
# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
# dot graphs.
# Minimum value: 4, maximum value: 24, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTSIZE = 10
# By default doxygen will tell dot to use the default font as specified with
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
# the path where dot can find it using this tag.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTPATH =
# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
# each documented class showing the direct and indirect inheritance relations.
# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES
# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation
# dependencies (inheritance, containment, and class references variables) of the
# class with other documented classes.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = YES
# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
# groups, showing the direct groups dependencies.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GROUP_GRAPHS = YES
# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
UML_LOOK = NO
# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
# class node. If there are many fields or methods and many nodes the graph may
# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
# number of items for each type to make the size more manageable. Set this to 0
# for no limit. Note that the threshold may be exceeded by 50% before the limit
# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
# but if the number exceeds 15, the total amount of fields shown is limited to
# 10.
# Minimum value: 0, maximum value: 100, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.
UML_LIMIT_NUM_FIELDS = 10
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their
# instances.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = NO
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
# YES then doxygen will generate a graph for each documented file showing the
# direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = YES
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing
# the direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = YES
# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
CALL_GRAPH = NO
# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
CALLER_GRAPH = NO
# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
# hierarchy of all classes instead of a textual one.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GRAPHICAL_HIERARCHY = YES
# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
# dependencies a directory has on other directories in a graphical way. The
# dependency relations are determined by the #include relations between the
# files in the directories.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot.
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement).
# Possible values are: png, jpg, gif and svg.
# The default value is: png.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_IMAGE_FORMAT = png
# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
# enable generation of interactive SVG images that allow zooming and panning.
#
# Note that this requires a modern browser other than Internet Explorer. Tested
# and working are Firefox, Chrome, Safari, and Opera.
# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
# the SVG files visible. Older versions of IE do not have SVG support.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
INTERACTIVE_SVG = NO
# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_PATH =
# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the \dotfile
# command).
# This tag requires that the tag HAVE_DOT is set to YES.
DOTFILE_DIRS =
# The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the \mscfile
# command).
MSCFILE_DIRS =
# The DIAFILE_DIRS tag can be used to specify one or more directories that
# contain dia files that are included in the documentation (see the \diafile
# command).
DIAFILE_DIRS =
# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
# path where java can find the plantuml.jar file. If left blank, it is assumed
# PlantUML is not used or called during a preprocessing step. Doxygen will
# generate a warning when it encounters a \startuml command in this case and
# will not generate output for the diagram.
PLANTUML_JAR_PATH =
# When using plantuml, the specified paths are searched for files specified by
# the !include statement in a plantuml block.
PLANTUML_INCLUDE_PATH =
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
# that will be shown in the graph. If the number of nodes in a graph becomes
# larger than this value, doxygen will truncate the graph, which is visualized
# by representing a node as a red box. Note that doxygen if the number of direct
# children of the root node in a graph is already larger than
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
# Minimum value: 0, maximum value: 10000, default value: 50.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_GRAPH_MAX_NODES = 50
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
# generated by dot. A depth value of 3 means that only nodes reachable from the
# root by following a path via at most 3 edges will be shown. Nodes that lay
# further from the root node will be omitted. Note that setting this option to 1
# or 2 may greatly reduce the computation time needed for large code bases. Also
# note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
# Minimum value: 0, maximum value: 1000, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.
MAX_DOT_GRAPH_DEPTH = 0
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, because dot on Windows does not seem
# to support this out of the box.
#
# Warning: Depending on the platform used, enabling this option may lead to
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
# this, this feature is disabled by default.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_MULTI_TARGETS = NO
# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
# explaining the meaning of the various boxes and arrows in the dot generated
# graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
# files that are used to generate the various graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES
================================================
FILE: Emakefile.in
================================================
% behaviors first - otherwise there are compile warnings
{["src/cloud_beh.erl",
"src/crdt/types/crdt_beh.erl",
"src/db_backend_beh.erl",
"src/gen_component.erl",
"src/gossip_beh.erl",
"src/gossip_load_beh.erl",
"src/lb_active_beh.erl",
"src/lb_psv_beh.erl",
"src/pdb_beh.erl",
"src/rm_beh.erl",
"src/rrepair/hfs_beh.erl",
"src/rt_beh.erl",
"src/slide_beh.erl",
"src/transactions/tx_op_beh.erl"],
[debug_info,
inline_list_funcs,
warn_exported_vars,
warn_missing_spec,
warn_untyped_record,
warn_unused_import,
{outdir, "ebin"},
{i, "include"},
{i, "contrib/yaws/include"},
{i, "contrib/log4erl/include"}
@EMAKEFILEDEFINES@
@YAWS_OPTIONS@
]}.
% now the source and all of its sub-directories:
{["src/*",
"src/comm_layer/*",
"src/cp/*",
"src/crdt/*",
"src/crdt/types/*",
"src/json/*",
"src/paxos/*",
"src/rbr/*",
"src/rrepair/*",
"src/simulation/*",
"src/time/*",
"src/transactions/*",
"src/tx/*"],
[debug_info,
inline_list_funcs,
warn_exported_vars,
warn_missing_spec,
warn_untyped_record,
warn_unused_import,
{outdir, "ebin"},
{i, "ebin"},
{i, "include"},
{i, "contrib/yaws/include"},
{i, "contrib/log4erl/include"}
@EMAKEFILEDEFINES@
@YAWS_OPTIONS@
]}.
% unit tests:
{"test/*",
[debug_info,
inline_list_funcs,
nowarn_export_all,
warn_exported_vars,
warn_missing_spec,
warn_untyped_record,
warn_unused_import,
{outdir, "test"},
{i, "include"}
@EMAKEFILEDEFINES@
]}.
% contributing libraries:
{"contrib/log4erl/src/*",
[debug_info,
inline_list_funcs,
nowarn_obsolete_guard,
nowarn_unused_function,
nowarn_unused_vars,
{outdir, "contrib/log4erl/ebin/"},
{i, "contrib/log4erl/include"}
]}.
{"contrib/dotto/src/*",
[debug_info,
inline_list_funcs,
nowarn_obsolete_guard,
nowarn_unused_function,
nowarn_unused_vars,
{outdir, "contrib/dotto/ebin/"}
]}.
{"contrib/yaws/src/*",
[debug_info,
inline_list_funcs,
nowarn_obsolete_guard,
nowarn_unused_function,
nowarn_unused_vars,
{outdir, "contrib/yaws/ebin/"},
{i, "contrib/yaws/include"}
@YAWS_OPTIONS@
]}.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: Makefile.in
================================================
# Copyright 2007-2018 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
ERLC = @ERLC@
ERL = @ERL@
DIALYZER = @ERLANG_ROOT_DIR@/bin/dialyzer
ERL_LIB_DIR = @ERLANG_LIB_DIR@
CD = cd
MAKE = make
PYTHON2=@PYTHON2@
PYTHON3=@PYTHON3@
PYTHON3_2TO3=@PYTHON3_2TO3@
VERSION=@PACKAGE_VERSION@
OTP_ERLANG_VERSION=1.6.1
COMMONS_CLI_VERSION=1.2
SESSIONKEY:=$(shell cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-z' | fold -w 32 | head -n 1)
.PHONY: all bench bench-ssl bench-ssl-strict bench-ssl-strict-bad compile test test-vts cpp cpp-clean cpp-test java java-test java-bench java-* datanucleus datanucleus-test ycsb coverity python python-compile python-clean python-test python-bench python-doc-html python-doc-pdf python3 python3-convert python3-compile python3-clean python3-test python3-bench ruby-test interop-test dist-clean clean erlang-clean tags tags-clean docs dialyzer dialyzer-col rrd-init install install-all install-erlang install-java install-docs install-java-doc install-python-doc-html install-python-doc-pdf install-ruby install-python install-python3 test-clean nifs %_SUITE
APP_NAME = @PACKAGE_TARNAME@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
prefix = @prefix@
exec_prefix = @exec_prefix@
datarootdir = @datarootdir@
bindir = @bindir@
sysconfdir = @sysconfdir@
localstatedir = @localstatedir@
# /bin
BINDIR = $(DESTDIR)@bindir@
# /sbin
SBINDIR = $(DESTDIR)@sbindir@
# /usr/include
INCLUDEDIR = $(DESTDIR)@includedir@
# /usr/lib[64]
LIBDIR = $(DESTDIR)@libdir@
# /etc/scalaris/
ETCDIR = $(DESTDIR)@sysconfdir@/scalaris
# /etc/init.d/
INITDIR = $(DESTDIR)@sysconfdir@/init.d
# /etc/conf.d
SYSTEMD_CONFDIR = $(DESTDIR)@sysconfdir@/conf.d
# /usr/lib/systemd/system
SYSTEMD_UNITDIR = $(DESTDIR)@SYSTEMD_UNITDIR@
# /lib/scalaris/
SCALARISDIR = $(DESTDIR)${prefix}/lib/scalaris
# /lib/scalaris/ebin
BEAMDIR = $(SCALARISDIR)/ebin
# /lib/scalaris/docroot
DOCROOTDIR=$(SCALARISDIR)/docroot
# /share/doc/scalaris
DOCDIR=$(DESTDIR)@docdir@
# /share/java
JAVADIR=$(DESTDIR)@datarootdir@/java
# /var/log/scalaris
LOGDIR=$(DESTDIR)@localstatedir@/log/scalaris
# /var/run
RUNDIR=$(DESTDIR)@localstatedir@/run
# /usr/lib/ruby/site_ruby/1.8
RUBYSITELIBDIR=$(DESTDIR)@RUBYSITELIBDIR@
# /usr/lib/python2.7/site-packages
PYTHON2SITELIBDIR=$(DESTDIR)@PYTHON2SITELIBDIR@
# /usr/lib/python3.1/site-packages
PYTHON3SITELIBDIR=$(DESTDIR)@PYTHON3SITELIBDIR@
# paths of source files for make doc
SOURCEPATHS_ERL=src/* src/*/* include/* test/* contrib/log4erl/src/* contrib/yaws/src/*
# paths to contrib ebins that will be added to erlangs code path when
# executing a test related make target
CONTRIB_EBIN_PATHS = `pwd`/contrib/yaws/ebin `pwd`/contrib/log4erl/ebin `pwd`/contrib/dotto/ebin
# libraries needed to build a plt suitable for the dialyzer target
# (only add them if they are available (via wildcard call which
# results in nothing when no match exists))
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/common_test-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/compiler-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/crypto-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/debugger-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/edoc-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/erlang_js-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/erts-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/et-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/gs-*/ebin)
# currently not compatible:
# DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/hanoidb-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/hipe-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/inets-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/kernel-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/mnesia-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/observer-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/os_mon-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/public_key-*/ebin/)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/runtime_tools-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/sasl-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/snmp-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/ssh-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/ssl-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/stdlib-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/syntax_tools-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/test_server-*/ebin/)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/toke-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/tools-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/webtool-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/wx-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard $(ERL_LIB_DIR)/xmerl-*/ebin)
DIALYZER_PLT_LIBS += $(wildcard contrib/log4erl/ebin)
DIALYZER_PLT_LIBS += $(wildcard contrib/yaws/ebin)
DIALYZER_PLT_LIBS += $(wildcard contrib/dotto/ebin)
DIALYZER_PLT_LIBS += $(wildcard @BITCASK_LIBS@/ebin)
#DIALYZER_PLT_LIBS=$(DIALYZER_PLT_LIBS) $(ERL_LIB_DIR)/gs-*/contribs/ebin $(ERL_LIB_DIR)/wx-*/examples/*
DIALYZER_FLAGS ?=
SCALARIS_CT_PREFIX ?= ct
SCALARIS_CT_NAME = $(SCALARIS_CT_PREFIX)@`hostname -s`
# for java-test, java-bench and datanucleus-test:
SCALARIS_UNITTEST_PORT ?= 14194
SCALARIS_UNITTEST_YAWS_PORT ?= 8000
SCALARIS_JTEST_NAME ?= jtest_boot
NIFS_SRC_CPP=$(wildcard src/nifs/*.cpp)
NIFS_SO=$(subst src/nifs,priv,$(NIFS_SRC_CPP:.cpp=.so))
all: Makefile nifs compile tags
#all: compile dialyzer java test docs
#cp priv/xbin/*beam bin/
compile: .Emakefile contrib/log4erl/src/log4erl_parser.erl contrib/log4erl/src/log4erl_lex.erl
@$(ERL) -pa contrib/yaws -pa ebin -noinput +B -eval 'case make:all() of up_to_date -> halt(0); error -> halt(1) end.'
.Emakefile: Emakefile
$(MAKE) erlang-clean
touch $@
contrib/log4erl/src/log4erl_parser.erl: contrib/log4erl/src/log4erl_parser.yrl
cd contrib/log4erl/src && $(ERLC) log4erl_parser.yrl
contrib/log4erl/src/log4erl_lex.erl: contrib/log4erl/src/log4erl_lex.xrl
cd contrib/log4erl/src && $(ERL) -noinput -noshell -s leex file log4erl_lex.xrl -s init stop
test-all: all_TESTS java-test python-test ruby-test interop-test datanucleus-test
test: default_TESTS
test-skipped: skipped_TESTS
test-repeated: repeated_TESTS
test-ssl: ssl_TESTS
SUITES := $(patsubst test/%.erl,%,$(wildcard test/*_SUITE.erl))
${SUITES}: compile
# use non standard ports to run a single SUITE so it can be executed
# in parallel to a full test suite run or a locally running default
# scalaris session.
SCALARIS_UNITTEST_PORT=14193 SCALARIS_UNITTEST_YAWS_PORT=7999 @ERL@ -noshell -noinput @ERLANG_ERLANGJS_FLAGS@ @ERLANG_HANOIDB_FLAGS@ @ERLANG_TOKE_FLAGS@ @ERLANG_BITCASK_FLAGS@ -pa `pwd`/ebin `pwd`/test $(CONTRIB_EBIN_PATHS) -eval "runner:run_suite(\"test/$@\"), halt(0)" | tee ct_$@.log ; \
! grep -E "TEST COMPLETE, [0-9]+ ok, [1-9]+ failed" ct_$@.log
# define targets for single test cases of the form ::
define TEST_CASE_TARGET
# test group
$(1)\:%_GROUP: compile
# use non standard ports to run a single SUITE's test case so it can be executed
# in parallel to a full test suite run or a locally running default
# scalaris session.
SCALARIS_UNITTEST_PORT=14193 SCALARIS_UNITTEST_YAWS_PORT=7999 @ERL@ -noshell -noinput -pa `pwd`/ebin `pwd`/test $(CONTRIB_EBIN_PATHS) -eval "runner:run_suite_group(\"$(1)\", \"$$*\"), halt(0)" | tee ct_$(1).$$*_GROUP.log ; \
! grep -E "TEST COMPLETE, [0-9]+ ok, [1-9]+ failed" ct_$(1).$$*_GROUP.log
# single test case
$(1)\:%: compile
SCALARIS_UNITTEST_PORT=14193 SCALARIS_UNITTEST_YAWS_PORT=7999 @ERL@ -noshell -noinput -pa `pwd`/ebin `pwd`/test $(CONTRIB_EBIN_PATHS) -eval "runner:run_suite_case(\"$(1)\", \"$$*\"), halt(0)" | tee ct_$(1).$$*.log ; \
! grep -E "TEST COMPLETE, [0-9]+ ok, [1-9]+ failed" ct_$(1).$$*.log
endef
$(foreach SUITE,$(SUITES),$(eval $(call TEST_CASE_TARGET,$(SUITE))))
%_SUITE-with-cover: compile
@RUN_TEST@ $(UNITTESTARGS) -name $(SCALARIS_CT_NAME)_$@ @ERLANG_ERLANGJS_FLAGS@ @ERLANG_HANOIDB_FLAGS@ @ERLANG_TOKE_FLAGS@ @ERLANG_BITCASK_FLAGS@ -pa `pwd`/ebin `pwd`/test `pwd`-$(CONTRIB_EBIN_PATHS) -suite $*_SUITE -cover test/scalaris.coverspec -ct_hooks scalaris_cth -noshell | tee ct_$@.log ; \
! grep -E "TEST COMPLETE, [0-9]+ ok, [1-9]+ failed" ct_$@.log
%_TESTS: compile
@ERL@ -noshell -noinput @ERLANG_ERLANGJS_FLAGS@ @ERLANG_HANOIDB_FLAGS@ @ERLANG_TOKE_FLAGS@ @ERLANG_BITCASK_FLAGS@ -pa `pwd`/ebin `pwd`/test $(CONTRIB_EBIN_PATHS) -eval "runner:run_spec(\"test/$@.cfg\"), halt(0)" | tee ct_$@.log ; \
! grep -E "TEST COMPLETE, [0-9]+ ok, [1-9]+ failed" ct_$@.log
test-vts: compile
@RUN_TEST@ @ERLANG_ERLANGJS_FLAGS@ @ERLANG_HANOIDB_FLAGS@ @ERLANG_TOKE_FLAGS@ @ERLANG_BITCASK_FLAGS@ -pa `pwd`/ebin `pwd`/test $(CONTRIB_EBIN_PATHS) -dir . -cover test/scalaris.coverspec -vts -browser @BROWSER@ -ct_hooks scalaris_cth
test-clean:
-rm -rf ct_run.*@* ct.log ct-skipped.log ct_*_TESTS.log ct_*_SUITE.log ct_*_SUITE.*.log index.html all_runs.html variables-*@* ct_log_cache ct_default.css \
result_increment_10_1000.txt result_increment_1_10000.txt \
result_read_10_10000.txt result_read_1_100000.txt \
data/ct*@*
bench: compile
./bin/setup-ring.sh --ring-size 4 --session-key $(SESSIONKEY) start
./bin/jsonclient -p $(SCALARIS_UNITTEST_YAWS_PORT) benchmark
./bin/setup-ring.sh --ring-size 4 --session-key $(SESSIONKEY) stop
bench-ssl: compile
./bin/setup-ring.sh --ring-size 4 --session-key $(SESSIONKEY) --ssl start
./bin/jsonclient -s -p $(SCALARIS_UNITTEST_YAWS_PORT) benchmark
./bin/setup-ring.sh --ring-size 4 --session-key $(SESSIONKEY) --ssl stop
bench-ssl-strict: compile
./bin/setup-ring.sh --ring-size 4 --session-key $(SESSIONKEY) --ssl-strict start
./bin/jsonclient -s -p $(SCALARIS_UNITTEST_YAWS_PORT) benchmark
./bin/setup-ring.sh --ring-size 4 --session-key $(SESSIONKEY) --ssl-strict stop
bench-ssl-strict-bad: compile
( ./bin/setup-ring-for-benchmarks.sh --ssl-strict --bad-nodes 2 --ring-size 4 --node-prefix ebench_node start && \
echo "running bench:increment(10, 500)..." && \
$(ERL) -setcookie "chocolate chip cookie" -name bench_ctl -pa ebin/ -noinput -eval "rpc:call('ebench_node1@`hostname -f`', bench, increment, [10, 500]), halt(0)." && \
echo "running bench:quorum_read(10, 5000)..." && \
$(ERL) -setcookie "chocolate chip cookie" -name bench_ctl -pa ebin/ -noinput -eval "rpc:call('ebench_node1@`hostname -f`', bench, quorum_read, [10, 5000]), halt(0)." ) ; \
FAILED=$$? ; \
./bin/setup-ring-for-benchmarks.sh --ssl-strict --bad-nodes 2 --ring-size 4 --node-prefix ebench_node stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 log/ebench_*@"`hostname -f`"/* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
cpp:
(cd cpp-api && make)
cpp-clean:
(cd cpp-api && make clean)
cpp-test: compile cpp
SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$(SCALARIS_UNITTEST_PORT),mgmt_server} -scalaris known_hosts [{{127,0,0,1},$(SCALARIS_UNITTEST_PORT),service_per_vm}]" \
./bin/scalarisctl -d \
-y $(SCALARIS_UNITTEST_YAWS_PORT) \
-p $(SCALARIS_UNITTEST_PORT) \
-n "$(SCALARIS_JTEST_NAME)" -m -t first start ; \
( ./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" dbg-check-ring 1 30 && \
( cd cpp-api && make cpp-test ) ) ; \
FAILED=$$? ; \
./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
java:
ant -buildfile java-api/build.xml jar tools.test.compile scalaris.test.compile
java-test: compile java
SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$(SCALARIS_UNITTEST_PORT),mgmt_server} -scalaris known_hosts [{{127,0,0,1},$(SCALARIS_UNITTEST_PORT),service_per_vm}]" \
./bin/scalarisctl -d \
-y $(SCALARIS_UNITTEST_YAWS_PORT) \
-p $(SCALARIS_UNITTEST_PORT) \
-c "chocolate chip cookie" \
-n "$(SCALARIS_JTEST_NAME)" -m -t first start ; \
( ./bin/scalarisctl -c "chocolate chip cookie" -n "$(SCALARIS_JTEST_NAME)" dbg-check-ring 1 30 && \
ant -Dscalaris.node="$(SCALARIS_JTEST_NAME)" -buildfile java-api/build.xml test ) ; \
FAILED=$$? ; \
./bin/scalarisctl -c "chocolate chip cookie" -n "$(SCALARIS_JTEST_NAME)" stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
java-bench: compile java
( ./bin/setup-ring-for-benchmarks.sh --ring-size 4 --node-prefix jbench_node start && \
SCALARIS_JAPI_NODE="jbench_node1 jbench_node2 jbench_node3 jbench_node4" ./java-api/scalaris --noconfig -b $(SCALARIS_BENCHMARKS) ) ; \
FAILED=$$? ; \
./bin/setup-ring-for-benchmarks.sh --ring-size 4 --node-prefix jbench_node stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 log/jbench_*@"`hostname -f`"/* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
java-%:
ant -buildfile java-api/build.xml $*
datanucleus:
mvn -DskipGit -f java-api/pom.xml clean install
mvn -DskipGit -f contrib/datanucleus/scalaris-datanucleus-store/pom.xml clean install
mvn -f contrib/datanucleus/scalaris-datanucleus-store-test/pom.xml test -DskipTests
datanucleus-test: compile datanucleus
SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$(SCALARIS_UNITTEST_PORT),mgmt_server} -scalaris known_hosts [{{127,0,0,1},$(SCALARIS_UNITTEST_PORT),service_per_vm}]" \
./bin/scalarisctl -d \
-y $(SCALARIS_UNITTEST_YAWS_PORT) \
-p $(SCALARIS_UNITTEST_PORT) \
-c "chocolate chip cookie" \
-n "$(SCALARIS_JTEST_NAME)" -m -t first start ; \
( ./bin/scalarisctl -c "chocolate chip cookie" -n "$(SCALARIS_JTEST_NAME)" dbg-check-ring 1 30 && \
mvn -Dscalaris.node="$(SCALARIS_JTEST_NAME)" -f contrib/datanucleus/scalaris-datanucleus-store-test/pom.xml test ) ; \
FAILED=$$? ; \
./bin/scalarisctl -c "chocolate chip cookie" -n "$(SCALARIS_JTEST_NAME)" stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"* ; \
echo "####################" ; \
echo "Java messages (last 150 per log file):" ; \
echo "####################" ; \
tail -n 150 "contrib/datanucleus/scalaris-datanucleus-store-test/target/surefire-reports/"*.txt ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
ycsb:
mvn -f contrib/ycsb/pom.xml clean install
coverity: java datanucleus cpp
mvn -f contrib/ycsb/scalaris/pom.xml clean install
python: python-compile
python-compile:
$(PYTHON2) -mcompileall python-api
$(PYTHON2) -O -mcompileall python-api
python-clean:
rm -f python-api/*.pyc
rm -f python-api/*.pyo
python-test: compile python
SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$(SCALARIS_UNITTEST_PORT),mgmt_server} -scalaris known_hosts [{{127,0,0,1},$(SCALARIS_UNITTEST_PORT),service_per_vm}]" \
./bin/scalarisctl -d \
-y $(SCALARIS_UNITTEST_YAWS_PORT) \
-p $(SCALARIS_UNITTEST_PORT) \
-n "$(SCALARIS_JTEST_NAME)" -m -t first start ; \
( ./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" dbg-check-ring 1 30 && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" $(PYTHON2) python-api/scalaris_test.py -v ) ; \
FAILED=$$? ; \
./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
python-bench: compile python
( ./bin/setup-ring-for-benchmarks.sh --ring-size 4 start --node-prefix pbench_node && \
SCALARIS_JSON_URLS="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT) http://localhost:$$(($(SCALARIS_UNITTEST_YAWS_PORT)+1)) http://localhost:$$(($(SCALARIS_UNITTEST_YAWS_PORT)+2)) http://localhost:$$(($(SCALARIS_UNITTEST_YAWS_PORT)+3))" $(PYTHON2) python-api/scalaris_bench.py $(SCALARIS_BENCHMARKS) ) ; \
FAILED=$$? ; \
./bin/setup-ring-for-benchmarks.sh --ring-size 4 --node-prefix pbench_node stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 log/pbench_*@"`hostname -f`"/* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
python-doc-html:
cd python-api ; epydoc --config=epydoc.html.cfg ; FAILED=$$? ; cd .. ; \
if [ $$FAILED -ne 0 ]; then false ; else true ; fi
python-doc-pdf:
cd python-api ; epydoc --config=epydoc.pdf.cfg ; FAILED=$$? ; cd .. ; \
if [ $$FAILED -ne 0 ]; then false ; else true ; fi
python3: @ENABLEPYTHON3@
python3-not-found:
@echo "cannot create the Python3 API - python 3.x or 2to3 not found"
@false
python3-convert: python3-clean
if [ ! -d python3-api ]; then \
mkdir -p python3-api ; \
fi
cp python-api/*.py python3-api/
cd python3-api && $(PYTHON3_2TO3) -f all -f buffer -w -n . >/dev/null
python3-compile: python3-convert
$(PYTHON3) -mcompileall python3-api
$(PYTHON3) -O -mcompileall python3-api
python3-clean:
if [ -d python3-api ]; then \
rm -f python3-api/*.py ; \
rm -f python3-api/*.pyc ; \
rm -f python3-api/*.pyo ; \
if [ -d python3-api/__pycache__ ]; then \
rm -f python3-api/__pycache__/*.py ; \
rm -f python3-api/__pycache__/*.pyc ; \
rm -f python3-api/__pycache__/*.pyo ; \
rmdir --ignore-fail-on-non-empty python3-api/__pycache__ ; \
fi ; \
rmdir --ignore-fail-on-non-empty python3-api/ ; \
fi
python3-test: compile python3
SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$(SCALARIS_UNITTEST_PORT),mgmt_server} -scalaris known_hosts [{{127,0,0,1},$(SCALARIS_UNITTEST_PORT),service_per_vm}]" \
./bin/scalarisctl -d \
-y $(SCALARIS_UNITTEST_YAWS_PORT) \
-p $(SCALARIS_UNITTEST_PORT) \
-n "$(SCALARIS_JTEST_NAME)" -m -t first start ; \
( ./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" dbg-check-ring 1 30 && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" $(PYTHON3) python3-api/scalaris_test.py -v ) ; \
FAILED=$$? ; \
./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
python3-bench: compile python3
( ./bin/setup-ring-for-benchmarks.sh --ring-size 4 --node-prefix p3bench_node start && \
SCALARIS_JSON_URLS="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT) http://localhost:$$(($(SCALARIS_UNITTEST_YAWS_PORT)+1)) http://localhost:$$(($(SCALARIS_UNITTEST_YAWS_PORT)+2)) http://localhost:$$(($(SCALARIS_UNITTEST_YAWS_PORT)+3))" $(PYTHON3) python3-api/scalaris_bench.py $(SCALARIS_BENCHMARKS) ) ; \
FAILED=$$? ; \
./bin/setup-ring-for-benchmarks.sh --ring-size 4 --node-prefix p3bench_node stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 log/p3bench_*@"`hostname -f`"/* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
ruby-test: compile
SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$(SCALARIS_UNITTEST_PORT),mgmt_server} -scalaris known_hosts [{{127,0,0,1},$(SCALARIS_UNITTEST_PORT),service_per_vm}]" \
./bin/scalarisctl -d \
-y $(SCALARIS_UNITTEST_YAWS_PORT) \
-p $(SCALARIS_UNITTEST_PORT) \
-n "$(SCALARIS_JTEST_NAME)" -m -t first start ; \
( ./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" dbg-check-ring 1 30 && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" ruby-api/scalaris_test.rb -v ) ; \
FAILED=$$? ; \
./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"* ; \
echo "####################" ; \
false ; \
else \
true ; \
fi
interop-test: compile java java-scalaris.test.compile python
SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$(SCALARIS_UNITTEST_PORT),mgmt_server} -scalaris known_hosts [{{127,0,0,1},$(SCALARIS_UNITTEST_PORT),service_per_vm}]" \
./bin/scalarisctl -d \
-y $(SCALARIS_UNITTEST_YAWS_PORT) \
-p $(SCALARIS_UNITTEST_PORT) \
-c "chocolate chip cookie" \
-n "$(SCALARIS_JTEST_NAME)" -m -t first start ; \
( ./bin/scalarisctl -c "chocolate chip cookie" -n "$(SCALARIS_JTEST_NAME)" dbg-check-ring 1 30 && \
java -cp "java-api/scalaris.jar:java-api/lib/jakarta-commons-cli-1.2.jar:java-api/lib/OtpErlang-$(OTP_ERLANG_VERSION).jar:java-api/classes" -Dscalaris.node="$(SCALARIS_JTEST_NAME)" de.zib.scalaris.InterOpTest -write interop_test > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.java_write.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.java_write.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON2) python-api/scalaris_interop_test.py write interop_test > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_write.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_write.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" ruby-api/scalaris_interop_test.rb write interop_test > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.ruby_write.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.ruby_write.stderr.log && \
java -cp "java-api/scalaris.jar:java-api/lib/jakarta-commons-cli-1.2.jar:java-api/lib/OtpErlang-$(OTP_ERLANG_VERSION).jar:java-api/classes" -Dscalaris.node="$(SCALARIS_JTEST_NAME)" de.zib.scalaris.InterOpTest -read interop_test java > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.java_read_java.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.java_read_java.stderr.log && \
java -cp "java-api/scalaris.jar:java-api/lib/jakarta-commons-cli-1.2.jar:java-api/lib/OtpErlang-$(OTP_ERLANG_VERSION).jar:java-api/classes" -Dscalaris.node="$(SCALARIS_JTEST_NAME)" de.zib.scalaris.InterOpTest -read interop_test json_python > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.java_read_python.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.java_read_python.stderr.log && \
java -cp "java-api/scalaris.jar:java-api/lib/jakarta-commons-cli-1.2.jar:java-api/lib/OtpErlang-$(OTP_ERLANG_VERSION).jar:java-api/classes" -Dscalaris.node="$(SCALARIS_JTEST_NAME)" de.zib.scalaris.InterOpTest -read interop_test json_ruby > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.java_read_ruby.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.java_read_ruby.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON2) python-api/scalaris_interop_test.py read interop_test java > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_java.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_java.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON2) python-api/scalaris_interop_test.py read interop_test json_python > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_python.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_python.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON2) python-api/scalaris_interop_test.py read interop_test json_ruby > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_ruby.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_ruby.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" ruby-api/scalaris_interop_test.rb read interop_test java > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.ruby_read_java.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.ruby_read_java.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" ruby-api/scalaris_interop_test.rb read interop_test json_python > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.ruby_read_python.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.ruby_read_python.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" ruby-api/scalaris_interop_test.rb read interop_test json_ruby > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.ruby_read_ruby.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.ruby_read_ruby.stderr.log ) ; \
FAILED=$$? ; \
./bin/scalarisctl -c "chocolate chip cookie" -n "$(SCALARIS_JTEST_NAME)" stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
cat "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"interop.*write*.stderr.log ; \
cat "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"interop.*read*.stderr.log ; \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"{*.auth,report.log,scalaris_error_logger,scalaris_log4erl.txt} ; \
echo "####################" ; \
false ; \
else \
echo "all tests successful" ; \
true ; \
fi
# only test whether python2 and python3 read/write the same values - the rest is checked by interop-test
interop3-test: interop-test python3
SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$(SCALARIS_UNITTEST_PORT),mgmt_server} -scalaris known_hosts [{{127,0,0,1},$(SCALARIS_UNITTEST_PORT),service_per_vm}]" \
./bin/scalarisctl -d \
-y $(SCALARIS_UNITTEST_YAWS_PORT) \
-p $(SCALARIS_UNITTEST_PORT) \
-n "$(SCALARIS_JTEST_NAME)" -m -t first start ; \
( ./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" dbg-check-ring 1 30 && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON2) python-api/scalaris_interop_test.py write interop_test > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_write.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_write.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON3) python3-api/scalaris_interop_test.py write interop_test3 > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python3_write.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python3_write.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON2) python-api/scalaris_interop_test.py read interop_test json_python > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_python.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_python.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON2) python-api/scalaris_interop_test.py read interop_test3 json_python > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_python3.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python_read_python3.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON3) python3-api/scalaris_interop_test.py read interop_test json_python > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python3_read_python.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python3_read_python.stderr.log && \
SCALARIS_JSON_URL="http://localhost:$(SCALARIS_UNITTEST_YAWS_PORT)" PYTHONIOENCODING="utf_8" $(PYTHON3) python3-api/scalaris_interop_test.py read interop_test3 json_python > log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python3_read_python3.log 2> log/$(SCALARIS_JTEST_NAME)@`hostname -f`/interop.python3_read_python3.stderr.log ) ; \
FAILED=$$? ; \
./bin/scalarisctl -n "$(SCALARIS_JTEST_NAME)" stop ; \
if [ $$FAILED -ne 0 ]; then \
echo "####################" ; \
cat "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"interop.*write*.stderr.log ; \
cat "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"interop.*read*.stderr.log ; \
echo "####################" ; \
echo "Erlang messages (last 50 per log file):" ; \
echo "####################" ; \
tail -n 50 "log/$(SCALARIS_JTEST_NAME)@`hostname -f`/"{*.auth,report.log,scalaris_error_logger,scalaris_log4erl.txt} ; \
echo "####################" ; \
false ; \
else \
echo "all tests successful" ; \
true ; \
fi
# delete all generated files (including test results and logs)
dist-clean: clean test-clean log-clean
log-clean:
-rm -rf log/*
# delete all generated files except test results and logs
clean: erlang-clean nifs-clean tags-clean cpp-clean java-clean python-clean python3-clean
# delete all files related to our erlang sources
erlang-clean:
-rm -f .make-doc
-rm -f bin/*.beam
-rm -f ebin/*.beam
-rm -f src/*.beam
-rm -f src/comm_layer/*.beam
-rm -f contrib/yaws/ebin/*.beam
-rm -f contrib/log4erl/ebin/*.beam
-rm -f contrib/log4erl/src/log4erl_lex.erl
-rm -f contrib/log4erl/src/log4erl_parser.erl
-rm -f contrib/dotto/ebin/*
-rm -f test/*.beam
-rm -f doc/*.html
-rm -f doc/*.css
-rm -rf doc/edoc-info
-rm -f docroot/graphs/*.png
-rm -f TAGS TAGS.contrib
tags-clean:
-rm -f TAGS TAGS.root TAGS.contrib
tags: TAGS.root TAGS.contrib
@$(ERL) -noinput -noshell -eval 'tags:subdirs(["src", "include", "test"]), halt(0).' ; true
@cat TAGS.contrib TAGS.root >> TAGS ; true
TAGS.contrib:
@echo "making TAGS.contrib"
@$(ERL) -noinput -noshell -eval 'tags:subdir("contrib", [{outfile, "TAGS.contrib"}]), halt(0).' ; true
TAGS.root:
@echo "making TAGS.root"
@$(ERL) -noinput -noshell -eval 'tags:root([{outfile, "TAGS.root"}]), halt(0).' ; true
doc: .make-doc
.make-doc: $(SOURCEPATHS_ERL)
$(ERL) -noshell -run edoc_run application "'$(APP_NAME)'" \
'"."' '[{def, {vsn, "$(VERSION)"}}, no_packages, {preprocess, true}, {includes, ["include", "contrib/yaws/include", "contrib/log4erl/include"]}, {sort_functions, false}, {pretty_printer, erl_pp}, {macros, [@EDOCMACROS@]}]'
@touch .make-doc
docs: doc java-doc
dialyzer: compile
$(DIALYZER) @DIALYZER_FLAGS@ $(DIALYZER_FLAGS) -Wunmatched_returns -Wunknown -I include/ -I contrib/yaws/include/ -I contrib/log4erl/include/ --src -c src src/*/ src/*/*/ test --no_native --statistics
dialyzer-col:
$(MAKE) dialyzer | sed -f contrib/dialyzer-col.sed
plt: compile
$(DIALYZER) --plt_info > /dev/null ; \
EXISTSFAILED=$$? ; \
$(DIALYZER) --check_plt > /dev/null ; \
CHECKFAILED=$$? ; \
if [ $$EXISTSFAILED -ne 0 ]; then \
echo "building plt" ; \
$(DIALYZER) --build_plt $(DIALYZER_PLT_LIBS) ; \
elif [ $$CHECKFAILED -ne 0 ]; then \
echo "rebuilding outdated plt" ; \
$(DIALYZER) --build_plt $(DIALYZER_PLT_LIBS) ; \
else \
echo "adding Scalaris modules to plt" ; \
$(DIALYZER) --add_to_plt $(DIALYZER_PLT_LIBS) ; \
fi
rrd-init:
@echo This target is deprecated
nifs: $(NIFS_SO)
nifs-clean:
-rm -f $(NIFS_SO)
priv/%.so: src/nifs/%.cpp Makefile
@CXX@ @NIFFLAGS@ -I@ERLANG_ROOT_DIR@/erts-@ERLANG_LIB_VER_erts@/include @CXXFLAGS@ -fPIC -o $@ $<
install-doc: doc
install -d $(DOCDIR)
install -m 644 -t $(DOCDIR) \
AUTHORS README.md LICENSE ChangeLog
install -m 644 user-dev-guide/main.pdf $(DOCDIR)/user-dev-guide.pdf
install -d $(DOCDIR)/erlang
install -m 644 -t $(DOCDIR)/erlang \
doc/*.html \
doc/*.png
install -d $(DOCROOTDIR)
ln -sf @docdir@/erlang $(DOCROOTDIR)/doc
install-java-doc: java-doc
for dir in `find java-api/doc -type d`; do \
install -d "$(DOCDIR)/java-api$${dir#java-api/doc}" ; \
for file in `find "$$dir" -maxdepth 1 -type f`; do \
install -m 644 -t "$(DOCDIR)/java-api$${dir#java-api/doc}" "$${file}" ; \
done ; \
done
install-python-doc-html: python-doc-html
install -d $(DOCDIR)/python-api
install -d $(DOCDIR)/python-api/html
install -m 644 -t $(DOCDIR)/python-api/html \
python-api/doc/html/*
install-python-doc-pdf: python-doc-pdf
install -d $(DOCDIR)/python-api
install -d $(DOCDIR)/python-api/pdf
install -m 644 -t $(DOCDIR)/python-api/pdf \
python-api/doc/pdf/*.pdf
install-docs: install-doc install-java-doc
contrib/init.d/scalaris-first-monitor: contrib/init.d/scalaris-monitor
sed -e 's|initd.conf|initd-first.conf|g' \
-e 's|Provides: scalaris-monitor|Provides: scalaris-first-monitor|g' \
$${srcdir}$< > $@
install-java: java contrib/init.d/scalaris-first-monitor
install -d $(JAVADIR)/scalaris
install -d $(JAVADIR)/scalaris/lib
install -m 644 -t $(JAVADIR)/scalaris \
java-api/scalaris.jar
install -m 644 -t $(JAVADIR)/scalaris/lib \
java-api/lib/OtpErlang-$(OTP_ERLANG_VERSION).jar
install -m 644 -t $(JAVADIR)/scalaris/lib \
java-api/lib/jakarta-commons-cli-$(COMMONS_CLI_VERSION).jar
install -d $(ETCDIR)
install -m 644 java-api/scalaris-java.conf \
$(ETCDIR)/scalaris-java.conf
install -m 644 -t $(ETCDIR) \
java-api/scalaris-java.conf.sample
install -m 644 -t $(ETCDIR) \
java-api/scalaris.properties
install -d $(BINDIR)
install -m 755 -t $(BINDIR) \
java-api/scalaris
install -d $(INITDIR)
install -m 744 -t $(INITDIR) \
contrib/init.d/scalaris-monitor \
contrib/init.d/scalaris-first-monitor
contrib/init.d/scalaris-first: contrib/init.d/scalaris
sed -e 's|initd.conf|initd-first.conf|g' \
-e 's|Provides: scalaris|Provides: scalaris-first|g' \
$${srcdir}$< > $@
install-initd: contrib/init.d/scalaris-first
install -d $(ETCDIR)
install -m 644 -t $(ETCDIR) \
contrib/init.d/initd.conf \
contrib/init.d/initd-first.conf
install -d $(INITDIR)
install -m 744 -t $(INITDIR) \
contrib/init.d/scalaris \
contrib/init.d/scalaris-first
install -d $(SBINDIR)
ln -sf @sysconfdir@/init.d/scalaris $(SBINDIR)/rcscalaris
contrib/systemd/scalaris.service: contrib/systemd/scalaris.service.in Makefile
sed -e 's|@bindir[@]|$(bindir)|g' \
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
-e 's|@localstatedir[@]|$(localstatedir)|g' \
-e 's|Description=Scalaris node|Description=Scalaris management server and first node|g' \
$${srcdir}$@.in > $@
contrib/systemd/scalaris-first.service: contrib/systemd/scalaris.service
sed -e 's|conf.d/scalaris|conf.d/scalaris-first|g' \
$${srcdir}$< > $@
install-systemd: contrib/systemd/scalaris.service contrib/systemd/scalaris-first.service
install -d $(SYSTEMD_CONFDIR)
install -m 644 contrib/systemd/scalaris.conf \
$(SYSTEMD_CONFDIR)/scalaris
install -m 644 contrib/systemd/scalaris-first.conf \
$(SYSTEMD_CONFDIR)/scalaris-first
install -d $(SYSTEMD_UNITDIR)
install -m 644 -t $(SYSTEMD_UNITDIR) \
contrib/systemd/scalaris.service \
contrib/systemd/scalaris-first.service
install-erlang: compile @INSTALL_INIT@
install -d $(BEAMDIR)
install -m 644 -t $(BEAMDIR) \
ebin/*.beam
install -d $(ETCDIR)
install -m 644 -t $(ETCDIR) \
bin/scalarisctl.conf \
bin/scalaris.cfg \
bin/scalaris.local.cfg.example
if [ -f bin/scalaris.local.cfg ]; then \
install -m 644 -t $(ETCDIR) \
bin/scalaris.local.cfg; \
else \
touch $(ETCDIR)/scalaris.local.cfg ; \
fi
install -d $(DOCROOTDIR) \
$(DOCROOTDIR)/api \
$(DOCROOTDIR)/flot \
$(DOCROOTDIR)/icons \
$(DOCROOTDIR)/images/default \
$(DOCROOTDIR)/images/default/dd \
$(DOCROOTDIR)/images/default/panel \
$(DOCROOTDIR)/images/default/tree \
$(DOCROOTDIR)/images/default/grid \
$(DOCROOTDIR)/tablesort/blue
install -m 644 -t $(DOCROOTDIR) \
docroot/*.yaws \
docroot/*.css \
docroot/*.js \
docroot/*.gif \
docroot/*.ico
install -m 644 -t $(DOCROOTDIR)/api \
docroot/api/*
install -m 644 -t $(DOCROOTDIR)/flot \
docroot/flot/*
install -m 644 -t $(DOCROOTDIR)/icons \
docroot/icons/*.gif
install -m 644 -t $(DOCROOTDIR)/images/default/dd \
docroot/images/default/dd/*.gif
install -m 644 -t $(DOCROOTDIR)/images/default/panel \
docroot/images/default/panel/*.gif
install -m 644 -t $(DOCROOTDIR)/images/default/panel \
docroot/images/default/panel/*.png
install -m 644 -t $(DOCROOTDIR)/images/default/tree \
docroot/images/default/tree/*.gif
install -m 644 -t $(DOCROOTDIR)/images/default/grid \
docroot/images/default/grid/*.gif
install -m 644 -t $(DOCROOTDIR)/images/default/grid \
docroot/images/default/grid/*.png
install -m 644 -t $(DOCROOTDIR)/tablesort \
docroot/tablesort/*.js
install -m 644 -t $(DOCROOTDIR)/tablesort/blue \
docroot/tablesort/blue/*.gif
install -m 644 -t $(DOCROOTDIR)/tablesort/blue \
docroot/tablesort/blue/*.css
install -d $(SCALARISDIR)/contrib/yaws/ebin
install -d $(SCALARISDIR)/contrib/yaws/include
install -m 644 -t $(SCALARISDIR)/contrib/yaws/ebin \
contrib/yaws/ebin/*.beam
install -m 644 -t $(SCALARISDIR)/contrib/yaws/include \
contrib/yaws/include/yaws_api.hrl
install -d $(SCALARISDIR)/contrib/log4erl/ebin
install -m 644 -t $(SCALARISDIR)/contrib/log4erl/ebin \
contrib/log4erl/ebin/*.beam
install -d $(LOGDIR)
install -d $(RUNDIR)
install -d $(BINDIR)
install -m 755 -t $(BINDIR) \
bin/scalarisctl
install-cpp: cpp
install -d $(INCLUDEDIR)/scalaris
for dir in `find cpp-api/include -type d`; do \
install -d "$(INCLUDEDIR)/scalaris$${dir#cpp-api/include}" ; \
for file in `find "$$dir" -maxdepth 1 -type f`; do \
install -m 644 -t "$(INCLUDEDIR)/scalaris$${dir#cpp-api/include}" "$${file}" ; \
done ; \
done
install -d $(LIBDIR)
install -m 644 -t $(LIBDIR) cpp-api/libscalaris.a
install-ruby:
install -d $(RUBYSITELIBDIR)
install -m 644 -t $(RUBYSITELIBDIR) ruby-api/scalaris.rb
install -m 755 -t $(RUBYSITELIBDIR) ruby-api/scalaris_client.rb
install -d $(BINDIR)
install -m 755 ruby-api/scalaris $(BINDIR)/scalaris-ruby
install-python: python
install -d $(PYTHON2SITELIBDIR)
install -m 644 -p -t $(PYTHON2SITELIBDIR) python-api/scalaris.py*
install -m 644 -p -t $(PYTHON2SITELIBDIR) python-api/scalaris_bench.py*
install -m 755 -p -t $(PYTHON2SITELIBDIR) python-api/scalaris_client.py*
install -d $(BINDIR)
install -m 755 -p python-api/scalaris $(BINDIR)/scalaris-python
install-python3: python3
install -d $(PYTHON3SITELIBDIR)
install -m 644 -p -t $(PYTHON3SITELIBDIR) python3-api/scalaris.py*
install -m 644 -p -t $(PYTHON3SITELIBDIR) python3-api/scalaris_bench.py*
install -m 755 -p -t $(PYTHON3SITELIBDIR) python3-api/scalaris_client.py*
if [ -d python3-api/__pycache__ ]; then \
install -d $(PYTHON3SITELIBDIR)/__pycache__ ; \
install -m 644 -p -t $(PYTHON3SITELIBDIR)/__pycache__ \
python3-api/__pycache__/scalaris.*.py*; \
install -m 644 -p -t $(PYTHON3SITELIBDIR)/__pycache__ \
python3-api/__pycache__/scalaris_bench.*.py*; \
fi
install -d $(BINDIR)
install -m 755 -p python3-api/scalaris $(BINDIR)/scalaris-python3
install: install-erlang
install-all: install-erlang install-java install-docs @ENABLERUBYINSTALL@ @ENABLEPYTHON2INSTALL@ @ENABLEPYTHON3INSTALL@
Makefile: Makefile.in
@echo
@echo "Makefile is outdated. Please run './configure'."
@if [ -f ./config.status ]; then \
if [ "" != "`./config.status --config`" ]; then \
echo "For the parameters you used last time you may call"; \
echo "'./configure `./config.status --config|sed -e "s/'//g"`'."; \
fi fi
@echo
@exit 1
================================================
FILE: README.md
================================================
[](https://travis-ci.org/scalaris-team/scalaris)
[](https://www.openhub.net/p/scalaris)
Scalaris is a scalable, transactional, distributed and fault-tolerant
key-value-store with strong data consistency for online databases and
Web 2.0 services.
Instructions can be found in the [Users and Developers Guide](https://github.com/scalaris-team/scalaris/blob/master/user-dev-guide/main.pdf)
Additional information, including download links for rpm-packages, can
be found on the project homepage:
http://scalaris.zib.de/
================================================
FILE: VERSION
================================================
0.9.0+git
================================================
FILE: bin/.gitignore
================================================
/scalaris.local.cfg
/scalarisclient
/scalarisctl
/cs_local.sh
/cs_local2.sh
/cs_local3.sh
/boot.sh
/.scalaris.cfg.swp
================================================
FILE: bin/find_erlang.bat
================================================
@echo off
:: set path to erlang installation
SETLOCAL ENABLEDELAYEDEXPANSION
set ERL_R18_0=7.0.2 7.0.1 7.0
set ERL_R17_5=6.4.1 6.4
set ERL_R17_4=6.3.1 6.3
set ERL_R17_3=6.2.1 6.2
set ERL_R17_1=6.1.2 6.1.1 6.1
set ERL_R17=6.0.1 6.0
set ERL_R16B03=5.10.4.1 5.10.4
set ERL_R16B02=5.10.3.1 5.10.3
set ERL_R16B01=5.10.2
set ERL_R16B=5.10.1.2 5.10.1.1 5.10.1
set ERL_R15B03=5.9.3.1 5.9.3
set ERL_R15B02=5.9.2
set ERL_R15B01=5.9.1.2 5.9.1.1 5.9.1
set ERL_R15B=5.9.0.1 5.9
set ERL_R14B04=5.8.5
set ERL_ALL=%ERL_R18_0% %ERL_R17_5% %ERL_R17_4% %ERL_R17_3% %ERL_R17_1% %ERL_R17% %ERL_R16B03% %ERL_R16B02% %ERL_R16B01% %ERL_R16B% %ERL_R15B03% %ERL_R15B02% %ERL_R15B01% %ERL_R15B% %ERL_R14B04%
if not defined ERLANG_HOME (
FOR %%c in (%ERL_ALL%) DO (
FOR %%p in ("%ProgramFiles%\erl%%c" "%ProgramFiles(x86)%\erl%%c") DO (
set FULL_PATH=%%p
if exist !FULL_PATH! (
set ERLANG_HOME=%%p
goto found
)
)
)
)
:found
echo ERLANG_HOME=%ERLANG_HOME%
ENDLOCAL & set ERLANG_HOME=%ERLANG_HOME%
================================================
FILE: bin/firstnode.bat
================================================
@echo off
:: Copyright 2010-2015 Zuse Institute Berlin
::
:: Licensed under the Apache License, Version 2.0 (the "License");
:: you may not use this file except in compliance with the License.
:: You may obtain a copy of the License at
::
:: http://www.apache.org/licenses/LICENSE-2.0
::
:: Unless required by applicable law or agreed to in writing, software
:: distributed under the License is distributed on an "AS IS" BASIS,
:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
:: See the License for the specific language governing permissions and
:: limitations under the License.
SETLOCAL
for %%x in (%cmdcmdline%) do if %%~x==/c set DOUBLECLICKED=1
:: Script to start a new Scalaris system with an initial node.
set SCRIPTDIR=%~dp0
set ID=0
set params=%*
set NODE_NAME=firstnode
set /a CSPORT=14195+%ID%
set /a YAWSPORT=8000+%ID%
set SCALARIS_ADDITIONAL_PARAMETERS=-scalaris port %CSPORT% -scalaris yaws_port %YAWSPORT%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: scalaris configuration parameters
set SCALARIS_COOKIE=chocolate chip cookie
set SCALARISDIR=%SCRIPTDIR%..
set BEAMDIR=%SCALARISDIR%\ebin
set BACKGROUND=
::set BACKGROUND=-detached
set TOKEFLAGS=
:: note: paths passed as strings to erlang applications need to be escaped!
set LOGDIR=%SCALARISDIR:\=\\%\\log
set DOCROOTDIR=%SCALARISDIR:\=\\%\\docroot
set ETCDIR=%SCALARISDIR:\=\\%\\bin
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: set path to erlang installation
call "%SCRIPTDIR%"\find_erlang.bat
@echo on
pushd %BEAMDIR%
%ERLANG_HOME%\bin\erl.exe -setcookie "%SCALARIS_COOKIE%" ^
-pa "%SCALARISDIR%\contrib\yaws\ebin" ^
-pa "%SCALARISDIR%\contrib\log4erl\ebin" ^
-pa "%BEAMDIR%" %TOKEFLAGS% %BACKGROUND% ^
-yaws embedded true ^
-scalaris log_path "\"%LOGDIR%\"" ^
-scalaris docroot "\"%DOCROOTDIR%\"" ^
-scalaris config "\"%ETCDIR%\\scalaris.cfg\"" ^
-scalaris local_config "\"%ETCDIR%\\scalaris.local.cfg\"" ^
-scalaris start_type first ^
-scalaris start_mgmt_server true ^
-connect_all false -hidden -name %NODE_NAME% ^
%SCALARIS_ADDITIONAL_PARAMETERS% ^
-s scalaris %ERL_SCHED_FLAGS% %params%
popd
@echo off
if defined DOUBLECLICKED PAUSE
================================================
FILE: bin/firstnode.sh
================================================
#!/bin/bash
# Copyright 2007-2015 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Script to start a new Scalaris system with an initial node.
ID=0
NAME="firstnode"
PORT=$((14195+$ID))
YAWSPORT=$((8000+$ID))
ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
DIRNAME=`dirname $ABSPATH`
if [ 1 -le $# ]; then
ERLFLAGS="$@"
else
ERLFLAGS=" "
fi
# start a mgmt_server (-m)
# start the first node (-t first)
NODE_NAME_AND_PORTS="-n $NAME -p $PORT -y $YAWSPORT"
$DIRNAME/scalarisctl -e "$ERLFLAGS" -m $NODE_NAME_AND_PORTS -t first start
================================================
FILE: bin/joining_node.bat
================================================
@echo off
:: Copyright 2010-2015 Zuse Institute Berlin
::
:: Licensed under the Apache License, Version 2.0 (the "License");
:: you may not use this file except in compliance with the License.
:: You may obtain a copy of the License at
::
:: http://www.apache.org/licenses/LICENSE-2.0
::
:: Unless required by applicable law or agreed to in writing, software
:: distributed under the License is distributed on an "AS IS" BASIS,
:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
:: See the License for the specific language governing permissions and
:: limitations under the License.
SETLOCAL
for %%x in (%cmdcmdline%) do if %%~x==/c set DOUBLECLICKED=1
:: Script to start a node, that joins a running Scalaris system.
set SCRIPTDIR=%~dp0
set ID=1
set params=%*
:: extract node ID from first command line parameter
IF [%1]==[] goto start
set ID=%1
set params=
:: there is no easy way to get the rest of the parameters
:: -> loop through them and remove the first
:loop
shift
if [%1]==[] goto start
set params=%params% %1
goto loop
)
:start
set NODE_NAME=node%ID%
set /a CSPORT=14195+%ID%
set /a YAWSPORT=8000+%ID%
set SCALARIS_ADDITIONAL_PARAMETERS=-scalaris port %CSPORT% -scalaris yaws_port %YAWSPORT%
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: scalaris configuration parameters
set SCALARIS_COOKIE=chocolate chip cookie
set SCALARISDIR=%SCRIPTDIR%..
set BEAMDIR=%SCALARISDIR%\ebin
set BACKGROUND=
::set BACKGROUND=-detached
set TOKEFLAGS=
:: note: paths passed as strings to erlang applications need to be escaped!
set LOGDIR=%SCALARISDIR:\=\\%\\log
set DOCROOTDIR=%SCALARISDIR:\=\\%\\docroot
set ETCDIR=%SCALARISDIR:\=\\%\\bin
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: set path to erlang installation
call "%SCRIPTDIR%"\find_erlang.bat
@echo on
pushd %BEAMDIR%
%ERLANG_HOME%\bin\erl.exe -setcookie "%SCALARIS_COOKIE%" ^
-pa "%SCALARISDIR%\contrib\yaws\ebin" ^
-pa "%SCALARISDIR%\contrib\log4erl\ebin" ^
-pa "%BEAMDIR%" %TOKEFLAGS% %BACKGROUND% ^
-yaws embedded true ^
-scalaris log_path "\"%LOGDIR%\"" ^
-scalaris docroot "\"%DOCROOTDIR%\"" ^
-scalaris config "\"%ETCDIR%\\scalaris.cfg\"" ^
-scalaris local_config "\"%ETCDIR%\\scalaris.local.cfg\"" ^
-scalaris start_type joining ^
-connect_all false -hidden -name %NODE_NAME% ^
%SCALARIS_ADDITIONAL_PARAMETERS% ^
-s scalaris %ERL_SCHED_FLAGS% %params%
popd
@echo off
if defined DOUBLECLICKED PAUSE
================================================
FILE: bin/joining_node.sh
================================================
#!/bin/bash
# Copyright 2007-2017 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Script to start a node, that joins a running Scalaris system.
ID=1
if [ 1 -le $# ]; then
if echo $1 | grep "^[0-9]*$"> /dev/null
then
ID=$1
shift
fi;
fi
NAME="node$ID"
CSPORT=$((14195+$ID))
YAWSPORT=$((8000+$ID))
ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
DIRNAME=`dirname $ABSPATH`
if [ 1 -le $# ]; then
ERLFLAGS="$@"
else
ERLFLAGS=" "
fi
$DIRNAME/scalarisctl -e "$ERLFLAGS -scalaris config_kvs \"[{availibility_zone_id, $ID}]\"" -n $NAME -p $CSPORT -y $YAWSPORT -t joining start
================================================
FILE: bin/jsonclient.in
================================================
#!/bin/bash
# Copyright 2007-2018 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
prefix=@prefix@
exec_prefix=@exec_prefix@
BINDIR=@bindir@
IP="{127,0,0,1}"
PORT=8000
RINGSIZE=4
SSL=false
usage(){
echo "usage: jsonclient [options] "
echo " options:"
echo " -h - print this help message"
echo " -i - TCP IP for YAWS as Erlang tuple (default {127,0,0,1})"
echo " -p - TCP port for YAWS (default 8000)"
echo " -r - ring size (default 4)"
echo " -s - enable ssl (default false)"
echo " :"
echo " benchmark - run benchmarks"
echo " ringsize - get ring size"
echo " waitforringsize - wait for ring size"
echo ""
exit $1
}
fix_paths() {
ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
DIRNAME=`dirname $ABSPATH`
# is this a source checkout or an (rpm/deb/manual) installation?
if [ "$DIRNAME" != "$BINDIR" -a "$DIRNAME" != "/bin" ]; then
# scalaris
SCALARISDIR=`dirname $DIRNAME`
# scalaris/bin
BINDIR=$SCALARISDIR/bin
fi
}
jsonbenchmark() {
$BINDIR/scalarisctl -t client -e "-noinput -eval \"jsonclient:run_benchmark($IP, $PORT, $SSL), halt(0).\"" start
}
get_ring_size() {
$BINDIR/scalarisctl -t client -e "-noinput -eval \"jsonclient:get_ring_size(10000, $IP, $PORT, $SSL), halt(0).\"" start
}
wait_for_ring_size() {
$BINDIR/scalarisctl -t client -e "-noinput -eval \"jsonclient:wait_for_ring_size($RINGSIZE, 10000, $IP, $PORT, $SSL), halt(0).\"" start
}
fix_paths
until [ -z "$1" ]; do
OPTIND=1
case $1 in
"--help")
shift
usage 0;;
benchmark | ringsize | waitforringsize)
cmd="$1"
shift;;
*)
if getopts "hsx:i:p:r:" optionName; then
case "$optionName" in
i) IP=$OPTARG;;
p) PORT=$OPTARG;;
r) RINGSIZE=$OPTARG;;
s) SSL=true;;
h) usage 0;;
[?]) echo "Wrong parameter $1."
usage 1;;
esac
shift $(($OPTIND-1))
else
shift
usage 1
fi;;
esac
done
case $cmd in
benchmark)
jsonbenchmark;;
ringsize)
get_ring_size;;
waitforringsize)
wait_for_ring_size;;
*)
echo "Unknown command: $cmd."
usage 1;;
esac
================================================
FILE: bin/mgmt-server.sh
================================================
#!/bin/bash
# Copyright 2007-2015 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Script to start an empty Scalaris management server.
ID=0
NAME="mgmt_server"
PORT=$((14195+$ID))
YAWSPORT=$((8000+$ID))
ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
DIRNAME=`dirname $ABSPATH`
# start a mgmt_server
MGMT_NAME_AND_PORTS="-n mgmt_server -p 14194 -y 7999 "
$DIRNAME/scalarisctl $MGMT_NAME_AND_PORTS -t nostart -m "$@" start
================================================
FILE: bin/quorum_node.sh
================================================
#!/bin/bash
# Copyright 2007-2012 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Script to start a node, that joins a running Scalaris system.
ID=0
if [ 1 == $# ]; then
ID=$1
shift;
fi
NAME="node$ID"
CSPORT=$((14195+$ID))
YAWSPORT=$((8000+$ID))
ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
DIRNAME=`dirname $ABSPATH`
if [ 1 -le $# ]; then
ERLFLAGS="$@"
else
ERLFLAGS=" "
fi
$DIRNAME/scalarisctl -e "$ERLFLAGS" -n $NAME -p $CSPORT -y $YAWSPORT -t qourum -m -s start
================================================
FILE: bin/scalaris.cfg
================================================
% @copyright 2007-2017 Zuse Institute Berlin
% Licensed under the Apache License, Version 2.0 (the "License");
% you may not use this file except in compliance with the License.
% You may obtain a copy of the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS,
% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
% See the License for the specific language governing permissions and
% limitations under the License.
% $Id$
%% @doc how many scalaris nodes per vm
{nodes_per_vm,1}.
%% DeadNode Cache Parameters
%% @doc zombieDetectorInterval
{zombieDetectorInterval, 10000}.
%% @doc how many dead nodes have to be observed
{zombieDetectorSize, 10}.
%% log4erl log parameters (before log4erl is started, error_logger with
%% parameters from preconfig will be used)
{log_path, "../log"}.
%% @doc Loglevel: debug < info < warn < error < fatal < none
{log_level, warn}.
{log_level_file, warn}.
%% @doc Specify name without extension (".txt" will be used).
{log_file_name_log4erl, "scalaris_log4erl"}.
{log_file_size, 1048576}. % 1024*1024
{log_file_rotations, 4}. % results in to up to 5 files
%% @doc LogFormat, see Readme for log4erl
{log_format,"[%L] %l%n"}.
{log_format_file,"%j %T [%L] %l%n"}.
%% @doc the initial number of milliseconds between two failure
%% detector checks
{failure_detector_interval, 3000}.
%% @doc number of milliseconds between two re-registrations at the mgmt_server
{reregister_interval, 600000}.
%% @doc the replication degree of the system
{replication_factor, 3}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Overlay/ring maintenance
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% @doc the interval between two stabilization runs
{stabilization_interval_base, 10000}.
%% @doc the length of the successor list
{succ_list_length, 9}.
%% @doc the length of the predecessor list
{pred_list_length, 9}.
%% @doc the interval between two requests for new cyclon nodes to integrate
%% (in Seconds)
{tman_cyclon_interval, 5}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% routing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Use a cache which circumvents routing protocols once the destination
%% is known. However, this should only be used for benchmarking purposes etc.
%% in cases where the routing overhead is not desired, as this mechanism is
%% cannot handle node failures or ring reconfigurations.
%% See dht_node_cache.erl for details.
{cache_dht_nodes, false}.
%% @doc the interval between two finger/pointer stabilization runs
{pointer_base_stabilization_interval, 30000}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% redundancy
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% data redundancy strategy (default is replication)
{redundancy_module, replication}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% replication
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% key_creation algorithm
{key_creator, random}.
%% for modr
{availability_zone_id, 0}.
%{key_creator, random_with_bit_mask}.
% (randomkey band mask2) bor mask1
%{key_creator_bitmask, {16#00000000000000000000000000000000, 16#3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}}.
%{key_creator_bitmask, {16#40000000000000000000000000000000, 16#3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}}.
%{key_creator_bitmask, {16#80000000000000000000000000000000, 16#3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}}.
%{key_creator_bitmask, {16#C0000000000000000000000000000000, 16#3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% chord
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{chord_base, 64}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% (g)frtchord
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% @doc enable active learning lookups
{rt_frt_al, true}.
%% @doc the interval between active learning lookups for rt_frt
{rt_frt_al_interval, 5}. % in s
%% @doc configure the maximum size for routing tables.
{rt_frt_max_entries, 32}.
%% @doc the interval between gossip is queried for a ring size estimate
{rt_frt_gossip_interval, 10}. % in s
%% @doc choose the strategy for rt refinement.
%% - best_rt_reduction_ratio: send message if worse than reduction ratio for a best rt
%% - convergent_rt_reduction_ratio: send message if worse than reduction ratio for a convergent rt
{rt_frt_reduction_ratio_strategy, best_rt_reduction_ratio}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Gossip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Gossip based load aggregation
{gossip_load_interval, 1000}.
{gossip_load_min_cycles_per_round, 10}.
{gossip_load_max_cycles_per_round, 1000}.
{gossip_load_fanout, 1}.
{gossip_load_convergence_count_best_values, 10}.
{gossip_load_convergence_count_new_round, 20}.
{gossip_load_convergence_epsilon, 5.0}.
{gossip_load_number_of_buckets, 10}.
{gossip_load_additional_modules, [lb_active_gossip_load_metric, lb_active_gossip_request_metric]}.
%% Cyclon (gossip based peer sampling)
{gossip_cyclon_interval, 4900}.
{gossip_cyclon_cache_size, 20}.
{gossip_cyclon_shuffle_length, 8}.
%% Vivaldi (network coordinates)
{gossip_vivaldi_interval, 10000}. % in milliseconds
{gossip_vivaldi_dimensions, 2}.
{gossip_vivaldi_count_measurements, 10}.
{gossip_vivaldi_measurements_delay, 1}. % in seconds
{gossip_vivaldi_latency_timeout, 60}. % in seconds
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Ganglia
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{ganglia_enable, false}.
{ganglia_interval, 30000}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% DC clustering
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{dc_clustering_enable, false}.
{dc_clustering_interval, 20000}.
{dc_clustering_reset_interval, 60000}.
{dc_clustering_radius, 10000.0}. % 10 ms radius
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% transactions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{range_read_timeout, 5000}.
{tx_rtm_update_interval, 60000}.
{tx_timeout, 5000}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% paxos
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{learner_noinit_timeout, 5500}.
{acceptor_noinit_timeout, 5500}.
%% When set to true, replica will try to repair itself
%% if its sequence of write operations has gaps due to node failure.
%% Repair process is triggered upon receiving a write.
%% Only relevant if partial write operations are used (see write filter).
{prbr_repair_on_write, true}.
%% Maximum number of times a reading proposer retries its request without round
%% number increments consecutively observing an inconsistent state without progress
%% (i.e. the round numbers remain unchanged). If progress is made by some other proposer,
%% the number of retries is resetted. Using this option prevents write-through
%% cascades caused by concurrent readers.
{read_attempts_without_progress, 10}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% CRDT
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% The implementaiton of linearizable RSM for CRDTs.
% wf_crdt_paxos -> wait free wrapper around crdt_paxos
% crdt_paxos -> modified paxos optimized for CRDTs
% lattice -> implementation of Generalized Lattice Agreement (not practical msg sizes increase over time)
% zheng -> implementation of GLA_delta (Zheng et al: Linearizable Replicated State Machines With Lattice Agreement)
{crdt_rsm, crdt_paxos}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% node move
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{move_use_incremental_slides, true}.
{move_max_transport_entries, 1000}.
{move_wait_for_reply_timeout, 30000}. % logs a warning if no reply is received within this many ms (will be checked every ( div 4) ms)
{move_send_msg_retry_delay, 1000}. % after receiving a send_error, wait this many ms before re-trying
{move_send_msg_retries, 2}. % logs a warning if a message could not be delivered after this many retries
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% node join
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{join_request_timeout, 1000}.
{join_request_timeouts, 3}.
{join_lookup_timeout, 3000}.
{join_known_hosts_timeout, 1000}.
{join_timeout, 30000}.
{join_get_number_of_samples_timeout, 1000}.
{join_lb_psv, lb_psv_gossip}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% passive load balancing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{lb_psv_samples, 2}. % rely on lb_psv_gossip to give O(log n) samples
{lb_psv_split_fallback, split_address}. % or: keep_key
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% active load balancing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{lb_active, false}.
%% see lb_active.erl for available modules
%% set to none to disable balancing
{lb_active_module, lb_active_karger}.
%% see lb_stats.erl for available metrics
{lb_active_load_metric, reductions}.
%% set to db_reads, db_writes, or db_all
{lb_active_request_metric, db_all}.
%% set to items or requests
{lb_active_balance, requests}.
%% fall back to items if no requests available
{lb_active_fall_back_to_items, true}.
%% use global information about metrics
{lb_active_use_gossip, true}.
%% threshold to calculate the minimum change in standard deviation to
%% determine whether to initiate a load balancing operation
{lb_active_gossip_stddev_threshold, 1}.
%% between 0 and 1 to set the minimum ratio between the requests
%% received on items and the number of total items at a node
{lb_active_request_confidence, 0.1}.
%% size of the request histogram
%% (when higher more accuracy but slower processing)
{lb_active_histogram_size, 100}.
%% interval size for metric data
{lb_active_monitor_resolution, 5000}.
%% how often to collect metric data
{lb_active_monitor_interval, 3000}.
%% minimum number of old metric values to consider
{lb_active_monitor_history_min, 3}.
%% maximum number of old metric values to consider
{lb_active_monitor_history_max, 12}.
%% maximum of time to wait for pending ops
{lb_active_wait_for_pending_ops, 10000}.
%% Karger and Ruhl module (lb_active_karger)
{lb_active_karger_interval, 10000}.
%% 0 < epsilon < 0.25 or set to self_tuning
{lb_active_karger_epsilon, 0.24}.
%% random nodes to contact each round
{lb_active_karger_rnd_nodes, 2}.
%% make a decision after this timeout
{lb_active_karger_simulation_timeout, 3000}.
%% Directory module (lb_active_directories)
%% how often to publish node information in directories
{lb_active_directories_publish_interval, 10000}.
%% how often to check a directory for load balancing
{lb_active_directories_directory_interval, 10000}.
%% maximum load balancing operations for a directory to initiate at once
{lb_active_directories_max_transfer, 2}.
% in case of jumps:
% supports active load balancing with passive load balancing
% when the node rejoins the ring
{lb_active_and_psv, false}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% monitoring
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% for reported monitoring data, keep this many time slots (the slot length depends on the data)
{monitor_timeslots_to_keep, 360}. % 10s time slot -> keep data for 1 hour
{monitor_perf_interval, 30}. % start micro-benchmark every 30s (0 to disable)
{rrd_timing_hist_size, 20}. % for every timing value, create a histogram of size 20
% explicitly start OS monitor without active load balancing
{start_os_mon, false}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% network
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% port(s) for incoming communications, try one in this range
% (overwritten in startup scripts)
{port, {14195, 14198}}.
% http web server port for debug interface, JSON interface
% (overwritten in startup scripts)
{yaws_port, 8000}.
% the maximum size of a post request for the JSON-RPC
% (either a number of bytes, or nolimit)
{yaws_max_post_data, 1048576}. % 1MB
% http web server docroot
{docroot, "../docroot"}.
% Allows to restrict access to the web debug interface (including the JSON-RPC!).
% Expects a list of {"User", "Password"} tuples.
% Note: This will effectively disable the JSON-RPC including the Python and Ruby
% APIs as they are not prepared to handle authentication yet.
{yaws_auth, []}.
%{yaws_auth, [{"User", "Password"}]}.
%% the following two parameters should both be smaller than failure_detector_interval
{tcp_send_timeout, 1000}.
{tcp_connect_timeout, 1000}.
{tcp_idle_timeout, 30000}.
% default: listen on all interfaces:
{listen_ip, {0,0,0,0}}.
% default assume local testing
{mgmt_server, {{127,0,0,1},14195,mgmt_server}}.
{known_hosts, [{{127,0,0,1},14195, service_per_vm}, {{127,0,0,1},14196, service_per_vm},
{{127,0,0,1},14197, service_per_vm}, {{127,0,0,1},14198, service_per_vm}]}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% dht_node process modules (used for mockup_dht_node in unittests)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{dht_node, dht_node}.
%% collect lookup statistics?
{dht_node_monitor, true}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% rrepair processes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{rrepair_enabled, true}.
%{rr_recon_method, trivial}.
%{rr_recon_method, shash}.
%{rr_recon_method, bloom}.
{rr_recon_method, merkle_tree}.
%{rr_recon_method, art}.
% defines how many bits to use for encoding the version number in the 'trivial'
% phases of all above algorithms
{rr_recon_version_bits, 32}.
% minimum number of bits to use for hash signatures other than the version number (> 0)
% note that additionally, this value is limited by the used algorithm's max value
% -> you should not change this!
{rr_recon_min_sig_size, 1}.
% when a non-graceful leave of a pred is found, resolve the missing items
{rrepair_after_crash, true}.
% probability of starting a synchronisation with a random node if trigger
% has fired. ]0,100]
{rr_trigger_probability, 33}.
% integer duration until next triggering (milliseconds)
%{rr_trigger_interval, 0}. % = periodic trigger disabled
{rr_trigger_interval, 600000}. % =10*60*1000 (every 10 minutes)
% garbage collector execution interval (milliseconds)
{rr_gc_interval, 3600000}. % = 1*60*60*1000 (every hour)
% time to live for sessions until they are garbage collected (milliseconds)
{rr_session_ttl, 600000}. % =10*60*1000 (10 minutes)
% set reconciliaton accuracy in terms of the expected number of errors (>0)
{rr_recon_failure_rate, 0.1}.
% defines the expected amount of differences between two nodes in percent (>= 0, =< 100)
% this is used to tune the failure probabilities for the worst case with this delta
{rr_recon_expected_delta, 5}.
% specifies how many items to retrieve from the DB at once.
% (tries to reduce the load of a single request in the dht_node process)
{rr_max_items, 50000}. % pos_integer() | all.
% set reconciliation algorithm name, parameters (merkle)
{rr_merkle_branch_factor, 4}. % merkle tree branching factor thus number of childs per node (> 1)
{rr_merkle_bucket_size, 3}. % size of merkle tree leaf buckets (> 0)
% number of merkle trees a sync range is split into to reduce the number of
% message rounds when differences exist (it increases message costs when no
% differences exist though!)
{rr_merkle_num_trees, 32}. % (> 0)
% set reconciliation algorithm name, parameters (art)
% rr_merkle_branch_factor and rr_merkle_bucket_size from above are also used
{rr_art_inner_fpr, 0.001}.
{rr_art_leaf_fpr, 0.01}.
{rr_art_correction_factor, 2}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% leases
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%{leases, true}.
{leases_delta, 10}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% autoscale and cloud modules
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{autoscale, false}.
{autoscale_cloud_module, cloud_local}.
{autoscale_alarms, []}.
{autoscale_server, false}.
{autoscale_server_plot_path, ""}.
{cloud_local_min_vms, 0}.
{cloud_local_max_vms, 10}.
{cloud_ssh_hosts, []}.
{cloud_ssh_path, ""}.
{cloud_ssh_services, []}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% worker pool
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{wpool_maxw, 2}.
{wpool_js, false}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% db backend
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{db_backend, db_ets}. % Can be db_ets, db_mnesia, db_toke, db_hanoidb
{db_directory, "../data"}.
{ensure_recover, false}. % if true this will check on startup whether the current configuration allows recovery
{db_prbr_chunker, db_prbr}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% bitcask
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% interval in which a bitcask merge is triggered in seconds
{bitcask_merge_interval, 300}.
% initial time in seconds to wait before first merge. Note: Should be set to a value
% that ensures that all nodes are available at this time.
{bitcask_merge_offset, 60}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% extensions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{extensions, []}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ssl support
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{ssl_mode, normal}. %% host keys or ca with passwords
{comm_backend, gen_tcp}. % change to ssl
{cacertfile, "../ca.crt"}.
{certfile, "../host.cert"}.
{keyfile, "../host.key"}.
{ssl_password, "PaSSw0rd"}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% yaws ssl support
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{yaws_ssl, false}. %% set to true
{yaws_cacertfile, "../ca.crt"}.
{yaws_certfile, "../host.cert"}.
{yaws_keyfile, "../host.key"}.
{yaws_sslpassword, "PaSSw0rd"}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% protocol scheduler
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% define if proto_sched shoud preserve intra-link message delivery
% order by default. Note that this can be overridden on a per-execution
% basis by using proto_sched:thread_num/3.
{ordered_links, true}.
================================================
FILE: bin/scalaris.local.cfg.example
================================================
%% userdevguide-begin local_cfg:distributed
% Insert the appropriate IP-addresses for your setup
% as comma separated integers:
% IP Address, Port, and label of the boot server
{mgmt_server, {{127,0,0,1}, 14195, mgmt_server}}.
% IP Address, Port, and label of a node which is already in the system
{known_hosts, [{{127,0,0,1}, 14195, service_per_vm}]}.
%% userdevguide-end local_cfg:distributed
================================================
FILE: bin/scalaris.local.ssl.bad.cfg
================================================
% default: listen on all interfaces:
{listen_ip, {127,0,0,1}}.
% default assume local testing
{mgmt_server, {{127,0,0,1},14195,mgmt_server}}.
{known_hosts, [{{127,0,0,1},14195, service_per_vm}]}.
{ssl, true}.
{ssl_mode, strict}.
{comm_backend, ssl}.
{ssl_password, "password"}.
{cacertfile, "../badca.crt"}.
{certfile, "../badclient.crt"}.
{keyfile, "../badclient.key"}.
================================================
FILE: bin/scalaris.local.ssl.cfg
================================================
% default: listen on all interfaces:
{listen_ip, {127,0,0,1}}.
% default assume local testing
{mgmt_server, {{127,0,0,1},14195,mgmt_server}}.
{known_hosts, [{{127,0,0,1},14195, service_per_vm}]}.
{ssl, true}.
{ssl_mode, normal}.
{comm_backend, ssl}.
{certfile, "../host.cert"}.
{keyfile, "../host.key"}.
================================================
FILE: bin/scalaris.local.ssl.good.cfg
================================================
% default: listen on all interfaces:
{listen_ip, {127,0,0,1}}.
% default assume local testing
{mgmt_server, {{127,0,0,1},14195,mgmt_server}}.
{known_hosts, [{{127,0,0,1},14195, service_per_vm}]}.
{ssl, true}.
{ssl_mode, strict}.
{comm_backend, ssl}.
{ssl_password, "password"}.
{cacertfile, "../goodca.crt"}.
{certfile, "../goodclient.crt"}.
{keyfile, "../goodclient.key"}.
================================================
FILE: bin/scalarisctl.conf
================================================
# Copyright 2011-2018 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License"); you
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied. See the License for the specific language governing
# permissions and limitations under the License.
# Scalaris settings
================================================
FILE: bin/scalarisctl.in
================================================
#!/bin/bash
# Copyright 2007-2021 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
prefix=@prefix@
exec_prefix=@exec_prefix@
datarootdir=@datarootdir@
ERL=@ERL@
EPMD=@EPMD@
SCREEN=@SCREEN@
# /bin
BINDIR=@bindir@
# /etc/scalaris/
ETCDIR=@sysconfdir@/scalaris
# /lib/scalaris/
SCALARISDIR=${prefix}/lib/scalaris/
# /lib/scalaris/ebin
BEAMDIR=${SCALARISDIR}/ebin
# /lib/scalaris/docroot
DOCROOTDIR=${SCALARISDIR}/docroot
# /share/doc/scalaris
DOCDIR=@docdir@
# /share/java
JAVADIR=@datarootdir@/java
# may be overridden with the -l parameter
LOGDIR="$HOME/.scalaris/log"
# /usr/bin/scalaris
SCALARISCLIENT_JAVA=${exec_prefix}/bin/scalaris
SCALARISCLIENT_PYTHON=${exec_prefix}/bin/scalaris-python
SCALARISCLIENT_PYTHON3=${exec_prefix}/bin/scalaris-python3
SCALARISCLIENT_RUBY=${exec_prefix}/bin/scalaris-ruby
ERLANG_ADDITIONAL_FLAGS="@ERLANG_ERLANGJS_FLAGS@ @ERLANG_BITCASK_FLAGS@ @ERLANG_HANOIDB_FLAGS@ @ERLANG_TOKE_FLAGS@"
# By default, no emulator flags are used.
# This is still useful for passing flags to erl though.
ERL_SCHED_FLAGS=${ERL_SCHED_FLAGS-""}
# default values (commandline options change these parameters)
NODE_NAME=""
ERLANG_HOSTNAME=${ERLANG_HOSTNAME-""}
daemonize=0
first=0
verbose=0
port=""
yaws_port=""
join_at=""
join_at_list=""
start_mgmt_server=0
DIST_ERL_PORT=""
DAEMONIZE_SCREEN=0
cmd=""
NODES_PER_VM=""
SCALARIS_LOCAL_CFG="scalaris.local.cfg"
VERBATIM=""
usage(){
echo "usage: scalarisctl [options] "
echo " options:"
echo " -h - print this help message"
echo " -b - pass verbatim string to Scalaris"
echo " -d - daemonize"
echo " --screen - if daemonized, put an interactive session into screen"
echo " -e - pass additional parameters to erl"
echo " -n - Erlang process name (starts distributed Erlang required for Java API)"
echo " -c - Erlang cookie to use (for distributed Erlang)"
echo " -p - TCP port for the Scalaris node"
echo " -y - TCP port for the built-in webserver (YAWS)"
echo " -k - join at the given key"
echo " -j - join at the given list of keys"
echo " -v - verbose"
echo " -l - use this logdir base directory (will create a sub-folder"
echo " per node)"
echo " --dist-erl-port "
echo " - (single) port distributed erlang listens on"
echo " --nodes-per-vm "
echo " - number of Scalaris nodes to start inside the VM"
echo " -t - select start type: first|joining|quorum|recover|nostart|first_nostart|client"
echo " -m - start global Scalaris management server"
echo " -s - use the given file name as the scalaris.local.cfg"
echo " :"
echo " checkinstallation"
echo " - test installation"
echo " start - start services (see -m and -t)"
echo " stop - stop a scalaris process defined by its name (see -n)"
echo " restart - restart a scalaris process by its name (see -n)"
echo ""
echo " list - list locally running Erlang VMs"
echo " debug - connect to a running node via an Erlang shell"
echo " dbg-check-ring "
echo " - checks (up to) times whether Scalaris has"
echo " nodes and the ring maintenance has settled"
echo " (requires a mgmt_server)"
echo ""
exit $1
}
fix_paths() {
ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
DIRNAME=`dirname $ABSPATH`
# is this a source checkout or an (rpm/deb/manual) installation?
if [ "$DIRNAME" != "$BINDIR" -a "$DIRNAME" != "/bin" ]; then
# scalaris
SCALARISDIR=`dirname $DIRNAME`
# /etc/scalaris/
ETCDIR=$SCALARISDIR/bin
# scalaris/ebin
BEAMDIR=$SCALARISDIR/ebin
# scalaris/docroot
DOCROOTDIR=$SCALARISDIR/docroot
# scalaris/log
LOGDIR=$SCALARISDIR/log
# /usr/bin/scalaris
SCALARISCLIENT_JAVA="$SCALARISDIR/java-api/scalaris --noconfig"
SCALARISCLIENT_PYTHON="$SCALARISDIR/python-api/scalaris"
SCALARISCLIENT_PYTHON3="$SCALARISDIR/python3-api/scalaris"
SCALARISCLIENT_RUBY="$SCALARISDIR/ruby-api/scalaris"
SCALARISCLIENT_CPP="$SCALARISDIR/cpp-api/scalaris"
fi
}
get_hostname() {
# Uses the OS hostname from "hostname -f" for the Erlang long node name.
if [ -z "$ERLANG_HOSTNAME" ] ; then
ERLANG_HOSTNAME="`get_sys_hostname`"
fi
# Alternative using the hostname that erlang chooses if set up to start with a long node
# name and falls back to "hostname -f" if this is not possible:
# NOTE: In this case, the Java-API (if used as a library) is not always able
# to guess the host name that Erlang expects and connections may fail.
# Therefore, the convenience node spec "@localhost" may not be used.
# if [ -z "$ERLANG_HOSTNAME" ] ; then
# ERLANG_HOSTNAME="`get_erlang_hostname`"
# if [ -z "$ERLANG_HOSTNAME" ] ; then
# # could not start erlang with long node name (no FQDN?)
# ERLANG_HOSTNAME="`get_sys_hostname`"
# fi
# fi
echo "$ERLANG_HOSTNAME"
}
get_erlang_hostname() {
MY_HOSTNAME_ERL="`$ERL -name foo$$ -noinput -eval 'N=erlang:atom_to_list(node()),io:format("~s", [string:sub_string(N, string:chr(N, $@)+1)]), halt(0).' 2>/dev/null`"
if [ $? -ne 0 ] ; then
MY_HOSTNAME_ERL=
fi
echo "$MY_HOSTNAME_ERL"
}
get_sys_hostname() {
hostname -f
}
fix_node_name() {
# if the given node name includes an '@', leave untouched
if [ "" != "$NODE_NAME" ]; then
if ! echo $NODE_NAME | grep "@" >/dev/null ; then
NODE_NAME="$NODE_NAME@`get_hostname`"
fi
fi
}
# only get cookie from scalarisctl.conf if installed!
get_cookie() {
ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
DIRNAME=`dirname $ABSPATH`
if [ "$DIRNAME" = "$BINDIR" ]; then
# system config
. ${ETCDIR}/scalarisctl.conf
# load user scalaris configuration (overrides system config)
if [ -f "$HOME/.scalaris/scalarisctl.conf" ] ; then
. "$HOME/.scalaris/scalarisctl.conf"
fi
fi
echo -n ${cookie:-""}
}
cleanup_before_checkinstallation() {
if [ "" != "$NODE_NAME" ]; then
for pid in `ps aux | grep beam.smp | grep $NODE_NAME | awk '{print $2}'`;
do
#echo "Killing $pid..."
kill $pid
done
fi
}
checkinstallation() {
if [ "" = "$NODE_NAME" ]; then
NODE_NAME=`cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-z' | fold -w 8 | head -n 1`
fix_node_name
fi
echo "Running cleanup..."
cleanup_before_checkinstallation
echo -n "Running basic tests..."
MSG_FAILED="\x1b[1;31mFAILED\x1b[0m" #red
MSG_ATTENTION="\x1b[1;34mATTENTION\x1b[0m" #blue
MSG_SUCCESS="\x1b[1;32mSUCCESS\x1b[0m" #green
MSG_NOTINSTALLED="\x1b[1;34mNOT INSTALLED\x1b[0m" #blue
MSG_DONE="DONE"
# checking for $HOME
if [ "x$HOME" = "x" ]; then
echo -e "$MSG_FAILED"
echo "ERROR: \$HOME is not set"
echo "We were trying to read: \$HOME"
exit 1
fi
if [ ! -d "$HOME" ]; then
echo -e "$MSG_FAILED"
echo "ERROR: \$HOME does not point to a valid directory"
echo "We were trying to read: \$HOME"
exit 1
fi
$ERL -noinput -eval 'halt(0).'
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_FAILED"
echo "ERROR: erl could not be run"
echo "We were trying to run: erl -noinput -eval 'halt(0).'"
exit 1
fi
if [ ! -s `which erl` ]; then
echo -e "$MSG_FAILED"
echo "ERROR: your erl executable is of size zero bytes: `which erl`"
echo "ls -l `which erl`"
exit 1
fi
$ERL -noinput -name "checkinstallation" -eval 'halt(0).' > /dev/null 2>&1
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_ATTENTION"
echo "ERROR: erl could not create a Erlang VM named 'checkinstallation'"
echo "Please check the configuration of your hostnames"
echo "Are you already running another checkinstallation?"
echo "'scalarisctl list' gives you a list of currently registered Erlang VMs"
echo "We were trying to run: erl -noinput -name \"checkinstallation\" -eval 'halt(0).'"
echo -n "Continuing basic tests..."
fi
$ERL -noinput -name "checkinstallation@`get_hostname`" -eval 'halt(0).' > /dev/null 2>&1
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_ATTENTION"
echo "ERROR: erl could not create a Erlang VM named 'checkinstallation@`get_hostname`'"
echo "Are you already running another checkinstallation?"
echo "'scalarisctl list' gives you a list of currently registered Erlang VMs"
echo "We were trying to run: erl -noinput -name \"checkinstallation$NODE_NAME@`get_hostname`\" -eval 'halt(0).'"
echo -n "Continuing basic tests..."
fi
$ERL -noinput -eval 'case catch crypto:start() of ok -> halt(0); _ -> halt(1) end.' > /dev/null 2>&1
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_FAILED"
echo "ERROR: erlang could not start the crypto module"
echo "We were trying to run: $ERL -noinput -eval 'case catch crypto:start() of ok -> halt(0); _ -> halt(1) end.'"
exit 1
fi
if [ -e $ETCDIR/scalaris.cfg ]; then
$ERL -noinput -eval "case file:consult(\"$ETCDIR/scalaris.cfg\") of {error, _} -> halt(1); _ -> halt(0) end" > /dev/null 2>&1
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_FAILED"
echo "ERROR: there is a syntax error in: $ETCDIR/scalaris.cfg"
echo "We were trying to run: $ERL -noinput -eval \"A = file:consult(\"$ETCDIR/scalaris.cfg\"), io:format(\"~p~n\", [A]), halt(0) end\""
exit 1
fi
else
echo -e "$MSG_FAILED"
echo "ERROR: there is no config file: $ETCDIR/scalaris.cfg"
exit 1
fi
if [ -e $ETCDIR/$SCALARIS_LOCAL_CFG ]; then
$ERL -noinput -eval "case file:consult(\"$ETCDIR/$SCALARIS_LOCAL_CFG\") of {error, _} -> halt(1); _ -> halt(0) end" > /dev/null 2>&1
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_FAILED"
echo "ERROR: there is a syntax error in: $ETCDIR/$SCALARIS_LOCAL_CFG"
echo "We were trying to run: $ERL -noinput -eval \"A = file:consult(\"$ETCDIR/$SCALARIS_LOCAL_CFG\"), io:format(\"~p~n\", [A]), halt(0) end\""
exit 1
fi
fi
$ERL -noinput -pa $BEAMDIR -eval 'case {code:ensure_loaded(mgmt_server), code:ensure_loaded(dht_node)} of {{module,mgmt_server},{module,dht_node}} -> halt(0); X -> halt(1) end.' > /dev/null 2>&1
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_FAILED"
echo "ERROR: could not find Scalaris' beam files"
echo "We were trying to run: $ERL -noinput -pa $BEAMDIR -eval 'case {code:ensure_loaded(mgmt_server), code:ensure_loaded(dht_node)} of {{module,mgmt_server},{module,dht_node}} -> halt(0); X -> halt(1) end.'"
exit 1
fi
HOSTNAME_ERL=`get_erlang_hostname`
HOSTNAME_SYS=`get_sys_hostname`
if [ "$HOSTNAME_ERL" != "$HOSTNAME_SYS" ]; then
echo -e "$MSG_ATTENTION"
echo "ERROR: the hostnames reported by Erlang and the OS do not match."
echo "erlang (get_erlang_hostname): "
echo " -> $HOSTNAME_ERL"
echo "system (get_sys_hostname):"
echo " -> $HOSTNAME_SYS"
echo " If debugging does not work, try one of the following solutions:"
echo " - during start, specify a full node name using IPs with '-n node@'"
echo " - set environment variable ERLANG_HOSTNAME to your IP"
if [ -n "$HOSTNAME_ERL" ] ; then
echo " - during start, specify a full node name using the erlang hostname with '-n node@$HOSTNAME_ERL'"
echo " - set environment variable ERLANG_HOSTNAME to the erlang hostname"
fi
echo " - fix your hostname setup system-wide"
echo " Please refer to your system's manual to set your hostname, e.g. change the"
echo " values in /etc/hosts or /etc/hostname, and check that it is consistent with"
echo " the DNS."
exit 1
fi
$SCALARISCLIENT_JAVA -h > /dev/null 2>&1
FAILED=$?
if [ $FAILED -ne 0 ]; then
HAS_JAVACLIENT=0
echo -e "$MSG_ATTENTION"
echo "INFO: could not find Scalaris' Java-API files."
echo "You won't be able to use the 'scalaris' command line script to access Scalaris."
echo " 'make java' will build the Java-API"
echo "We were trying to run: $SCALARISCLIENT_JAVA -h"
echo -n "Continuing basic tests..."
else
HAS_JAVACLIENT=1
HOSTNAME_CTL=`get_hostname`
HOSTNAME_JAVA=`$SCALARISCLIENT_JAVA -lh --noerl`
if [ "$HOSTNAME_CTL" != "$HOSTNAME_JAVA" ]; then
echo -e "$MSG_ATTENTION"
echo "WARNING: the hostnames reported by Erlang, OS and Java do not match."
echo " You may run into trouble with the automatic '@localhost' to"
echo " '@' conversion done by the Java-API, e.g. if used through"
echo " scalaris.jar. Also, the java unit tests will probably not work."
echo " The java-api/scalaris script will work around this by using the same mechanism"
echo " that scalarisctl uses to start nodes."
echo " If you implement your own application either do not use \"@localhost\" in the"
echo " scalaris.properties file or set the scalaris.erlang.nodename system property"
echo " with the correct hostname (only the domain name part after the \"@\") or fix"
echo " your hostname setup system-wide."
echo " Please refer to your system's manual to set your hostname, e.g. change the"
echo " values in /etc/hosts or /etc/hostname, and check that it is consistent with"
echo " the DNS."
echo "scalarisctl: "
echo " -> $HOSTNAME_CTL"
echo "java: $SCALARISCLIENT_JAVA -lh"
echo " -> $HOSTNAME_JAVA"
echo -n "Continuing basic tests..."
fi
fi
CHECKCONFIGMSG=`$ERL -noinput -pa $BEAMDIR \
-scalaris config \"$ETCDIR/scalaris.cfg\" \
-scalaris local_config \"$ETCDIR/$SCALARIS_LOCAL_CFG\" \
-scalaris start_type nostart \
-s scalaris load -eval "config:init([]), halt(0)." 2>&1`
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_FAILED"
echo "$CHECKCONFIGMSG"
echo "ERROR: some parameters in the config files are wrong or missing"
echo "We were trying to run: \
$ERL -noinput -pa $BEAMDIR \
-scalaris config \"$ETCDIR/scalaris.cfg\" \
-scalaris local_config \"$ETCDIR/$SCALARIS_LOCAL_CFG\" \
-scalaris start_type nostart \
-s scalaris load -eval \"config:init([]), halt(0).\""
exit 1
fi
CHECKCONFIGMSG=`$ERL $ERL_SCHED_FLAGS -noinput -eval 'halt(0).'`
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_ATTENTION"
echo "$CHECKCONFIGMSG"
echo "WARNING: could not start erlang with the given $ERL_SCHED_FLAGS."
echo " Defaults will be used when running Scalaris."
echo " Use the ERL_SCHED_FLAGS environment variable to override the scheduler flags."
echo " You may need to include the +sct flag to set the CPU topology manually."
echo " Be default, not scheduler flags are used."
echo "We were trying to run: $ERL $ERL_SCHED_FLAGS -noinput -eval 'halt(0).'"
echo -n "Continuing basic tests..."
fi
CHECKCONFIGMSG=`$ERL -noinput -sasl sasl_error_logger false -boot start_sasl \
-eval "ok = application:start(erlang_js), {ok, JS} = js_driver:new(), ok = js:define(JS, <<\"var addOne = function(a){ return a + 1; }\">>), {ok,4} = js:call(JS, <<\"addOne\">>, [3]), halt(0)." > /dev/null 2>&1`
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e "$MSG_ATTENTION"
echo "$CHECKCONFIGMSG"
echo "WARNING: unable to start the erlang_js application"
echo " You won't be able to use JavaScript Map-Reduce jobs"
echo "We were trying to run: $ERL -noinput -sasl sasl_error_logger false -boot start_sasl -eval \"ok = application:start(erlang_js), {ok, JS} = js_driver:new(), ok = js:define(JS, <<\"var addOne = function(a){ return a + 1; }\">>), {ok,4} = js:call(JS, <<\"addOne\">>, [3]), halt(0).\""
echo -n "Continuing basic tests..."
fi
echo -e "$MSG_DONE"
echo "Running Scalaris run-time tests..."
# test runtime
if [ -z "$yaws_port" ]; then
echo " NOTE: yaws port not specified (you can specify it using -y for $0)."
echo " Python, Python3, Ruby, C++ API tests may fail if the port is different in"
echo " one of the config files."
else
export SCALARIS_JSON_URL="http://localhost:$yaws_port" # for single operations
export SCALARIS_JSON_URLS="http://localhost:$yaws_port" # for benchmarks
fi
if [ -n "$port" ]; then
export SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$port,mgmt_server} -scalaris known_hosts [{{127,0,0,1},$port,service_per_vm}]"
fi
export SCALARIS_JAPI_NODE="$NODE_NAME"
$0 -e "$erl_flags" -c "chocolate chip cookie" -d -t first -m -n "$NODE_NAME" -p "$port" -y "$yaws_port" start > /dev/null 2>&1
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo -e " Starting Scalaris \x1b[1;31mFAILED\x1b[0m"
echo " we were trying to run: $0 -d -t first -m start"
# try to stop anyway (it could have been a false alarm):
$0 -e "$erl_flags" -c "chocolate chip cookie" -d -t first -m -n "$NODE_NAME" -p "$port" -y "$yaws_port" stop > /dev/null 2>&1
exit 1
fi
# Check if Scalaris node has been started.
sleep 2s # let Scalaris settle
max_tries=58
try=0
while [ $try -lt $max_tries ] ; do
scalaris_nodes_count_actual="$(scalariscall "Res = rpc:call('$NODE_NAME', admin, number_of_nodes, []), io:format(\"~p~n\", [Res]), case Res of {badrpc, _Reason} -> halt(1); _ -> halt(0) end.")"
if [ $? -eq 0 ] ; then
if [ "$scalaris_nodes_count_actual" -ge 1 ] ; then
break
fi
fi
try=$((10#$try + 1))
sleep 1s
if [ $try -eq $max_tries ] ; then
echo -e " Starting Scalaris \x1b[1;31mFAILED\x1b[0m"
echo " (result: ${scalaris_nodes_count_actual})."
echo " we were trying to run: $0 -t first -m -d start"
# try to stop anyway (it could have been a false alarm):
$0 -e "$erl_flags" -c "chocolate chip cookie" -d -t first -m -n "$NODE_NAME" -p "$port" -y "$yaws_port" stop > /dev/null 2>&1
exit 1
fi
done
# testing Java:
echo -n " Java-API ... "
if [ "$HAS_JAVACLIENT" -eq 1 ]; then
# simple read/write
KEY="checkinstallation-java-$RANDOM"
JAVA_OUTPUT=`echo -e "> $SCALARISCLIENT_JAVA -r ${KEY}"`
JAVAREAD1_OUTPUT=`$SCALARISCLIENT_JAVA -r ${KEY} 2>&1`
echo "$JAVAREAD1_OUTPUT" | grep "failed with not found" > /dev/null 2>&1
JAVAREAD1_FAILED=$?
JAVA_OUTPUT=`echo -e "$JAVA_OUTPUT\n$JAVAREAD1_OUTPUT"`
JAVA_OUTPUT=`echo -e "$JAVA_OUTPUT\n> $SCALARISCLIENT_JAVA -w ${KEY} 1"`
JAVAWRITE1_OUTPUT=`$SCALARISCLIENT_JAVA -w ${KEY} 1 2>&1`
JAVAWRITE1_FAILED=$?
JAVA_OUTPUT=`echo -e "$JAVA_OUTPUT\n$JAVAWRITE1_OUTPUT"`
JAVA_OUTPUT=`echo -e "$JAVA_OUTPUT\n> $SCALARISCLIENT_JAVA -r ${KEY}"`
JAVAREAD2_OUTPUT=`$SCALARISCLIENT_JAVA -r ${KEY} 2>&1`
JAVAREAD2_FAILED=$?
JAVA_OUTPUT=`echo -e "$JAVA_OUTPUT\n$JAVAREAD2_OUTPUT"`
if [ $JAVAREAD1_FAILED -ne 0 -o $JAVAWRITE1_FAILED -ne 0 -o $JAVAREAD2_FAILED -ne 0 ]; then
JAVA_FAILED=1
JAVA_RESULT="$MSG_FAILED"
else
JAVA_FAILED=0
JAVA_RESULT="$MSG_SUCCESS"
fi
else
JAVA_FAILED=0
JAVA_RESULT="$MSG_NOTINSTALLED"
fi
echo -e "$JAVA_RESULT"
if [ "$verbose" -eq 1 -o "$JAVA_FAILED" -ne 0 ]; then
echo "$JAVA_OUTPUT"
fi
# testing Python:
echo -n " Python-API ... "
if [ -f "$SCALARISCLIENT_PYTHON" ]; then
# simple read/write
KEY="checkinstallation-python-$RANDOM"
PYTHON_OUTPUT=`echo -e "> $SCALARISCLIENT_PYTHON -r ${KEY}"`
PYTHONREAD1_OUTPUT=`$SCALARISCLIENT_PYTHON -r ${KEY} 2>&1`
echo "$PYTHONREAD1_OUTPUT" | grep "failed with not_found" > /dev/null 2>&1
PYTHONREAD1_FAILED=$?
PYTHON_OUTPUT=`echo -e "$PYTHON_OUTPUT\n$PYTHONREAD1_OUTPUT"`
PYTHON_OUTPUT=`echo -e "$PYTHON_OUTPUT\n> $SCALARISCLIENT_PYTHON -w ${KEY} 1"`
PYTHONWRITE1_OUTPUT=`$SCALARISCLIENT_PYTHON -w ${KEY} 1 2>&1`
PYTHONWRITE1_FAILED=$?
PYTHON_OUTPUT=`echo -e "$PYTHON_OUTPUT\n$PYTHONWRITE1_OUTPUT"`
PYTHON_OUTPUT=`echo -e "$PYTHON_OUTPUT\n> $SCALARISCLIENT_PYTHON -r ${KEY}"`
PYTHONREAD2_OUTPUT=`$SCALARISCLIENT_PYTHON -r ${KEY} 2>&1`
PYTHONREAD2_FAILED=$?
PYTHON_OUTPUT=`echo -e "$PYTHON_OUTPUT\n$PYTHONREAD2_OUTPUT"`
if [ $PYTHONREAD1_FAILED -ne 0 -o $PYTHONWRITE1_FAILED -ne 0 -o $PYTHONREAD2_FAILED -ne 0 ]; then
PYTHON_FAILED=1
PYTHON_RESULT="$MSG_FAILED"
else
PYTHON_FAILED=0
PYTHON_RESULT="$MSG_SUCCESS"
fi
else
PYTHON_FAILED=0
PYTHON_RESULT="$MSG_NOTINSTALLED"
fi
echo -e "$PYTHON_RESULT"
if [ "$verbose" -eq 1 -o "$PYTHON_FAILED" -ne 0 ]; then
echo "$PYTHON_OUTPUT"
fi
# testing Python3:
echo -n " Python3-API ... "
if [ -f "$SCALARISCLIENT_PYTHON3" ]; then
# simple read/write
KEY="checkinstallation-python3-$RANDOM"
PYTHON3_OUTPUT=`echo -e "> $SCALARISCLIENT_PYTHON3 -r ${KEY}"`
PYTHON3READ1_OUTPUT=`$SCALARISCLIENT_PYTHON3 -r ${KEY} 2>&1`
echo "$PYTHON3READ1_OUTPUT" | grep "failed with not_found" > /dev/null 2>&1
PYTHON3READ1_FAILED=$?
PYTHON3_OUTPUT=`echo -e "$PYTHON3_OUTPUT\n$PYTHON3READ1_OUTPUT"`
PYTHON3_OUTPUT=`echo -e "$PYTHON3_OUTPUT\n> $SCALARISCLIENT_PYTHON3 -w ${KEY} 1"`
PYTHON3WRITE1_OUTPUT=`$SCALARISCLIENT_PYTHON3 -w ${KEY} 1 2>&1`
PYTHON3WRITE1_FAILED=$?
PYTHON3_OUTPUT=`echo -e "$PYTHON3_OUTPUT\n$PYTHON3WRITE1_OUTPUT"`
PYTHON3_OUTPUT=`echo -e "$PYTHON3_OUTPUT\n> $SCALARISCLIENT_PYTHON3 -r ${KEY}"`
PYTHON3READ2_OUTPUT=`$SCALARISCLIENT_PYTHON3 -r ${KEY} 2>&1`
PYTHON3READ2_FAILED=$?
PYTHON3_OUTPUT=`echo -e "$PYTHON3_OUTPUT\n$PYTHON3READ2_OUTPUT"`
if [ $PYTHON3READ1_FAILED -ne 0 -o $PYTHON3WRITE1_FAILED -ne 0 -o $PYTHON3READ2_FAILED -ne 0 ]; then
PYTHON3_FAILED=1
PYTHON3_RESULT="$MSG_FAILED"
else
PYTHON3_FAILED=0
PYTHON3_RESULT="$MSG_SUCCESS"
fi
else
PYTHON3_FAILED=0
PYTHON3_RESULT="$MSG_NOTINSTALLED"
fi
echo -e "$PYTHON3_RESULT"
if [ "$verbose" -eq 1 -o "$PYTHON3_FAILED" -ne 0 ]; then
echo "$PYTHON3_OUTPUT"
fi
# testing Ruby:
echo -n " Ruby-API ... "
if [ -f "$SCALARISCLIENT_RUBY" ]; then
RUBY_OUTPUT=`echo -e "> $SCALARISCLIENT_RUBY -h"`
RUBYHELP_OUTPUT=`$SCALARISCLIENT_RUBY -h 2>&1`
RUBYHELP_FAILED=$?
RUBY_OUTPUT=`echo -e "$RUBY_OUTPUT\n$RUBYHELP_OUTPUT"`
if [ $RUBYHELP_FAILED -eq 0 ]; then
# simple read/write
KEY="checkinstallation-ruby-$RANDOM"
RUBY_OUTPUT=`echo -e "> $SCALARISCLIENT_RUBY -r ${KEY}"`
RUBYREAD1_OUTPUT=`$SCALARISCLIENT_RUBY -r ${KEY} 2>&1`
echo "$RUBYREAD1_OUTPUT" | grep "Scalaris::NotFoundError" > /dev/null 2>&1
RUBYREAD1_FAILED=$?
RUBY_OUTPUT=`echo -e "$RUBY_OUTPUT\n$RUBYREAD1_OUTPUT"`
RUBY_OUTPUT=`echo -e "$RUBY_OUTPUT\n> $SCALARISCLIENT_RUBY -w ${KEY},1"`
RUBYWRITE1_OUTPUT=`$SCALARISCLIENT_RUBY -w ${KEY},1 2>&1`
RUBYWRITE1_FAILED=$?
RUBY_OUTPUT=`echo -e "$RUBY_OUTPUT\n$RUBYWRITE1_OUTPUT"`
RUBY_OUTPUT=`echo -e "$RUBY_OUTPUT\n> $SCALARISCLIENT_RUBY -r ${KEY}"`
RUBYREAD2_OUTPUT=`$SCALARISCLIENT_RUBY -r ${KEY} 2>&1`
RUBYREAD2_FAILED=$?
RUBY_OUTPUT=`echo -e "$RUBY_OUTPUT\n$RUBYREAD2_OUTPUT"`
# note: we don't have a minibench for ruby...
if [ $RUBYREAD1_FAILED -ne 0 -o $RUBYWRITE1_FAILED -ne 0 -o $RUBYREAD2_FAILED -ne 0 ]; then
RUBY_FAILED=1
RUBY_RESULT="$MSG_FAILED"
else
RUBY_FAILED=0
RUBY_RESULT="$MSG_SUCCESS"
fi
else
RUBY_FAILED=1
RUBY_RESULT="$MSG_FAILED"
fi
else
RUBY_FAILED=0
RUBY_RESULT="$MSG_NOTINSTALLED"
fi
echo -e "$RUBY_RESULT"
if [ "$verbose" -eq 1 -o "$RUBY_FAILED" -ne 0 ]; then
echo "$RUBY_OUTPUT"
fi
# testing C++:
echo -n " C++ API ... "
if [ -f "$SCALARISCLIENT_CPP" ]; then
CPP_OUTPUT=`echo -e "> $SCALARISCLIENT_CPP --help"`
CPPHELP_OUTPUT=`$SCALARISCLIENT_CPP --help 2>&1`
CPPHELP_FAILED=$?
if [ $CPPHELP_FAILED -eq 0 ]; then
# simple read/write
KEY="checkinstallation-cpp-$RANDOM"
CPP_OUTPUT=`echo -e "> $SCALARISCLIENT_CPP --read ${KEY}"`
CPPREAD1_OUTPUT=`$SCALARISCLIENT_CPP --read ${KEY} 2>&1`
echo "$CPPREAD1_OUTPUT" | grep "ReadFailedError" > /dev/null 2>&1
CPPREAD1_FAILED=$?
CPP_OUTPUT=`echo -e "$CPP_OUTPUT\n$CPPREAD1_OUTPUT"`
CPP_OUTPUT=`echo -e "$CPP_OUTPUT\n> $SCALARISCLIENT_CPP --write ${KEY},1"`
CPPWRITE1_OUTPUT=`$SCALARISCLIENT_CPP --write ${KEY},1 2>&1`
CPPWRITE1_FAILED=$?
CPP_OUTPUT=`echo -e "$CPP_OUTPUT\n$CPPWRITE1_OUTPUT"`
CPP_OUTPUT=`echo -e "$CPP_OUTPUT\n> $SCALARISCLIENT_CPP --read ${KEY}"`
CPPREAD2_OUTPUT=`$SCALARISCLIENT_CPP --read ${KEY} 2>&1`
CPPREAD2_FAILED=$?
CPP_OUTPUT=`echo -e "$CPP_OUTPUT\n$CPPREAD2_OUTPUT"`
if [ $CPPREAD1_FAILED -ne 0 -o $CPPWRITE1_FAILED -ne 0 -o $CPPREAD2_FAILED -ne 0 ]; then
CPP_FAILED=1
CPP_RESULT="$MSG_FAILED"
else
CPP_FAILED=0
CPP_RESULT="$MSG_SUCCESS"
fi
else
CPP_FAILED=1
CPP_RESULT="$MSG_FAILED"
fi
else
CPP_FAILED=0
CPP_RESULT="$MSG_NOTINSTALLED"
fi
echo -e "$CPP_RESULT"
if [ "$verbose" -eq 1 -o "$CPP_FAILED" -ne 0 ]; then
echo "$CPP_OUTPUT"
fi
$0 -e "$erl_flags" -c "chocolate chip cookie" -d -f -m -n "$NODE_NAME" -p "$port" -y "$yaws_port" stop > /dev/null 2>&1
if [ "$JAVA_FAILED" -ne 0 -o "$PYTHON_FAILED" -ne 0 \
-o "$PYTHON3_FAILED" -ne 0 -o "$RUBY_FAILED" -ne 0 -o "$CPP_FAILED" -ne 0 ]; then
exit 1
fi
exit 0
}
scalarisstart(){
echo $NODE_NAME
if [ "" = "$NODE_NAME" ]; then
DISTRERL=""
echo "Starting without distributed Erlang. Java-API will not work."
echo
else
DISTRERL="-name $NODE_NAME"
fi
$ERL -noinput $DISTRERL -eval 'halt(0).' 2>/dev/null > /dev/null
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo ""
echo "ERROR: erl could not create a Erlang VM named '$NODE_NAME'"
echo "Are you already running a Scalaris server with this name?"
echo "You can change the name by the -n option (see -h)."
echo "'scalarisctl list' gives you a list of currently registered Erlang VMs"
echo "We were trying to run: erl -noinput $DISTRERL -eval 'halt(0).'"
list_erlang_processes
exit 1
fi
erl_flags="$ERL_SCHED_FLAGS $erl_flags"
if [ $daemonize -ne 0 -a $DAEMONIZE_SCREEN -eq 0 ]; then
BACKGROUND="-detached"
fi
local tmp
local COOKIE
tmp=""
COOKIE=""
if [ "$start_type" != "" ]; then
tmp="$tmp -scalaris start_type $start_type"
else
echo "the start-type is missing"
exit 1
fi
if [ "$port" != "" ]; then
tmp="$tmp -scalaris port $port"
fi
if [ "$VERBATIM" != "" ]; then
tmp="$tmp -scalaris verbatim $VERBATIM"
fi
if [ "$yaws_port" != "" ]; then
tmp="$tmp -scalaris yaws_port $yaws_port"
fi
if [ "$join_at" != "" ]; then
tmp="$tmp -scalaris join_at $join_at"
fi
if [ "$join_at_list" != "" ]; then
tmp="$tmp -scalaris join_at_list '$join_at_list'"
fi
if [ $start_mgmt_server -eq 1 ]; then
tmp="$tmp -scalaris start_mgmt_server true"
fi
if [ "$verbose" -eq 1 ]; then
tmp="$tmp -scalaris verbose true"
fi
if [ -n "$DIST_ERL_PORT" ]; then
tmp="$tmp -kernel inet_dist_listen_min $DIST_ERL_PORT inet_dist_listen_max $DIST_ERL_PORT"
fi
if [ -n "$NODES_PER_VM" ]; then
tmp="$tmp -scalaris nodes_per_vm \"$NODES_PER_VM\""
fi
if [ "$SCALARIS_COOKIE" != "" ]; then
COOKIE="-setcookie '$SCALARIS_COOKIE'"
fi
SCALARIS_ADDITIONAL_PARAMETERS="$SCALARIS_ADDITIONAL_PARAMETERS $tmp"
# if YAWSHOME is not the logdir, make sure to create the directory!
export YAWSHOME="$LOGDIR/$NODE_NAME"
mkdir -p "$LOGDIR/$NODE_NAME"
pushd $BEAMDIR > /dev/null
START_CMD="\"$ERL\" -pa $SCALARISDIR/contrib/yaws/ebin\
-pa $SCALARISDIR/contrib/log4erl/ebin\
-pa $SCALARISDIR/contrib/dotto/ebin\
-pa $BEAMDIR $ERLANG_ADDITIONAL_FLAGS $BACKGROUND\
-sasl sasl_error_logger false\
-yaws embedded true\
-scalaris log_path \"\\\"$LOGDIR/$NODE_NAME\\\"\"\
-scalaris docroot \"\\\"$DOCROOTDIR\\\"\"\
-scalaris config \"\\\"$ETCDIR/scalaris.cfg\\\"\"\
-scalaris local_config \"\\\"$ETCDIR/$SCALARIS_LOCAL_CFG\\\"\"\
-connect_all false -hidden $DISTRERL\
$SCALARIS_ADDITIONAL_PARAMETERS\
$COOKIE\
-s scalaris `echo $erl_flags`"
if [ $daemonize -ne 0 -a $DAEMONIZE_SCREEN -ne 0 ]; then
if [ -n "$SLURM_JOBID" ]; then
session_name="scalaris_$NODE_NAME"
$SCREEN -S "scalaris_${NODE_NAME}_SLURM_JOBID_${SLURM_JOBID}" -d -m bash -x -f +B -c "$START_CMD; sleep 365d"
else
$SCREEN -S "scalaris_$NODE_NAME" -d -m bash -x -f +B -c "$START_CMD; sleep 365d"
fi
else
bash -x -f +B -c "$START_CMD"
fi
FAILED=$?
if [ $FAILED -ne 0 ]; then
echo "ERROR: could not start scalaris"
echo " consider running scalarisctl checkinstallation"
exit 1
fi
popd > /dev/null 2>&1 || true
}
scalarisstop(){
FAILED=
pushd $BEAMDIR > /dev/null
if [ "$SCALARIS_COOKIE" != "" ]; then
$ERL -setcookie "$SCALARIS_COOKIE"\
-name "ctl_$RANDOM@`get_hostname`" \
-pa $BEAMDIR \
-noinput \
-s scalaris cli -extra $NODE_NAME stop
FAILED=$?
else
$ERL \
-name "ctl_$RANDOM@`get_hostname`" \
-pa $BEAMDIR \
-noinput \
-s scalaris cli -extra $NODE_NAME stop
FAILED=$?
fi
popd > /dev/null 2>&1 || true
return $FAILED
}
scalariscall(){
FAILED=
pushd $BEAMDIR > /dev/null
if [ "$SCALARIS_COOKIE" != "" ]; then
$ERL -setcookie "$SCALARIS_COOKIE" \
-name "ctl_$RANDOM@`get_hostname`" \
-pa $BEAMDIR \
-noinput \
-eval "$1"
FAILED=$?
else
$ERL \
-name "ctl_$RANDOM@`get_hostname`" \
-pa $BEAMDIR \
-noinput \
-eval "$1"
FAILED=$?
fi
popd > /dev/null 2>&1 || true
return $FAILED
}
scalarisgstop(){
scalariscall "Res = rpc:call('$NODE_NAME', api_vm, shutdown_vm, []), case Res of ok -> halt(0); _ -> io:format(\"~p~n\", [Res]), halt(1) end."
return $?
}
scalarisstatus(){
scalariscall "Res = rpc:call('$NODE_NAME', api_vm, number_of_nodes, []), case Res of N when is_integer(N) -> io:format(\"Number of nodes: ~p~n\", [Res]), halt(0); _ -> io:format(\"~p~n\", [Res]), halt(1) end."
return $?
}
list_erlang_processes(){
$EPMD -names || echo "could not run epmd"
}
debug(){
# look into epmd -list: boot or node
$ERL -pa $BEAMDIR -setcookie "$SCALARIS_COOKIE" -name "rem@`get_hostname`" -remsh $NODE_NAME `echo $erl_flags`
}
# checks whether Scalaris has nodes and ring maintenance has settled
# (requires a mgmt_server)
dbg_check_ring(){
exp_nodes=$1
max_tries=$2
try=1
while [ $try -le $max_tries ] ; do
scalaris_nodes_count_actual="$(scalariscall "Res = rpc:call('$NODE_NAME', admin, number_of_nodes, []), case Res of ${exp_nodes} -> halt(0); _ -> io:format(\"~p~n\", [Res]), halt(1) end.")"
if [ $? -eq 0 ] ; then
scalaris_check_ring="$(scalariscall "Res = rpc:call('$NODE_NAME', admin, check_ring_deep, []), case Res of ok -> halt(0); _ -> io:format(\"~p~n\", [Res]), halt(1) end.")"
if [ $? -eq 0 ] ; then
return 0
fi
fi
try=$((10#$try + 1))
sleep 1
if [ $try -gt $max_tries ] ; then
echo "ERROR: Failed to verify a total of ${exp_nodes} scalaris node(s) at node ${NODE_NAME}"
echo " (result: ${scalaris_nodes_count_actual})."
if [ -n "$scalaris_check_ring" ] ; then
echo "ERROR: check_ring_deep: ${scalaris_check_ring}."
fi
exit 1
fi
done
}
fix_paths
SCALARIS_COOKIE="`get_cookie`"
until [ -z "$1" ]; do
OPTIND=1
case $1 in
"--help")
shift
usage 0;;
"--dist-erl-port")
shift
DIST_ERL_PORT=$1
shift;;
"--screen")
shift
DAEMONIZE_SCREEN=1;;
"--nodes-per-vm")
shift
NODES_PER_VM=$1
shift;;
checkinstallation | start | stop | gstop | restart | list | debug | status)
cmd="$1"
shift;;
"dbg-check-ring")
cmd="$1"
shift
DBG_CHECK_RING_SIZE=$1
shift
DBG_CHECK_RING_TIMEOUT=$1
shift;;
*)
if getopts "dhifqmvn:p:y:k:j:e:c:l:s:t:b:" optionName; then
case "$optionName" in
b) VERBATIM=$OPTARG;;
c) SCALARIS_COOKIE=$OPTARG;;
e) erl_flags=$OPTARG;;
d) daemonize=1;;
h) usage 0;;
i) echo "WARN: interactive is now default";;
k) join_at=$OPTARG;;
j) join_at_list="$OPTARG";;
l) LOGDIR=$(readlink -m "$OPTARG");;
n) NODE_NAME=$OPTARG;;
p) port=$OPTARG;;
y) yaws_port=$OPTARG;;
m) start_mgmt_server=1;;
s) SCALARIS_LOCAL_CFG=$OPTARG;;
t) start_type=$OPTARG;;
v) echo setting verbose from cli
verbose=1;;
[?]) echo "Wrong parameter $1."
usage 1;;
esac
shift $(($OPTIND-1))
else
shift
usage 1
fi;;
esac
done
fix_node_name
case $cmd in
checkinstallation)
SCALARIS_COOKIE="chocolate chip cookie" # java hack
checkinstallation;;
start)
scalarisstart;;
status)
scalarisstatus;;
stop)
scalarisstop;;
gstop)
scalarisgstop;;
restart)
scalarisstop
scalarisstart;;
list)
list_erlang_processes;;
debug)
debug;;
dbg-check-ring)
if [ -z "$DBG_CHECK_RING_SIZE" -o -z "$DBG_CHECK_RING_TIMEOUT" ] ; then
usage 1
else
dbg_check_ring "$DBG_CHECK_RING_SIZE" "$DBG_CHECK_RING_TIMEOUT"
fi;;
*)
echo "Unknown command: $cmd."
usage 1;;
esac
================================================
FILE: bin/setup-ring-for-benchmarks.sh
================================================
#!/bin/bash
# Copyright 2007-2017 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
RINGSIZE=4
NODEPREFIX=ebench_node
BADNODES=0
WITHSSL=""
SCALARIS_UNITTEST_PORT=${SCALARIS_UNITTEST_PORT-"14195"}
SCALARIS_UNITTEST_YAWS_PORT=${SCALARIS_UNITTEST_YAWS_PORT-"8000"}
usage(){
echo "usage: setup-ring-for-benchmarks [options] "
echo " options:"
echo " --ring-size - the number of nodes"
echo " --ssl - enable ssl"
echo " --ssl-strict - enable ssl with CA"
echo " --bad-nodes - the number of nodes with different CA"
echo " :"
echo " start - start a ring"
echo " stop - stop a ring"
exit $1
}
start_ring(){
KEYS=`./bin/scalarisctl -t nostart -n "${NODEPREFIX}" -e "-noinput -eval \"io:format('\n%~p', [api_rt:escaped_list_of_keys(api_rt:get_evenly_spaced_keys($RINGSIZE))]), halt(0)\"" start | grep % | cut -c 3- | rev | cut -c 2- | rev`
export SCALARIS_ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$SCALARIS_UNITTEST_PORT,mgmt_server} -scalaris known_hosts [{{127,0,0,1},$SCALARIS_UNITTEST_PORT,service_per_vm}]"
idx=0
for key in $KEYS; do
let idx+=1
STARTTYPE=null
if [ "x$idx" == x1 ]
then
STARTTYPE="first -m"
TESTPORT=$SCALARIS_UNITTEST_PORT
YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT
else
STARTTYPE="joining"
let TESTPORT=$SCALARIS_UNITTEST_PORT+$idx-1
let YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT+$idx-1
fi
./bin/scalarisctl -d -k $key -n "${NODEPREFIX}$idx" -p $TESTPORT -y $YAWSPORT -t $STARTTYPE start $WITHSSL
done
for nodes in `seq 1 $BADNODES`; do
let idx+=1
let TESTPORT=$SCALARIS_UNITTEST_PORT+$idx-1
let YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT+$idx-1
./bin/scalarisctl -d -n "${NODEPREFIX}$idx" -p $TESTPORT -y $YAWSPORT -t joining -s scalaris.local.ssl.bad.cfg start
done
if [ $BADNODES -ne 0 ]; then
sleep 5 ## give bad nodes a chance to join
fi
./bin/scalarisctl -n "${NODEPREFIX}1" dbg-check-ring $RINGSIZE 30
}
stop_ring(){
let NODES=$RINGSIZE+$BADNODES
for idx in `seq 1 $NODES`; do
./bin/scalarisctl -n "${NODEPREFIX}$idx" stop
done
}
until [ -z "$1" ]; do
OPTIND=1
case $1 in
"--help")
shift
usage 0;;
"--ssl")
WITHSSL="-s scalaris.local.ssl.cfg"
shift;;
"--ssl-strict")
WITHSSL="-s scalaris.local.ssl.good.cfg"
shift;;
"--bad-nodes")
shift
BADNODES=$1
shift;;
"--ring-size")
shift
RINGSIZE=$1
shift;;
"--node-prefix")
shift
NODEPREFIX=$1
shift;;
start | stop)
cmd="$1"
shift;;
*)
shift
usage 1
esac
done
case $cmd in
start)
start_ring;;
stop)
stop_ring;;
*)
echo "Unknown command: $cmd."
usage 1;;
esac
================================================
FILE: bin/setup-ring.sh
================================================
#!/bin/bash
# Copyright 2018, 2019 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
RINGSIZE=4
WITHSSL=""
SSL=""
VMPREFIX=""
SCALARIS_UNITTEST_PORT=${SCALARIS_UNITTEST_PORT-"14195"}
SCALARIS_UNITTEST_YAWS_PORT=${SCALARIS_UNITTEST_YAWS_PORT-"8000"}
#SESSIONKEY=`cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-z' | fold -w 32 | head -n 1`
usage(){
echo "usage: setup-ring [options] "
echo " options:"
echo " --help - show this text"
echo " --ring-size - the number of nodes (default: 4)"
echo " --session-key - the session's key (mandatory)"
echo " --vm-prefix - the prefix for the vm names"
echo " :"
echo " start - start a ring"
echo " stop - stop a ring"
echo " kill - kill a node"
echo " recover - recover a ring"
exit $1
}
start_ring(){
KEYS=`./bin/scalarisctl -t client -e "-noinput -eval \"io:format('\n%~p', [api_rt:escaped_list_of_keys(api_rt:get_evenly_spaced_keys($RINGSIZE))]), halt(0)\"" start | grep % | cut -c 3- | rev | cut -c 2- | rev`
ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$SCALARIS_UNITTEST_PORT,mgmt_server} -scalaris known_hosts [{{127,0,0,1},$SCALARIS_UNITTEST_PORT,service_per_vm}] -scalaris verbatim $SESSIONKEY"
ADDITIONAL_PARAMETERS_BAK="$ADDITIONAL_PARAMETERS"
idx=0
for key in $KEYS; do
let idx+=1
STARTTYPE=null
if [ "x$idx" == x1 ]
then
STARTTYPE="first -m"
TESTPORT=$SCALARIS_UNITTEST_PORT
YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT
else
STARTTYPE="joining"
let TESTPORT=$SCALARIS_UNITTEST_PORT+$idx-1
let YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT+$idx-1
fi
if [ -n $VMPREFIX ]
then
export SCALARIS_ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS -scalaris vmname $VMPREFIX$idx"
else
export SCALARIS_ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS"
fi
./bin/scalarisctl -d -k $key -p $TESTPORT -y $YAWSPORT -t $STARTTYPE start $WITHSSL
done
export SCALARIS_ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS_BAK"
let TESTPORT=$SCALARIS_UNITTEST_PORT+$RINGSIZE
let YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT+$RINGSIZE
./bin/jsonclient -p $SCALARIS_UNITTEST_YAWS_PORT -r $RINGSIZE waitforringsize
# $SSL
}
recover_ring(){
KEYS=`./bin/scalarisctl -t client -e "-noinput -eval \"io:format('\n%~p', [api_rt:escaped_list_of_keys(api_rt:get_evenly_spaced_keys($RINGSIZE))]), halt(0)\"" start | grep % | cut -c 3- | rev | cut -c 2- | rev`
ADDITIONAL_PARAMETERS="-scalaris mgmt_server {{127,0,0,1},$SCALARIS_UNITTEST_PORT,mgmt_server} -scalaris known_hosts [{{127,0,0,1},$SCALARIS_UNITTEST_PORT,service_per_vm}] -scalaris verbatim $SESSIONKEY"
ADDITIONAL_PARAMETERS_BAK="$ADDITIONAL_PARAMETERS"
idx=0
for key in $KEYS; do
let idx+=1
STARTTYPE="recover"
if [ "x$idx" == x1 ]
then
TESTPORT=$SCALARIS_UNITTEST_PORT
YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT
else
let TESTPORT=$SCALARIS_UNITTEST_PORT+$idx-1
let YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT+$idx-1
fi
if [ -n $VMPREFIX ]
then
export SCALARIS_ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS -scalaris vmname $VMPREFIX$idx"
else
export SCALARIS_ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS"
fi
# to recover, we have to be located in the bin directory
(cd bin ; ./scalarisctl -d -k $key -p $TESTPORT -y $YAWSPORT -t $STARTTYPE start $WITHSSL)
done
export SCALARIS_ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS_BAK"
let TESTPORT=$SCALARIS_UNITTEST_PORT+$RINGSIZE
let YAWSPORT=$SCALARIS_UNITTEST_YAWS_PORT+$RINGSIZE
## TODO: also recover mgmt_server, so this check can be done
#./bin/jsonclient -p $SCALARIS_UNITTEST_YAWS_PORT -r $RINGSIZE waitforringsize
# $SSL
}
stop_ring(){
ps aux | grep beam.smp | grep "verbatim $SESSIONKEY" | awk '{print $2}' | xargs -n1 kill -9
}
kill_node(){
ps aux | grep beam.smp | grep "verbatim $SESSIONKEY" | grep -v "join_at 0" | awk '{print $2}' | head -n1 | xargs -n1 kill -9
}
MANDATORY=false
until [ -z "$1" ]; do
OPTIND=1
case $1 in
"--help")
shift
usage 0;;
"--ring-size")
shift
RINGSIZE=$1
shift;;
"--vm-prefix")
shift
VMPREFIX=$1
shift;;
"--session-key")
shift
SESSIONKEY=$1
MANDATORY=true
shift;;
"--ssl")
WITHSSL="-s scalaris.local.ssl.cfg"
SSL="-s"
shift;;
"--ssl-strict")
WITHSSL="-s scalaris.local.ssl.good.cfg"
shift;;
start | stop)
cmd="$1"
shift;;
kill)
cmd="$1"
shift;;
recover)
cmd="$1"
shift;;
*)
echo "Unknown parameter: $1."
shift
usage 1
esac
done
if [ "x$MANDATORY" == xfalse ]
then
echo "Mandatory --session-key parameter is missing"
usage 1
fi
case $cmd in
start)
start_ring;;
stop)
stop_ring;;
kill)
kill_node;;
recover)
recover_ring;;
*)
echo "Unknown command: $cmd."
usage 1;;
esac
================================================
FILE: bin/slurmctl
================================================
#!/bin/bash
FIRSTNODE=`scontrol show hostnames | head -n1`
LASTNODES=`scontrol show hostnames | tail -n +2`
JOINNODES=`echo $LASTNODES | sed s/\ /\,/g`
ETCDIR=""
fix_paths() {
ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
DIRNAME=`dirname $ABSPATH`
ERLPATH=`which erl`
BINDIR="dirname $ERLPATH"
# is this a svn checkout or an (rpm/deb/manual) installation?
if [ "$DIRNAME" != "$BINDIR" -a "$DIRNAME" != "/bin" ]; then
# scalaris
SCALARISDIR=`dirname $DIRNAME`
# /etc/scalaris/
ETCDIR=$SCALARISDIR/bin
else
echo "error: we do not support rpm/deb/manual installations"
exit
fi
}
fix_known_hosts() {
if [ ! -f "$ETCDIR/scalaris.local.cfg" ]; then
touch "$ETCDIR/scalaris.local.cfg"
fi
# save scalaris.local.cfg
cp $ETCDIR/scalaris.local.cfg $ETCDIR/scalaris.local.cfg.slurm-backup
echo "{known_hosts, [" >> $ETCDIR/scalaris.local.cfg
LASTNODE=`scontrol show hostnames | tail -n1`
for host in `scontrol show hostnames`; do
IP=$host
## TODO
## IP=`nslookup $host | grep Address | grep -v "#" | cut -d ' ' -f 2 | sed s/\\./\,/g`
IP1=`srun --nodelist=$host -N1 ifconfig eth0 | grep 'inet addr:' | cut -d ':' -f 2 | cut -d ' ' -f 1`
echo -n "{{" >> $ETCDIR/scalaris.local.cfg
echo -n $IP1 | sed s/\\./\,/g >> $ETCDIR/scalaris.local.cfg
if [ $LASTNODE != $host ]; then
echo "}, 14195, service_per_vm}," >> $ETCDIR/scalaris.local.cfg
else
echo "}, 14195, service_per_vm}" >> $ETCDIR/scalaris.local.cfg
fi
done
echo "]}." >> $ETCDIR/scalaris.local.cfg
## fix mgmt_server
echo -n "{mgmt_server, {{" >> $ETCDIR/scalaris.local.cfg
IP1=`srun --nodelist=$FIRSTNODE -N1 ifconfig eth0 | grep 'inet addr:' | cut -d ':' -f 2 | cut -d ' ' -f 1`
echo -n $IP1 | sed s/\\./\,/g >> $ETCDIR/scalaris.local.cfg
echo "}, 14195, mgmt_server}}." >> $ETCDIR/scalaris.local.cfg
}
usage(){
echo "usage slurm [options] "
echo " options:"
echo " --help - print this message"
echo " :"
echo " start"
echo " - start joining nodes on all but the first node"
echo " start an interactive first node on the first node"
echo " stop"
echo " - stop Erlang VM on all but the first node"
echo " kill"
echo " - kill all beam.smp processes"
echo " killscreens"
echo " - kill all scalaris screen sessions"
echo ""
exit $1
}
scalarisstart() {
fix_known_hosts
srun --nodelist=$JOINNODES -N$(expr $SLURM_NNODES - 1) ./bin/scalarisctl --screen -d -t joining start
srun --nodelist=$FIRSTNODE --pty -N1 ./bin/scalarisctl -m -t first start
}
scalarisstop() {
srun --nodelist=$JOINNODES -N$(expr $SLURM_NNODES - 1) ./bin/scalarisctl -t joining stop
scalariskillscreens
## restore scalaris.local.cfg
mv $ETCDIR/scalaris.local.cfg.slurm-backup $ETCDIR/scalaris.local.cfg
}
scalariskill() {
srun -N4 killall beam.smp
}
scalariskillscreens () {
srun -N4 bash -c "screen -ls | grep Detached | grep scalaris_node | cut -d. -f1 | awk '{print $1}' | xargs -r kill"
}
fix_paths
cmd=""
until [ -z "$1" ]; do
OPTIND=1
case $1 in
"--help")
shift
usage 0;;
start | stop | kill | killscreens)
cmd="$1"
shift;;
*)
esac
done
case $cmd in
start)
scalarisstart;;
stop)
scalarisstop;;
kill)
scalariskill;;
killscreens)
scalariskillscreens;;
*)
echo "Unknown command: $cmd."
usage 1;;
esac
================================================
FILE: bootstrap.sh
================================================
#!/bin/bash
# Copyright 2007-2018 Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
## update version ##
VERSION=`cat VERSION`
VERSION_NOPLUS=`echo "${VERSION}" | tr + _`
if [[ "$VERSION" == *git* ]]; then
## maven snapshot versions must have revision incremented by 1 so that
## maven sees them as a newer version than the release
VERSION_NOGIT=${VERSION%+git*}
MAJOR_MINOR=${VERSION_NOGIT%.*}
REVISION=${VERSION_NOGIT##*.}
((REVISION++))
VERSION_MAVEN="$MAJOR_MINOR.$REVISION-SNAPSHOT"
else
VERSION_MAVEN=$VERSION
fi
## echo "Setting Scalaris version to ${VERSION}..."
## sed -e "s/-define(SCALARIS_VERSION, \".*\")\\./-define(SCALARIS_VERSION, \"${VERSION}\")./g" \
## -i include/scalaris.hrl
## sed -e "s/AC_INIT(scalaris, .*, scalaris@googlegroups.com)/AC_INIT(scalaris, ${VERSION}, scalaris@googlegroups.com)/g" \
## -i configure.ac
## sed -e "s/public static final String version = \".*\";/public static final String version = \"${VERSION}\";/g" \
## -i contrib/wikipedia/src/de/zib/scalaris/examples/wikipedia/bliki/WikiServlet.java
## sed -e "s/version='.*',/version='${VERSION}',/g" \
## -i python-api/setup.py
## sed -e "s/SCALARIS_VERSION=\".*\"/SCALARIS_VERSION=\"${VERSION}\"/g" \
## -i contrib/packages/*/checkout.sh
## sed -e "s/%define pkg_version .*/%define pkg_version ${VERSION}/g" \
## -i contrib/packages/*/*.spec
## sed -e "s/Version: .*-.*/Version: ${VERSION}-1/g" \
## -i contrib/packages/*/*.dsc
## sed -e "0,/(.*-.*)/s//(${VERSION}-1)/" \
## -i contrib/packages/*/debian.changelog
## sed -e "0,/.*<\/version>/s//${VERSION_MAVEN}<\/version>/" \
## -i java-api/pom.xml contrib/datanucleus/scalaris-datanucleus-store/pom.xml
## sed -e "s/module scalaris .*;/module scalaris ${VERSION_NOPLUS};/g" \
## -i contrib/systemd/scalaris.te
## if [[ "$VERSION" == *git* ]]; then
## RELEASE="unstable"
## else
## RELEASE="stable"
## fi
## sed -e "0,/u*n*stable;/s//${RELEASE};/" \
## -i contrib/packages/*/debian.changelog
## echo "done"
## sed -e "s/pkgver=.*/pkgver=${VERSION}/g" \
## -i contrib/packages/*/PKGBUILD
##########
if [ -z `which automake` ]
then
echo "automake is missing."
echo "Please install automake."
exit
fi
if [ -z `which aclocal` ]
then
echo "aclocal is missing."
echo "Please install automake."
exit
fi
# pretend to use automake
touch Makefile.am NEWS READ COPYING README INSTALL
if [ ! -d python3-api ]
then
mkdir python3-api
touch python3-api/scalaris.in
fi
cp Makefile.in Makefile.in.bak
echo "Creating configure script"
autoreconf --verbose --force --install # -Wall
echo ""
echo "A ./configure file should be created."
echo "Please proceed with calling './configure'"
# undo automake
rm Makefile.am NEWS READ COPYING README INSTALL
mv Makefile.in.bak Makefile.in
ACLOCAL=`which aclocal`
ACLOCAL_BIN_DIRECTORY=`dirname $ACLOCAL`
ACLOCAL_BASE_DIRECTORY=`dirname $ACLOCAL_BIN_DIRECTORY`
ACLOCAL_SHARE_DIRECTORY="$ACLOCAL_BASE_DIRECTORY/share/aclocal"
#echo $ACLOCAL_BIN_DIRECTORY
#echo $ACLOCAL_BASE_DIRECTORY
#echo $ACLOCAL_SHARE_DIRECTORY
if [ -e "$ACLOCAL_SHARE_DIRECTORY/intlmacosx.m4" ]; then
#echo "found aclocal directory"
if [ ! -e "$ACLOCAL_SHARE_DIRECTORY/ax_boost_system.m4" ]; then
echo ""
echo "for the save creation of the configure file, it is helpful to have the autoconf-archive package installed"
echo "autoconf-archive seems to be missing on your system"
echo "we checked for $ACLOCAL_SHARE_DIRECTORY/ax_boost_system.m4, but it does not exist"
fi
fi
================================================
FILE: build-aux/compile
================================================
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
scriptversion=2016-01-11.22; # UTC
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
# Written by Tom Tromey .
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to or send patches to
# .
nl='
'
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent tools from complaining about whitespace usage.
IFS=" "" $nl"
file_conv=
# func_file_conv build_file lazy
# Convert a $build file to $host form and store it in $file
# Currently only supports Windows hosts. If the determined conversion
# type is listed in (the comma separated) LAZY, no conversion will
# take place.
func_file_conv ()
{
file=$1
case $file in
/ | /[!/]*) # absolute file, and not a UNC file
if test -z "$file_conv"; then
# lazily determine how to convert abs files
case `uname -s` in
MINGW*)
file_conv=mingw
;;
CYGWIN*)
file_conv=cygwin
;;
*)
file_conv=wine
;;
esac
fi
case $file_conv/,$2, in
*,$file_conv,*)
;;
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
cygwin/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
file=`winepath -w "$file" || echo "$file"`
;;
esac
;;
esac
}
# func_cl_dashL linkdir
# Make cl look for libraries in LINKDIR
func_cl_dashL ()
{
func_file_conv "$1"
if test -z "$lib_path"; then
lib_path=$file
else
lib_path="$lib_path;$file"
fi
linker_opts="$linker_opts -LIBPATH:$file"
}
# func_cl_dashl library
# Do a library search-path lookup for cl
func_cl_dashl ()
{
lib=$1
found=no
save_IFS=$IFS
IFS=';'
for dir in $lib_path $LIB
do
IFS=$save_IFS
if $shared && test -f "$dir/$lib.dll.lib"; then
found=yes
lib=$dir/$lib.dll.lib
break
fi
if test -f "$dir/$lib.lib"; then
found=yes
lib=$dir/$lib.lib
break
fi
if test -f "$dir/lib$lib.a"; then
found=yes
lib=$dir/lib$lib.a
break
fi
done
IFS=$save_IFS
if test "$found" != yes; then
lib=$lib.lib
fi
}
# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
{
# Assume a capable shell
lib_path=
shared=:
linker_opts=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
eat=1
case $2 in
*.o | *.[oO][bB][jJ])
func_file_conv "$2"
set x "$@" -Fo"$file"
shift
;;
*)
func_file_conv "$2"
set x "$@" -Fe"$file"
shift
;;
esac
;;
-I)
eat=1
func_file_conv "$2" mingw
set x "$@" -I"$file"
shift
;;
-I*)
func_file_conv "${1#-I}" mingw
set x "$@" -I"$file"
shift
;;
-l)
eat=1
func_cl_dashl "$2"
set x "$@" "$lib"
shift
;;
-l*)
func_cl_dashl "${1#-l}"
set x "$@" "$lib"
shift
;;
-L)
eat=1
func_cl_dashL "$2"
;;
-L*)
func_cl_dashL "${1#-L}"
;;
-static)
shared=false
;;
-Wl,*)
arg=${1#-Wl,}
save_ifs="$IFS"; IFS=','
for flag in $arg; do
IFS="$save_ifs"
linker_opts="$linker_opts $flag"
done
IFS="$save_ifs"
;;
-Xlinker)
eat=1
linker_opts="$linker_opts $2"
;;
-*)
set x "$@" "$1"
shift
;;
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
func_file_conv "$1"
set x "$@" -Tp"$file"
shift
;;
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
func_file_conv "$1" mingw
set x "$@" "$file"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -n "$linker_opts"; then
linker_opts="-link$linker_opts"
fi
exec "$@" $linker_opts
exit 1
}
eat=
case $1 in
'')
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand '-c -o'.
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file 'INSTALL'.
Report bugs to .
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
ofile=
cfile=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
# So we strip '-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no '-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# '.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
# Create the lock directory.
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
================================================
FILE: build-aux/config.guess
================================================
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright 1992-2017 Free Software Foundation, Inc.
timestamp='2017-05-27'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see .
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
#
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
#
# Please send patches to .
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION]
Output the configuration name of the system \`$me' is run on.
Operation modes:
-h, --help print this help, then exit
-t, --time-stamp print date of last modification, then exit
-v, --version print version number, then exit
Report bugs and patches to ."
version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright 1992-2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
help="
Try \`$me --help' for more information."
# Parse command line
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
echo "$timestamp" ; exit ;;
--version | -v )
echo "$version" ; exit ;;
--help | --h* | -h )
echo "$usage"; exit ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
break ;;
-* )
echo "$me: invalid option $1$help" >&2
exit 1 ;;
* )
break ;;
esac
done
if test $# != 0; then
echo "$me: too many arguments$help" >&2
exit 1
fi
trap 'exit 1' 1 2 15
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
# temporary files to be created and, as you can see below, it is a
# headache to deal with in a portable fashion.
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
# use `HOST_CC' if defined, but it is deprecated.
# Portable tmp directory creation inspired by the Autoconf team.
set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
dummy=$tmp/dummy ;
tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
case $CC_FOR_BUILD,$HOST_CC,$CC in
,,) echo "int x;" > $dummy.c ;
for c in cc gcc c89 c99 ; do
if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
CC_FOR_BUILD="$c"; break ;
fi ;
done ;
if test x"$CC_FOR_BUILD" = x ; then
CC_FOR_BUILD=no_compiler_found ;
fi
;;
,,*) CC_FOR_BUILD=$CC ;;
,*,*) CC_FOR_BUILD=$HOST_CC ;;
esac ; set_cc_for_build= ;'
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
PATH=$PATH:/.attbin ; export PATH
fi
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
case "${UNAME_SYSTEM}" in
Linux|GNU|GNU/*)
# If the system lacks a compiler, then just pick glibc.
# We could probably try harder.
LIBC=gnu
eval $set_cc_for_build
cat <<-EOF > $dummy.c
#include
#if defined(__UCLIBC__)
LIBC=uclibc
#elif defined(__dietlibc__)
LIBC=dietlibc
#else
LIBC=gnu
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
;;
esac
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:NetBSD:*:*)
# NetBSD (nbsd) targets should (where applicable) match one or
# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
# switched to ELF, *-*-netbsd* would select the old
# object file format. This provides both forward
# compatibility and a consistent mechanism for selecting the
# object file format.
#
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
/sbin/$sysctl 2>/dev/null || \
/usr/sbin/$sysctl 2>/dev/null || \
echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
earmv*)
arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
machine=${arch}${endian}-unknown
;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently (or will in the future) and ABI.
case "${UNAME_MACHINE_ARCH}" in
earm*)
os=netbsdelf
;;
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
then
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
# Return netbsd for either. FIX?
os=netbsd
else
os=netbsdelf
fi
;;
*)
os=netbsd
;;
esac
# Determine ABI tags.
case "${UNAME_MACHINE_ARCH}" in
earm*)
expr='s/^earmv[0-9]/-eabi/;s/eb$//'
abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
;;
esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
# kernel version information, so it can be replaced with a
# suitable tag, in the style of linux-gnu.
case "${UNAME_VERSION}" in
Debian*)
release='-gnu'
;;
*)
release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
exit ;;
*:OpenBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
exit ;;
*:LibertyBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
exit ;;
*:ekkoBSD:*:*)
echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
exit ;;
*:SolidBSD:*:*)
echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
exit ;;
macppc:MirBSD:*:*)
echo powerpc-unknown-mirbsd${UNAME_RELEASE}
exit ;;
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
*:Sortix:*:*)
echo ${UNAME_MACHINE}-unknown-sortix
exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
;;
*5.*)
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
;;
esac
# According to Compaq, /usr/sbin/psrinfo has been available on
# OSF/1 and Tru64 systems produced since 1995. I hope that
# covers most systems running today. This code pipes the CPU
# types through head -n 1, so we only detect the type of CPU 0.
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
case "$ALPHA_CPU_TYPE" in
"EV4 (21064)")
UNAME_MACHINE=alpha ;;
"EV4.5 (21064)")
UNAME_MACHINE=alpha ;;
"LCA4 (21066/21068)")
UNAME_MACHINE=alpha ;;
"EV5 (21164)")
UNAME_MACHINE=alphaev5 ;;
"EV5.6 (21164A)")
UNAME_MACHINE=alphaev56 ;;
"EV5.6 (21164PC)")
UNAME_MACHINE=alphapca56 ;;
"EV5.7 (21164PC)")
UNAME_MACHINE=alphapca57 ;;
"EV6 (21264)")
UNAME_MACHINE=alphaev6 ;;
"EV6.7 (21264A)")
UNAME_MACHINE=alphaev67 ;;
"EV6.8CB (21264C)")
UNAME_MACHINE=alphaev68 ;;
"EV6.8AL (21264B)")
UNAME_MACHINE=alphaev68 ;;
"EV6.8CX (21264D)")
UNAME_MACHINE=alphaev68 ;;
"EV6.9A (21264/EV69A)")
UNAME_MACHINE=alphaev69 ;;
"EV7 (21364)")
UNAME_MACHINE=alphaev7 ;;
"EV7.9 (21364A)")
UNAME_MACHINE=alphaev79 ;;
esac
# A Pn.n version is a patched version.
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
exitcode=$?
trap '' 0
exit $exitcode ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
# of the specific Alpha model?
echo alpha-pc-interix
exit ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
exit ;;
Amiga*:UNIX_System_V:4.0:*)
echo m68k-unknown-sysv4
exit ;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
exit ;;
*:[Mm]orph[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-morphos
exit ;;
*:OS/390:*:*)
echo i370-ibm-openedition
exit ;;
*:z/VM:*:*)
echo s390-ibm-zvmoe
exit ;;
*:OS400:*:*)
echo powerpc-ibm-os400
exit ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit ;;
arm*:riscos:*:*|arm*:RISCOS:*:*)
echo arm-unknown-riscos
exit ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit ;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
else
echo pyramid-pyramid-bsd
fi
exit ;;
NILE*:*:*:dcosx)
echo pyramid-pyramid-svr4
exit ;;
DRS?6000:unix:4.0:6*)
echo sparc-icl-nx6
exit ;;
DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
case `/usr/bin/uname -p` in
sparc) echo sparc-icl-nx7; exit ;;
esac ;;
s390x:SunOS:*:*)
echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
echo i386-pc-auroraux${UNAME_RELEASE}
exit ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
eval $set_cc_for_build
SUN_ARCH=i386
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
# This test works for both compilers.
if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
SUN_ARCH=x86_64
fi
fi
echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4*:SunOS:*:*)
case "`/usr/bin/arch -k`" in
Series*|S4*)
UNAME_RELEASE=`uname -v`
;;
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
exit ;;
sun3*:SunOS:*:*)
echo m68k-sun-sunos${UNAME_RELEASE}
exit ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
case "`/bin/arch`" in
sun3)
echo m68k-sun-sunos${UNAME_RELEASE}
;;
sun4)
echo sparc-sun-sunos${UNAME_RELEASE}
;;
esac
exit ;;
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
exit ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
# > m68000). The system name ranges from "MiNT" over "FreeMiNT"
# to the lowercase version "mint" (or "freemint"). Finally
# the system name "TOS" denotes a system which is actually not
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
echo m68k-milan-mint${UNAME_RELEASE}
exit ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
echo m68k-hades-mint${UNAME_RELEASE}
exit ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
echo m68k-unknown-mint${UNAME_RELEASE}
exit ;;
m68k:machten:*:*)
echo m68k-apple-machten${UNAME_RELEASE}
exit ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
exit ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
exit ;;
RISC*:ULTRIX:*:*)
echo mips-dec-ultrix${UNAME_RELEASE}
exit ;;
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit ;;
2020:CLIX:*:* | 2430:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
exit ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#ifdef __cplusplus
#include /* for printf() prototype */
int main (int argc, char *argv[]) {
#else
int main (argc, argv) int argc; char *argv[]; {
#endif
#if defined (host_mips) && defined (MIPSEB)
#if defined (SYSTYPE_SYSV)
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_SVR4)
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
#endif
#endif
exit (-1);
}
EOF
$CC_FOR_BUILD -o $dummy $dummy.c &&
dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
SYSTEM_NAME=`$dummy $dummyarg` &&
{ echo "$SYSTEM_NAME"; exit; }
echo mips-mips-riscos${UNAME_RELEASE}
exit ;;
Motorola:PowerMAX_OS:*:*)
echo powerpc-motorola-powermax
exit ;;
Motorola:*:4.3:PL8-*)
echo powerpc-harris-powermax
exit ;;
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
echo powerpc-harris-powermax
exit ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
exit ;;
m88k:CX/UX:7*:*)
echo m88k-harris-cxux7
exit ;;
m88k:*:4*:R4*)
echo m88k-motorola-sysv4
exit ;;
m88k:*:3*:R3*)
echo m88k-motorola-sysv3
exit ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
then
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
[ ${TARGET_BINARY_INTERFACE}x = x ]
then
echo m88k-dg-dgux${UNAME_RELEASE}
else
echo m88k-dg-dguxbcs${UNAME_RELEASE}
fi
else
echo i586-dg-dgux${UNAME_RELEASE}
fi
exit ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
exit ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
echo m88k-motorola-sysv3
exit ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
echo m88k-tektronix-sysv3
exit ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
echo m68k-tektronix-bsd
exit ;;
*:IRIX*:*:*)
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
exit ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i*86:AIX:*:*)
echo i386-ibm-aix
exit ;;
ia64:AIX:*:*)
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
else
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
exit ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#include
main()
{
if (!__power_pc())
exit(1);
puts("powerpc-ibm-aix3.2.5");
exit(0);
}
EOF
if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
then
echo "$SYSTEM_NAME"
else
echo rs6000-ibm-aix3.2.5
fi
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
else
echo rs6000-ibm-aix3.2
fi
exit ;;
*:AIX:*:[4567])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
fi
if [ -x /usr/bin/lslpp ] ; then
IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
exit ;;
*:AIX:*:*)
echo rs6000-ibm-aix
exit ;;
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4
exit ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
exit ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
exit ;;
DPX/2?00:B.O.S.:*:*)
echo m68k-bull-sysv3
exit ;;
9000/[34]??:4.3bsd:1.*:*)
echo m68k-hp-bsd
exit ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
exit ;;
9000/[34678]??:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
if [ -x /usr/bin/getconf ]; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
case "${sc_cpu_version}" in
523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
532) # CPU_PA_RISC2_0
case "${sc_kernel_bits}" in
32) HP_ARCH=hppa2.0n ;;
64) HP_ARCH=hppa2.0w ;;
'') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
esac ;;
esac
fi
if [ "${HP_ARCH}" = "" ]; then
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#define _HPUX_SOURCE
#include
#include
int main ()
{
#if defined(_SC_KERNEL_BITS)
long bits = sysconf(_SC_KERNEL_BITS);
#endif
long cpu = sysconf (_SC_CPU_VERSION);
switch (cpu)
{
case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
case CPU_PA_RISC2_0:
#if defined(_SC_KERNEL_BITS)
switch (bits)
{
case 64: puts ("hppa2.0w"); break;
case 32: puts ("hppa2.0n"); break;
default: puts ("hppa2.0"); break;
} break;
#else /* !defined(_SC_KERNEL_BITS) */
puts ("hppa2.0"); break;
#endif
default: puts ("hppa1.0"); break;
}
exit (0);
}
EOF
(CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
test -z "$HP_ARCH" && HP_ARCH=hppa
fi ;;
esac
if [ ${HP_ARCH} = hppa2.0w ]
then
eval $set_cc_for_build
# hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
# 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
# generating 64-bit code. GNU and HP use different nomenclature:
#
# $ CC_FOR_BUILD=cc ./config.guess
# => hppa2.0w-hp-hpux11.23
# $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
# => hppa64-hp-hpux11.23
if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
grep -q __LP64__
then
HP_ARCH=hppa2.0w
else
HP_ARCH=hppa64
fi
fi
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit ;;
ia64:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ia64-hp-hpux${HPUX_REV}
exit ;;
3050*:HI-UX:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#include
int
main ()
{
long cpu = sysconf (_SC_CPU_VERSION);
/* The order matters, because CPU_IS_HP_MC68K erroneously returns
true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
results, however. */
if (CPU_IS_PA_RISC (cpu))
{
switch (cpu)
{
case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
default: puts ("hppa-hitachi-hiuxwe2"); break;
}
}
else if (CPU_IS_HP_MC68K (cpu))
puts ("m68k-hitachi-hiuxwe2");
else puts ("unknown-hitachi-hiuxwe2");
exit (0);
}
EOF
$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
{ echo "$SYSTEM_NAME"; exit; }
echo unknown-hitachi-hiuxwe2
exit ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
echo hppa1.1-hp-bsd
exit ;;
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit ;;
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix
exit ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
exit ;;
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
exit ;;
i*86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
echo ${UNAME_MACHINE}-unknown-osf1
fi
exit ;;
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
exit ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
exit ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
exit ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
exit ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
exit ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-e 's/\.[^.]*$/.X/'
exit ;;
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
CRAY*T3E:*:*:*)
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
*:UNICOS/mp:*:*)
echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit ;;
5000:UNIX_System_V:4.*:*)
FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit ;;
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit ;;
*:FreeBSD:*:*)
UNAME_PROCESSOR=`/usr/bin/uname -p`
case ${UNAME_PROCESSOR} in
amd64)
UNAME_PROCESSOR=x86_64 ;;
i386)
UNAME_PROCESSOR=i586 ;;
esac
echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
exit ;;
*:MINGW64*:*)
echo ${UNAME_MACHINE}-pc-mingw64
exit ;;
*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
*:MSYS*:*)
echo ${UNAME_MACHINE}-pc-msys
exit ;;
i*:windows32*:*)
# uname -m includes "-pc" on this system.
echo ${UNAME_MACHINE}-mingw32
exit ;;
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit ;;
*:Interix*:*)
case ${UNAME_MACHINE} in
x86)
echo i586-pc-interix${UNAME_RELEASE}
exit ;;
authenticamd | genuineintel | EM64T)
echo x86_64-unknown-interix${UNAME_RELEASE}
exit ;;
IA64)
echo ia64-unknown-interix${UNAME_RELEASE}
exit ;;
esac ;;
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks
exit ;;
8664:Windows_NT:*)
echo x86_64-pc-mks
exit ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
# UNAME_MACHINE based on the output of uname instead of i386?
echo i586-pc-interix
exit ;;
i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin
exit ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
echo x86_64-unknown-cygwin
exit ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
exit ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
*:GNU:*:*)
# the GNU system
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit ;;
aarch64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
EV5) UNAME_MACHINE=alphaev5 ;;
EV56) UNAME_MACHINE=alphaev56 ;;
PCA56) UNAME_MACHINE=alphapca56 ;;
PCA57) UNAME_MACHINE=alphapca56 ;;
EV6) UNAME_MACHINE=alphaev6 ;;
EV67) UNAME_MACHINE=alphaev67 ;;
EV68*) UNAME_MACHINE=alphaev68 ;;
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
arc:Linux:*:* | arceb:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
arm*:Linux:*:*)
eval $set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
else
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
fi
fi
exit ;;
avr32*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
cris:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
e2k:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
hexagon:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
i*86:Linux:*:*)
echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
ia64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
k1om:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m32r*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
m68*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#undef CPU
#undef ${UNAME_MACHINE}
#undef ${UNAME_MACHINE}el
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
CPU=${UNAME_MACHINE}el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
CPU=${UNAME_MACHINE}
#else
CPU=
#endif
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
mips64el:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
openrisc*:Linux:*:*)
echo or1k-unknown-linux-${LIBC}
exit ;;
or32:Linux:*:* | or1k*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
padre:Linux:*:*)
echo sparc-unknown-linux-${LIBC}
exit ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
echo hppa64-unknown-linux-${LIBC}
exit ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
*) echo hppa-unknown-linux-${LIBC} ;;
esac
exit ;;
ppc64:Linux:*:*)
echo powerpc64-unknown-linux-${LIBC}
exit ;;
ppc:Linux:*:*)
echo powerpc-unknown-linux-${LIBC}
exit ;;
ppc64le:Linux:*:*)
echo powerpc64le-unknown-linux-${LIBC}
exit ;;
ppcle:Linux:*:*)
echo powerpcle-unknown-linux-${LIBC}
exit ;;
riscv32:Linux:*:* | riscv64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
exit ;;
sh64*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
tile*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
vax:Linux:*:*)
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
# earlier versions are messed up and put the nodename in both
# sysname and nodename.
echo i386-sequent-sysv4
exit ;;
i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit ;;
i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility
# is probably installed.
echo ${UNAME_MACHINE}-pc-os2-emx
exit ;;
i*86:XTS-300:*:STOP)
echo ${UNAME_MACHINE}-unknown-stop
exit ;;
i*86:atheos:*:*)
echo ${UNAME_MACHINE}-unknown-atheos
exit ;;
i*86:syllable:*:*)
echo ${UNAME_MACHINE}-pc-syllable
exit ;;
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
exit ;;
i*86:*DOS:*:*)
echo ${UNAME_MACHINE}-pc-msdosdjgpp
exit ;;
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
else
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi
exit ;;
i*86:*:5:[678]*)
# UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
exit ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then
UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
&& UNAME_MACHINE=i686
(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
&& UNAME_MACHINE=i686
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit ;;
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i586.
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configure will decide that
# this is a cross-build.
echo i586-pc-msdosdjgpp
exit ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
exit ;;
paragon:*:*:*)
echo i860-intel-osf1
exit ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
fi
exit ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
echo m68010-convergent-sysv
exit ;;
mc68k:UNIX:SYSTEM5:3.51m)
echo m68k-convergent-sysv
exit ;;
M680?0:D-NIX:5.3:*)
echo m68k-diab-dnix
exit ;;
M68*:*:R3V[5678]*:*)
test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& { echo i486-ncr-sysv4.3${OS_REL}; exit; }
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& { echo i486-ncr-sysv4; exit; } ;;
NCR*:*:4.2:* | MPRAS*:*:4.2:*)
OS_REL='.3'
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& { echo i486-ncr-sysv4.3${OS_REL}; exit; }
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; }
/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
exit ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit ;;
TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE}
exit ;;
rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
echo powerpc-unknown-lynxos${UNAME_RELEASE}
exit ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
exit ;;
RM*:ReliantUNIX-*:*:*)
echo mips-sni-sysv4
exit ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
exit ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
echo ${UNAME_MACHINE}-sni-sysv4
else
echo ns32k-sni-sysv
fi
exit ;;
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says
echo i586-unisys-sysv4
exit ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes .
# How about differentiating between stratus architectures? -djm
echo hppa1.1-stratus-sysv4
exit ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
echo i860-stratus-sysv4
exit ;;
i*86:VOS:*:*)
# From Paul.Green@stratus.com.
echo ${UNAME_MACHINE}-stratus-vos
exit ;;
*:VOS:*:*)
# From Paul.Green@stratus.com.
echo hppa1.1-stratus-vos
exit ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit ;;
news*:NEWS-OS:6*:*)
echo mips-sony-newsos6
exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
exit ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
exit ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
echo powerpc-apple-beos
exit ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
exit ;;
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
echo i586-pc-haiku
exit ;;
x86_64:Haiku:*:*)
echo x86_64-unknown-haiku
exit ;;
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
exit ;;
SX-5:SUPER-UX:*:*)
echo sx5-nec-superux${UNAME_RELEASE}
exit ;;
SX-6:SUPER-UX:*:*)
echo sx6-nec-superux${UNAME_RELEASE}
exit ;;
SX-7:SUPER-UX:*:*)
echo sx7-nec-superux${UNAME_RELEASE}
exit ;;
SX-8:SUPER-UX:*:*)
echo sx8-nec-superux${UNAME_RELEASE}
exit ;;
SX-8R:SUPER-UX:*:*)
echo sx8r-nec-superux${UNAME_RELEASE}
exit ;;
SX-ACE:SUPER-UX:*:*)
echo sxace-nec-superux${UNAME_RELEASE}
exit ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
exit ;;
*:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
exit ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
eval $set_cc_for_build
if test "$UNAME_PROCESSOR" = unknown ; then
UNAME_PROCESSOR=powerpc
fi
if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
case $UNAME_PROCESSOR in
i386) UNAME_PROCESSOR=x86_64 ;;
powerpc) UNAME_PROCESSOR=powerpc64 ;;
esac
fi
# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_PPC >/dev/null
then
UNAME_PROCESSOR=powerpc
fi
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
# Avoid executing cc on OS X 10.9, as it ships with a stub
# that puts up a graphical alert prompting to install
# developer tools. Any system running Mac OS X 10.7 or
# later (Darwin 11 and later) is required to have a 64-bit
# processor. This is not true of the ARM version of Darwin
# that Apple uses in portable devices.
UNAME_PROCESSOR=x86_64
fi
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
UNAME_PROCESSOR=`uname -p`
if test "$UNAME_PROCESSOR" = x86; then
UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
exit ;;
*:QNX:*:4*)
echo i386-pc-qnx
exit ;;
NEO-*:NONSTOP_KERNEL:*:*)
echo neo-tandem-nsk${UNAME_RELEASE}
exit ;;
NSE-*:NONSTOP_KERNEL:*:*)
echo nse-tandem-nsk${UNAME_RELEASE}
exit ;;
NSR-*:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE}
exit ;;
NSX-*:NONSTOP_KERNEL:*:*)
echo nsx-tandem-nsk${UNAME_RELEASE}
exit ;;
*:NonStop-UX:*:*)
echo mips-compaq-nonstopux
exit ;;
BS2000:POSIX*:*:*)
echo bs2000-siemens-sysv
exit ;;
DS/*:UNIX_System_V:*:*)
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
exit ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
if test "$cputype" = 386; then
UNAME_MACHINE=i386
else
UNAME_MACHINE="$cputype"
fi
echo ${UNAME_MACHINE}-unknown-plan9
exit ;;
*:TOPS-10:*:*)
echo pdp10-unknown-tops10
exit ;;
*:TENEX:*:*)
echo pdp10-unknown-tenex
exit ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
echo pdp10-dec-tops20
exit ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
echo pdp10-xkl-tops20
exit ;;
*:TOPS-20:*:*)
echo pdp10-unknown-tops20
exit ;;
*:ITS:*:*)
echo pdp10-unknown-its
exit ;;
SEI:*:*:SEIUX)
echo mips-sei-seiux${UNAME_RELEASE}
exit ;;
*:DragonFly:*:*)
echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit ;;
*:*VMS:*:*)
UNAME_MACHINE=`(uname -p) 2>/dev/null`
case "${UNAME_MACHINE}" in
A*) echo alpha-dec-vms ; exit ;;
I*) echo ia64-dec-vms ; exit ;;
V*) echo vax-dec-vms ; exit ;;
esac ;;
*:XENIX:*:SysV)
echo i386-pc-xenix
exit ;;
i*86:skyos:*:*)
echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
exit ;;
i*86:rdos:*:*)
echo ${UNAME_MACHINE}-pc-rdos
exit ;;
i*86:AROS:*:*)
echo ${UNAME_MACHINE}-pc-aros
exit ;;
x86_64:VMkernel:*:*)
echo ${UNAME_MACHINE}-unknown-esx
exit ;;
amd64:Isilon\ OneFS:*:*)
echo x86_64-unknown-onefs
exit ;;
esac
cat >&2 </dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`
/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
hostinfo = `(hostinfo) 2>/dev/null`
/bin/universe = `(/bin/universe) 2>/dev/null`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
/bin/arch = `(/bin/arch) 2>/dev/null`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
UNAME_MACHINE = ${UNAME_MACHINE}
UNAME_RELEASE = ${UNAME_RELEASE}
UNAME_SYSTEM = ${UNAME_SYSTEM}
UNAME_VERSION = ${UNAME_VERSION}
EOF
exit 1
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:
================================================
FILE: build-aux/config.sub
================================================
#! /bin/sh
# Configuration validation subroutine script.
# Copyright 1992-2017 Free Software Foundation, Inc.
timestamp='2017-04-02'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see .
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
# Please send patches to .
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
# Each package is responsible for reporting which valid configurations
# it does not support. The user should be able to distinguish
# a failure to support a valid configuration from a meaningless
# configuration.
# The goal of this file is to map all the various variations of a given
# machine specification into a single specification in the form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or in some cases, the newer four-part form:
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
Canonicalize a configuration name.
Operation modes:
-h, --help print this help, then exit
-t, --time-stamp print date of last modification, then exit
-v, --version print version number, then exit
Report bugs and patches to ."
version="\
GNU config.sub ($timestamp)
Copyright 1992-2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
help="
Try \`$me --help' for more information."
# Parse command line
while test $# -gt 0 ; do
case $1 in
--time-stamp | --time* | -t )
echo "$timestamp" ; exit ;;
--version | -v )
echo "$version" ; exit ;;
--help | --h* | -h )
echo "$usage"; exit ;;
-- ) # Stop option processing
shift; break ;;
- ) # Use stdin as input.
break ;;
-* )
echo "$me: invalid option $1$help"
exit 1 ;;
*local*)
# First pass through any local machine types.
echo $1
exit ;;
* )
break ;;
esac
done
case $# in
0) echo "$me: missing argument$help" >&2
exit 1;;
1) ;;
*) echo "$me: too many arguments$help" >&2
exit 1;;
esac
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | cloudabi*-eabi* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
android-linux)
os=-linux-android
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
;;
*)
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
if [ $basic_machine != $1 ]
then os=`echo $1 | sed 's/.*-/-/'`
else os=; fi
;;
esac
### Let's recognize common machines as not being operating systems so
### that things like config.sub decstation-3100 work. We also
### recognize some manufacturers as not being operating systems, so we
### can provide default operating systems below.
case $os in
-sun*os*)
# Prevent following clause from handling this invalid input.
;;
-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-apple | -axis | -knuth | -cray | -microblaze*)
os=
basic_machine=$1
;;
-bluegene*)
os=-cnk
;;
-sim | -cisco | -oki | -wec | -winbond)
os=
basic_machine=$1
;;
-scout)
;;
-wrs)
os=-vxworks
basic_machine=$1
;;
-chorusos*)
os=-chorusos
basic_machine=$1
;;
-chorusrdb)
os=-chorusrdb
basic_machine=$1
;;
-hiux*)
os=-hiuxwe2
;;
-sco6)
os=-sco5v6
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco5)
os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco4)
os=-sco3.2v4
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco3.2.[4-9]*)
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco3.2v[4-9]*)
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco5v6*)
# Don't forget version if it is 3.2v4 or newer.
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco*)
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-udk*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-isc)
os=-isc2.2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-clix*)
basic_machine=clipper-intergraph
;;
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-lynx*178)
os=-lynxos178
;;
-lynx*5)
os=-lynxos5
;;
-lynx*)
os=-lynxos
;;
-ptx*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
;;
-windowsnt*)
os=`echo $os | sed -e 's/windowsnt/winnt/'`
;;
-psos*)
os=-psos
;;
-mint | -mint[0-9]*)
basic_machine=m68k-atari
os=-mint
;;
esac
# Decode aliases for certain CPU-COMPANY combinations.
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
1750a | 580 \
| a29k \
| aarch64 | aarch64_be \
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
| ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
| e2k | epiphany \
| fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
| i370 | i860 | i960 | ia16 | ia64 \
| ip2k | iq2000 \
| k1om \
| le32 | le64 \
| lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
| mips64octeon | mips64octeonel \
| mips64orion | mips64orionel \
| mips64r5900 | mips64r5900el \
| mips64vr | mips64vrel \
| mips64vr4100 | mips64vr4100el \
| mips64vr4300 | mips64vr4300el \
| mips64vr5000 | mips64vr5000el \
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
| mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
| mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
| mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
| moxie \
| mt \
| msp430 \
| nds32 | nds32le | nds32be \
| nios | nios2 | nios2eb | nios2el \
| ns16k | ns32k \
| open8 | or1k | or1knd | or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pru \
| pyramid \
| riscv32 | riscv64 \
| rl78 | rx \
| score \
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
| spu \
| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
| ubicom32 \
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
| visium \
| wasm32 \
| we32k \
| x86 | xc16x | xstormy16 | xtensa \
| z8k | z80)
basic_machine=$basic_machine-unknown
;;
c54x)
basic_machine=tic54x-unknown
;;
c55x)
basic_machine=tic55x-unknown
;;
c6x)
basic_machine=tic6x-unknown
;;
leon|leon[3-9])
basic_machine=sparc-$basic_machine
;;
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
;;
ms1)
basic_machine=mt-unknown
;;
strongarm | thumb | xscale)
basic_machine=arm-unknown
;;
xgate)
basic_machine=$basic_machine-unknown
os=-none
;;
xscaleeb)
basic_machine=armeb-unknown
;;
xscaleel)
basic_machine=armel-unknown
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
i*86 | x86_64)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
*-*-*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
# Recognize the basic CPU types with company name.
580-* \
| a29k-* \
| aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
| ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
| hexagon-* \
| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
| ip2k-* | iq2000-* \
| k1om-* \
| le32-* | le64-* \
| lm32-* \
| m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
| microblaze-* | microblazeel-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
| mips64octeon-* | mips64octeonel-* \
| mips64orion-* | mips64orionel-* \
| mips64r5900-* | mips64r5900el-* \
| mips64vr-* | mips64vrel-* \
| mips64vr4100-* | mips64vr4100el-* \
| mips64vr4300-* | mips64vr4300el-* \
| mips64vr5000-* | mips64vr5000el-* \
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
| mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
| mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
| mt-* \
| msp430-* \
| nds32-* | nds32le-* | nds32be-* \
| nios-* | nios2-* | nios2eb-* | nios2el-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
| or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pru-* \
| pyramid-* \
| riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
| tron-* \
| ubicom32-* \
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
| vax-* \
| visium-* \
| wasm32-* \
| we32k-* \
| x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \
| ymp-* \
| z8k-* | z80-*)
;;
# Recognize the basic CPU types without company name, with glob match.
xtensa*)
basic_machine=$basic_machine-unknown
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
386bsd)
basic_machine=i386-unknown
os=-bsd
;;
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
basic_machine=m68000-att
;;
3b*)
basic_machine=we32k-att
;;
a29khif)
basic_machine=a29k-amd
os=-udi
;;
abacus)
basic_machine=abacus-unknown
;;
adobe68k)
basic_machine=m68010-adobe
os=-scout
;;
alliant | fx80)
basic_machine=fx80-alliant
;;
altos | altos3068)
basic_machine=m68k-altos
;;
am29k)
basic_machine=a29k-none
os=-bsd
;;
amd64)
basic_machine=x86_64-pc
;;
amd64-*)
basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
amdahl)
basic_machine=580-amdahl
os=-sysv
;;
amiga | amiga-*)
basic_machine=m68k-unknown
;;
amigaos | amigados)
basic_machine=m68k-unknown
os=-amigaos
;;
amigaunix | amix)
basic_machine=m68k-unknown
os=-sysv4
;;
apollo68)
basic_machine=m68k-apollo
os=-sysv
;;
apollo68bsd)
basic_machine=m68k-apollo
os=-bsd
;;
aros)
basic_machine=i386-pc
os=-aros
;;
asmjs)
basic_machine=asmjs-unknown
;;
aux)
basic_machine=m68k-apple
os=-aux
;;
balance)
basic_machine=ns32k-sequent
os=-dynix
;;
blackfin)
basic_machine=bfin-unknown
os=-linux
;;
blackfin-*)
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
bluegene*)
basic_machine=powerpc-ibm
os=-cnk
;;
c54x-*)
basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c55x-*)
basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c6x-*)
basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
c90)
basic_machine=c90-cray
os=-unicos
;;
cegcc)
basic_machine=arm-unknown
os=-cegcc
;;
convex-c1)
basic_machine=c1-convex
os=-bsd
;;
convex-c2)
basic_machine=c2-convex
os=-bsd
;;
convex-c32)
basic_machine=c32-convex
os=-bsd
;;
convex-c34)
basic_machine=c34-convex
os=-bsd
;;
convex-c38)
basic_machine=c38-convex
os=-bsd
;;
cray | j90)
basic_machine=j90-cray
os=-unicos
;;
craynv)
basic_machine=craynv-cray
os=-unicosmp
;;
cr16 | cr16-*)
basic_machine=cr16-unknown
os=-elf
;;
crds | unos)
basic_machine=m68k-crds
;;
crisv32 | crisv32-* | etraxfs*)
basic_machine=crisv32-axis
;;
cris | cris-* | etrax*)
basic_machine=cris-axis
;;
crx)
basic_machine=crx-unknown
os=-elf
;;
da30 | da30-*)
basic_machine=m68k-da30
;;
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
basic_machine=mips-dec
;;
decsystem10* | dec10*)
basic_machine=pdp10-dec
os=-tops10
;;
decsystem20* | dec20*)
basic_machine=pdp10-dec
os=-tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
basic_machine=m68k-motorola
;;
delta88)
basic_machine=m88k-motorola
os=-sysv3
;;
dicos)
basic_machine=i686-pc
os=-dicos
;;
djgpp)
basic_machine=i586-pc
os=-msdosdjgpp
;;
dpx20 | dpx20-*)
basic_machine=rs6000-bull
os=-bosx
;;
dpx2* | dpx2*-bull)
basic_machine=m68k-bull
os=-sysv3
;;
e500v[12])
basic_machine=powerpc-unknown
os=$os"spe"
;;
e500v[12]-*)
basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
os=$os"spe"
;;
ebmon29k)
basic_machine=a29k-amd
os=-ebmon
;;
elxsi)
basic_machine=elxsi-elxsi
os=-bsd
;;
encore | umax | mmax)
basic_machine=ns32k-encore
;;
es1800 | OSE68k | ose68k | ose | OSE)
basic_machine=m68k-ericsson
os=-ose
;;
fx2800)
basic_machine=i860-alliant
;;
genix)
basic_machine=ns32k-ns
;;
gmicro)
basic_machine=tron-gmicro
os=-sysv
;;
go32)
basic_machine=i386-pc
os=-go32
;;
h3050r* | hiux*)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
;;
h8300hms)
basic_machine=h8300-hitachi
os=-hms
;;
h8300xray)
basic_machine=h8300-hitachi
os=-xray
;;
h8500hms)
basic_machine=h8500-hitachi
os=-hms
;;
harris)
basic_machine=m88k-harris
os=-sysv3
;;
hp300-*)
basic_machine=m68k-hp
;;
hp300bsd)
basic_machine=m68k-hp
os=-bsd
;;
hp300hpux)
basic_machine=m68k-hp
os=-hpux
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
basic_machine=m68000-hp
;;
hp9k3[2-9][0-9])
basic_machine=m68k-hp
;;
hp9k6[0-9][0-9] | hp6[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hp9k7[0-79][0-9] | hp7[0-79][0-9])
basic_machine=hppa1.1-hp
;;
hp9k78[0-9] | hp78[0-9])
# FIXME: really hppa2.0-hp
basic_machine=hppa1.1-hp
;;
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
# FIXME: really hppa2.0-hp
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][13679] | hp8[0-9][13679])
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hppa-next)
os=-nextstep3
;;
hppaosf)
basic_machine=hppa1.1-hp
os=-osf
;;
hppro)
basic_machine=hppa1.1-hp
os=-proelf
;;
i370-ibm* | ibm*)
basic_machine=i370-ibm
;;
i*86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
i*86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
i*86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
i*86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
i386mach)
basic_machine=i386-mach
os=-mach
;;
i386-vsta | vsta)
basic_machine=i386-unknown
os=-vsta
;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
-irix*)
;;
*)
os=-irix4
;;
esac
;;
isi68 | isi)
basic_machine=m68k-isi
os=-sysv
;;
leon-*|leon[3-9]-*)
basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
;;
m68knommu)
basic_machine=m68k-unknown
os=-linux
;;
m68knommu-*)
basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
m88k-omron*)
basic_machine=m88k-omron
;;
magnum | m3230)
basic_machine=mips-mips
os=-sysv
;;
merlin)
basic_machine=ns32k-utek
os=-sysv
;;
microblaze*)
basic_machine=microblaze-xilinx
;;
mingw64)
basic_machine=x86_64-pc
os=-mingw64
;;
mingw32)
basic_machine=i686-pc
os=-mingw32
;;
mingw32ce)
basic_machine=arm-unknown
os=-mingw32ce
;;
miniframe)
basic_machine=m68000-convergent
;;
*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
basic_machine=m68k-atari
os=-mint
;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
mips3*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
;;
monitor)
basic_machine=m68k-rom68k
os=-coff
;;
morphos)
basic_machine=powerpc-unknown
os=-morphos
;;
moxiebox)
basic_machine=moxie-unknown
os=-moxiebox
;;
msdos)
basic_machine=i386-pc
os=-msdos
;;
ms1-*)
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
msys)
basic_machine=i686-pc
os=-msys
;;
mvs)
basic_machine=i370-ibm
os=-mvs
;;
nacl)
basic_machine=le32-unknown
os=-nacl
;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
;;
netbsd386)
basic_machine=i386-unknown
os=-netbsd
;;
netwinder)
basic_machine=armv4l-rebel
os=-linux
;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
os=-newsos
;;
news1000)
basic_machine=m68030-sony
os=-newsos
;;
news-3600 | risc-news)
basic_machine=mips-sony
os=-newsos
;;
necv70)
basic_machine=v70-nec
os=-sysv
;;
next | m*-next )
basic_machine=m68k-next
case $os in
-nextstep* )
;;
-ns2*)
os=-nextstep2
;;
*)
os=-nextstep3
;;
esac
;;
nh3000)
basic_machine=m68k-harris
os=-cxux
;;
nh[45]000)
basic_machine=m88k-harris
os=-cxux
;;
nindy960)
basic_machine=i960-intel
os=-nindy
;;
mon960)
basic_machine=i960-intel
os=-mon960
;;
nonstopux)
basic_machine=mips-compaq
os=-nonstopux
;;
np1)
basic_machine=np1-gould
;;
neo-tandem)
basic_machine=neo-tandem
;;
nse-tandem)
basic_machine=nse-tandem
;;
nsr-tandem)
basic_machine=nsr-tandem
;;
nsx-tandem)
basic_machine=nsx-tandem
;;
op50n-* | op60c-*)
basic_machine=hppa1.1-oki
os=-proelf
;;
openrisc | openrisc-*)
basic_machine=or32-unknown
;;
os400)
basic_machine=powerpc-ibm
os=-os400
;;
OSE68000 | ose68000)
basic_machine=m68000-ericsson
os=-ose
;;
os68k)
basic_machine=m68k-none
os=-os68k
;;
pa-hitachi)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
;;
paragon)
basic_machine=i860-intel
os=-osf
;;
parisc)
basic_machine=hppa-unknown
os=-linux
;;
parisc-*)
basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux
;;
pbd)
basic_machine=sparc-tti
;;
pbb)
basic_machine=m68k-tti
;;
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
pc98)
basic_machine=i386-pc
;;
pc98-*)
basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentium | p5 | k5 | k6 | nexgen | viac3)
basic_machine=i586-pc
;;
pentiumpro | p6 | 6x86 | athlon | athlon_*)
basic_machine=i686-pc
;;
pentiumii | pentium2 | pentiumiii | pentium3)
basic_machine=i686-pc
;;
pentium4)
basic_machine=i786-pc
;;
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumpro-* | p6-* | 6x86-* | athlon-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentium4-*)
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
;;
power) basic_machine=power-ibm
;;
ppc | ppcbe) basic_machine=powerpc-unknown
;;
ppc-* | ppcbe-*)
basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle)
basic_machine=powerpcle-unknown
;;
ppcle-* | powerpclittle-*)
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppc64) basic_machine=powerpc64-unknown
;;
ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppc64le | powerpc64little)
basic_machine=powerpc64le-unknown
;;
ppc64le-* | powerpc64little-*)
basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ps2)
basic_machine=i386-ibm
;;
pw32)
basic_machine=i586-unknown
os=-pw32
;;
rdos | rdos64)
basic_machine=x86_64-pc
os=-rdos
;;
rdos32)
basic_machine=i386-pc
os=-rdos
;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
;;
rm[46]00)
basic_machine=mips-siemens
;;
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
s390 | s390-*)
basic_machine=s390-ibm
;;
s390x | s390x-*)
basic_machine=s390x-ibm
;;
sa29200)
basic_machine=a29k-amd
os=-udi
;;
sb1)
basic_machine=mipsisa64sb1-unknown
;;
sb1el)
basic_machine=mipsisa64sb1el-unknown
;;
sde)
basic_machine=mipsisa32-sde
os=-elf
;;
sei)
basic_machine=mips-sei
os=-seiux
;;
sequent)
basic_machine=i386-sequent
;;
sh)
basic_machine=sh-hitachi
os=-hms
;;
sh5el)
basic_machine=sh5le-unknown
;;
sh64)
basic_machine=sh64-unknown
;;
sparclite-wrs | simso-wrs)
basic_machine=sparclite-wrs
os=-vxworks
;;
sps7)
basic_machine=m68k-bull
os=-sysv2
;;
spur)
basic_machine=spur-unknown
;;
st2000)
basic_machine=m68k-tandem
;;
stratus)
basic_machine=i860-stratus
os=-sysv4
;;
strongarm-* | thumb-*)
basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
sun2)
basic_machine=m68000-sun
;;
sun2os3)
basic_machine=m68000-sun
os=-sunos3
;;
sun2os4)
basic_machine=m68000-sun
os=-sunos4
;;
sun3os3)
basic_machine=m68k-sun
os=-sunos3
;;
sun3os4)
basic_machine=m68k-sun
os=-sunos4
;;
sun4os3)
basic_machine=sparc-sun
os=-sunos3
;;
sun4os4)
basic_machine=sparc-sun
os=-sunos4
;;
sun4sol2)
basic_machine=sparc-sun
os=-solaris2
;;
sun3 | sun3-*)
basic_machine=m68k-sun
;;
sun4)
basic_machine=sparc-sun
;;
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
;;
sv1)
basic_machine=sv1-cray
os=-unicos
;;
symmetry)
basic_machine=i386-sequent
os=-dynix
;;
t3e)
basic_machine=alphaev5-cray
os=-unicos
;;
t90)
basic_machine=t90-cray
os=-unicos
;;
tile*)
basic_machine=$basic_machine-unknown
os=-linux-gnu
;;
tx39)
basic_machine=mipstx39-unknown
;;
tx39el)
basic_machine=mipstx39el-unknown
;;
toad1)
basic_machine=pdp10-xkl
os=-tops20
;;
tower | tower-32)
basic_machine=m68k-ncr
;;
tpf)
basic_machine=s390x-ibm
os=-tpf
;;
udi29k)
basic_machine=a29k-amd
os=-udi
;;
ultra3)
basic_machine=a29k-nyu
os=-sym1
;;
v810 | necv810)
basic_machine=v810-nec
os=-none
;;
vaxv)
basic_machine=vax-dec
os=-sysv
;;
vms)
basic_machine=vax-dec
os=-vms
;;
vpp*|vx|vx-*)
basic_machine=f301-fujitsu
;;
vxworks960)
basic_machine=i960-wrs
os=-vxworks
;;
vxworks68)
basic_machine=m68k-wrs
os=-vxworks
;;
vxworks29k)
basic_machine=a29k-wrs
os=-vxworks
;;
wasm32)
basic_machine=wasm32-unknown
;;
w65*)
basic_machine=w65-wdc
os=-none
;;
w89k-*)
basic_machine=hppa1.1-winbond
os=-proelf
;;
xbox)
basic_machine=i686-pc
os=-mingw32
;;
xps | xps100)
basic_machine=xps100-honeywell
;;
xscale-* | xscalee[bl]-*)
basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
;;
ymp)
basic_machine=ymp-cray
os=-unicos
;;
z8k-*-coff)
basic_machine=z8k-unknown
os=-sim
;;
z80-*-coff)
basic_machine=z80-unknown
os=-sim
;;
none)
basic_machine=none-none
os=-none
;;
# Here we handle the default manufacturer of certain CPU types. It is in
# some cases the only manufacturer, in others, it is the most popular.
w89k)
basic_machine=hppa1.1-winbond
;;
op50n)
basic_machine=hppa1.1-oki
;;
op60c)
basic_machine=hppa1.1-oki
;;
romp)
basic_machine=romp-ibm
;;
mmix)
basic_machine=mmix-knuth
;;
rs6000)
basic_machine=rs6000-ibm
;;
vax)
basic_machine=vax-dec
;;
pdp10)
# there are many clones, so DEC is not a safe bet
basic_machine=pdp10-unknown
;;
pdp11)
basic_machine=pdp11-dec
;;
we32k)
basic_machine=we32k-att
;;
sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
basic_machine=sh-unknown
;;
sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
basic_machine=sparc-sun
;;
cydra)
basic_machine=cydra-cydrome
;;
orion)
basic_machine=orion-highlevel
;;
orion105)
basic_machine=clipper-highlevel
;;
mac | mpw | mac-mpw)
basic_machine=m68k-apple
;;
pmac | pmac-mpw)
basic_machine=powerpc-apple
;;
*-unknown)
# Make sure to match an already-canonicalized machine name.
;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
esac
# Here we canonicalize certain aliases for manufacturers.
case $basic_machine in
*-digital*)
basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
;;
*-commodore*)
basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
;;
*)
;;
esac
# Decode manufacturer-specific aliases for certain operating systems.
if [ x"$os" != x"" ]
then
case $os in
# First match some system type aliases
# that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
-auroraux)
os=-auroraux
;;
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
-solaris)
os=-solaris2
;;
-svr4*)
os=-sysv4
;;
-unixware*)
os=-sysv4.2uw
;;
-gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;;
# First accept the basic system types.
# The portable systems comes first.
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
| -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
| -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
case $basic_machine in
x86-* | i*86-*)
;;
*)
os=-nto$os
;;
esac
;;
-nto-qnx*)
;;
-nto*)
os=`echo $os | sed -e 's|nto|nto-qnx|'`
;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
| -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
;;
-mac*)
os=`echo $os | sed -e 's|mac|macos|'`
;;
-linux-dietlibc)
os=-linux-dietlibc
;;
-linux*)
os=`echo $os | sed -e 's|linux|linux-gnu|'`
;;
-sunos5*)
os=`echo $os | sed -e 's|sunos5|solaris2|'`
;;
-sunos6*)
os=`echo $os | sed -e 's|sunos6|solaris3|'`
;;
-opened*)
os=-openedition
;;
-os400*)
os=-os400
;;
-wince*)
os=-wince
;;
-osfrose*)
os=-osfrose
;;
-osf*)
os=-osf
;;
-utek*)
os=-bsd
;;
-dynix*)
os=-bsd
;;
-acis*)
os=-aos
;;
-atheos*)
os=-atheos
;;
-syllable*)
os=-syllable
;;
-386bsd)
os=-bsd
;;
-ctix* | -uts*)
os=-sysv
;;
-nova*)
os=-rtmk-nova
;;
-ns2 )
os=-nextstep2
;;
-nsk*)
os=-nsk
;;
# Preserve the version number of sinix5.
-sinix5.*)
os=`echo $os | sed -e 's|sinix|sysv|'`
;;
-sinix*)
os=-sysv4
;;
-tpf*)
os=-tpf
;;
-triton*)
os=-sysv3
;;
-oss*)
os=-sysv3
;;
-svr4)
os=-sysv4
;;
-svr3)
os=-sysv3
;;
-sysvr4)
os=-sysv4
;;
# This must come after -sysvr4.
-sysv*)
;;
-ose*)
os=-ose
;;
-es1800*)
os=-ose
;;
-xenix)
os=-xenix
;;
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
os=-mint
;;
-aros*)
os=-aros
;;
-zvmoe)
os=-zvmoe
;;
-dicos*)
os=-dicos
;;
-nacl*)
;;
-ios)
;;
-none)
;;
*)
# Get rid of the `-' at the beginning of $os.
os=`echo $os | sed 's/[^-]*-//'`
echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
exit 1
;;
esac
else
# Here we handle the default operating systems that come with various machines.
# The value should be what the vendor currently ships out the door with their
# machine or put another way, the most popular os provided with the machine.
# Note that if you're going to try to match "-MANUFACTURER" here (say,
# "-sun"), then you have to tell the case statement up towards the top
# that MANUFACTURER isn't an operating system. Otherwise, code above
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
case $basic_machine in
score-*)
os=-elf
;;
spu-*)
os=-elf
;;
*-acorn)
os=-riscix1.2
;;
arm*-rebel)
os=-linux
;;
arm*-semi)
os=-aout
;;
c4x-* | tic4x-*)
os=-coff
;;
c8051-*)
os=-elf
;;
hexagon-*)
os=-elf
;;
tic54x-*)
os=-coff
;;
tic55x-*)
os=-coff
;;
tic6x-*)
os=-coff
;;
# This must come before the *-dec entry.
pdp10-*)
os=-tops20
;;
pdp11-*)
os=-none
;;
*-dec | vax-*)
os=-ultrix4.2
;;
m68*-apollo)
os=-domain
;;
i386-sun)
os=-sunos4.0.2
;;
m68000-sun)
os=-sunos3
;;
m68*-cisco)
os=-aout
;;
mep-*)
os=-elf
;;
mips*-cisco)
os=-elf
;;
mips*-*)
os=-elf
;;
or32-*)
os=-coff
;;
*-tti) # must be before sparc entry or we get the wrong os.
os=-sysv3
;;
sparc-* | *-sun)
os=-sunos4.1.1
;;
pru-*)
os=-elf
;;
*-be)
os=-beos
;;
*-haiku)
os=-haiku
;;
*-ibm)
os=-aix
;;
*-knuth)
os=-mmixware
;;
*-wec)
os=-proelf
;;
*-winbond)
os=-proelf
;;
*-oki)
os=-proelf
;;
*-hp)
os=-hpux
;;
*-hitachi)
os=-hiux
;;
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
os=-sysv
;;
*-cbm)
os=-amigaos
;;
*-dg)
os=-dgux
;;
*-dolphin)
os=-sysv3
;;
m68k-ccur)
os=-rtu
;;
m88k-omron*)
os=-luna
;;
*-next )
os=-nextstep
;;
*-sequent)
os=-ptx
;;
*-crds)
os=-unos
;;
*-ns)
os=-genix
;;
i370-*)
os=-mvs
;;
*-next)
os=-nextstep3
;;
*-gould)
os=-sysv
;;
*-highlevel)
os=-bsd
;;
*-encore)
os=-bsd
;;
*-sgi)
os=-irix
;;
*-siemens)
os=-sysv4
;;
*-masscomp)
os=-rtu
;;
f30[01]-fujitsu | f700-fujitsu)
os=-uxpv
;;
*-rom68k)
os=-coff
;;
*-*bug)
os=-coff
;;
*-apple)
os=-macos
;;
*-atari*)
os=-mint
;;
*)
os=-none
;;
esac
fi
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
vendor=unknown
case $basic_machine in
*-unknown)
case $os in
-riscix*)
vendor=acorn
;;
-sunos*)
vendor=sun
;;
-cnk*|-aix*)
vendor=ibm
;;
-beos*)
vendor=be
;;
-hpux*)
vendor=hp
;;
-mpeix*)
vendor=hp
;;
-hiux*)
vendor=hitachi
;;
-unos*)
vendor=crds
;;
-dgux*)
vendor=dg
;;
-luna*)
vendor=omron
;;
-genix*)
vendor=ns
;;
-mvs* | -opened*)
vendor=ibm
;;
-os400*)
vendor=ibm
;;
-ptx*)
vendor=sequent
;;
-tpf*)
vendor=ibm
;;
-vxsim* | -vxworks* | -windiss*)
vendor=wrs
;;
-aux*)
vendor=apple
;;
-hms*)
vendor=hitachi
;;
-mpw* | -macos*)
vendor=apple
;;
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
vendor=atari
;;
-vos*)
vendor=stratus
;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
esac
echo $basic_machine$os
exit
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:
================================================
FILE: build-aux/install-sh
================================================
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2016-01-11.22; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# 'make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.
tab=' '
nl='
'
IFS=" $tab$nl"
# Set DOITPROG to "echo" to test this script.
doit=${DOITPROG-}
doit_exec=${doit:-exec}
# Put in absolute file names if you don't have them in your path;
# or use environment vars.
chgrpprog=${CHGRPPROG-chgrp}
chmodprog=${CHMODPROG-chmod}
chownprog=${CHOWNPROG-chown}
cmpprog=${CMPPROG-cmp}
cpprog=${CPPROG-cp}
mkdirprog=${MKDIRPROG-mkdir}
mvprog=${MVPROG-mv}
rmprog=${RMPROG-rm}
stripprog=${STRIPPROG-strip}
posix_mkdir=
# Desired mode of installed file.
mode=0755
chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
mvcmd=$mvprog
rmcmd="$rmprog -f"
stripcmd=
src=
dst=
dir_arg=
dst_arg=
copy_on_change=false
is_target_a_directory=possibly
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
--help display this help and exit.
--version display version info and exit.
-c (ignored)
-C install only if different (preserve the last data modification time)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG
"
while test $# -ne 0; do
case $1 in
-c) ;;
-C) copy_on_change=true;;
-d) dir_arg=true;;
-g) chgrpcmd="$chgrpprog $2"
shift;;
--help) echo "$usage"; exit $?;;
-m) mode=$2
case $mode in
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
echo "$0: invalid mode: $mode" >&2
exit 1;;
esac
shift;;
-o) chowncmd="$chownprog $2"
shift;;
-s) stripcmd=$stripprog;;
-t)
is_target_a_directory=always
dst_arg=$2
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
shift;;
-T) is_target_a_directory=never;;
--version) echo "$0 $scriptversion"; exit $?;;
--) shift
break;;
-*) echo "$0: invalid option: $1" >&2
exit 1;;
*) break;;
esac
shift
done
# We allow the use of options -d and -T together, by making -d
# take the precedence; this is for compatibility with GNU install.
if test -n "$dir_arg"; then
if test -n "$dst_arg"; then
echo "$0: target directory not allowed when installing a directory." >&2
exit 1
fi
fi
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dst_arg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dst_arg"
shift # fnord
fi
shift # arg
dst_arg=$arg
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
done
fi
if test $# -eq 0; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call 'install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
if test -z "$dir_arg"; then
if test $# -gt 1 || test "$is_target_a_directory" = always; then
if test ! -d "$dst_arg"; then
echo "$0: $dst_arg: Is not a directory." >&2
exit 1
fi
fi
fi
if test -z "$dir_arg"; then
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
trap "ret=141; $do_exit" 13
trap "ret=143; $do_exit" 15
# Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps.
case $mode in
# Optimize common cases.
*644) cp_umask=133;;
*755) cp_umask=22;;
*[0-7])
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw='% 200'
fi
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
*)
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw=,u+rw
fi
cp_umask=$mode$u_plus_rw;;
esac
fi
for src
do
# Protect names problematic for 'test' and other utilities.
case $src in
-* | [=\(\)!]) src=./$src;;
esac
if test -n "$dir_arg"; then
dst=$src
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dst_arg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dst_arg
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test "$is_target_a_directory" = never; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
dstdir=$dst
dst=$dstdir/`basename "$src"`
dstdir_status=0
else
dstdir=`dirname "$dst"`
test -d "$dstdir"
dstdir_status=$?
fi
fi
obsolete_mkdir_used=false
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
# Create intermediate dirs using mode 755 as modified by the umask.
# This is like FreeBSD 'install' as of 1997-10-28.
umask=`umask`
case $stripcmd.$umask in
# Optimize common cases.
*[2367][2367]) mkdir_umask=$umask;;
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
*[0-7])
mkdir_umask=`expr $umask + 22 \
- $umask % 100 % 40 + $umask % 20 \
- $umask % 10 % 4 + $umask % 2
`;;
*) mkdir_umask=$umask,go-w;;
esac
# With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then
mkdir_mode=-m$mode
else
mkdir_mode=
fi
posix_mkdir=false
case $umask in
*[123567][0-7][0-7])
# POSIX mkdir -p sets u+wx bits regardless of umask, which
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
if (umask $mkdir_umask &&
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
ls_ld_tmpdir=`ls -ld "$tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
rmdir "$tmpdir/d" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
fi
trap '' 0;;
esac;;
esac
if
$posix_mkdir && (
umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
)
then :
else
# The umask is ridiculous, or mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go.
case $dstdir in
/*) prefix='/';;
[-=\(\)!]*) prefix='./';;
*) prefix='';;
esac
oIFS=$IFS
IFS=/
set -f
set fnord $dstdir
shift
set +f
IFS=$oIFS
prefixes=
for d
do
test X"$d" = X && continue
prefix=$prefix$d
if test -d "$prefix"; then
prefixes=
else
if $posix_mkdir; then
(umask=$mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1
else
case $prefix in
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
*) qprefix=$prefix;;
esac
prefixes="$prefixes '$qprefix'"
fi
fi
prefix=$prefix/
done
if test -n "$prefixes"; then
# Don't fail if two instances are running concurrently.
(umask $mkdir_umask &&
eval "\$doit_exec \$mkdirprog $prefixes") ||
test -d "$dstdir" || exit 1
obsolete_mkdir_used=true
fi
fi
fi
if test -n "$dir_arg"; then
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
else
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name.
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
# If -C, don't bother to copy if it wouldn't change the file.
if $copy_on_change &&
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
set -f &&
set X $old && old=:$2:$4:$5:$6 &&
set X $new && new=:$2:$4:$5:$6 &&
set +f &&
test "$old" = "$new" &&
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
then
rm -f "$dsttmp"
else
# Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
{
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
test ! -f "$dst" ||
$doit $rmcmd -f "$dst" 2>/dev/null ||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
} ||
{ echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
}
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dst"
}
fi || exit 1
trap '' 0
fi
done
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
================================================
FILE: build-aux/missing
================================================
#! /bin/sh
# Common wrapper for a few potentially missing GNU programs.
scriptversion=2016-01-11.22; # UTC
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard , 1996.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
if test $# -eq 0; then
echo 1>&2 "Try '$0 --help' for more information"
exit 1
fi
case $1 in
--is-lightweight)
# Used by our autoconf macros to check whether the available missing
# script is modern enough.
exit 0
;;
--run)
# Back-compat with the calling convention used by older automake.
shift
;;
-h|--h|--he|--hel|--help)
echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
to PROGRAM being missing or too old.
Options:
-h, --help display this help and exit
-v, --version output version information and exit
Supported PROGRAM values:
aclocal autoconf autoheader autom4te automake makeinfo
bison yacc flex lex help2man
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
'g' are ignored when checking the name.
Send bug reports to ."
exit $?
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
exit $?
;;
-*)
echo 1>&2 "$0: unknown '$1' option"
echo 1>&2 "Try '$0 --help' for more information"
exit 1
;;
esac
# Run the given program, remember its exit status.
"$@"; st=$?
# If it succeeded, we are done.
test $st -eq 0 && exit 0
# Also exit now if we it failed (or wasn't found), and '--version' was
# passed; such an option is passed most likely to detect whether the
# program is present and works.
case $2 in --version|--help) exit $st;; esac
# Exit code 63 means version mismatch. This often happens when the user
# tries to use an ancient version of a tool on a file that requires a
# minimum version.
if test $st -eq 63; then
msg="probably too old"
elif test $st -eq 127; then
# Program was missing.
msg="missing on your system"
else
# Program was found and executed, but failed. Give up.
exit $st
fi
perl_URL=http://www.perl.org/
flex_URL=http://flex.sourceforge.net/
gnu_software_URL=http://www.gnu.org/software
program_details ()
{
case $1 in
aclocal|automake)
echo "The '$1' program is part of the GNU Automake package:"
echo "<$gnu_software_URL/automake>"
echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
echo "<$gnu_software_URL/autoconf>"
echo "<$gnu_software_URL/m4/>"
echo "<$perl_URL>"
;;
autoconf|autom4te|autoheader)
echo "The '$1' program is part of the GNU Autoconf package:"
echo "<$gnu_software_URL/autoconf/>"
echo "It also requires GNU m4 and Perl in order to run:"
echo "<$gnu_software_URL/m4/>"
echo "<$perl_URL>"
;;
esac
}
give_advice ()
{
# Normalize program name to check for.
normalized_program=`echo "$1" | sed '
s/^gnu-//; t
s/^gnu//; t
s/^g//; t'`
printf '%s\n' "'$1' is $msg."
configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
case $normalized_program in
autoconf*)
echo "You should only need it if you modified 'configure.ac',"
echo "or m4 files included by it."
program_details 'autoconf'
;;
autoheader*)
echo "You should only need it if you modified 'acconfig.h' or"
echo "$configure_deps."
program_details 'autoheader'
;;
automake*)
echo "You should only need it if you modified 'Makefile.am' or"
echo "$configure_deps."
program_details 'automake'
;;
aclocal*)
echo "You should only need it if you modified 'acinclude.m4' or"
echo "$configure_deps."
program_details 'aclocal'
;;
autom4te*)
echo "You might have modified some maintainer files that require"
echo "the 'autom4te' program to be rebuilt."
program_details 'autom4te'
;;
bison*|yacc*)
echo "You should only need it if you modified a '.y' file."
echo "You may want to install the GNU Bison package:"
echo "<$gnu_software_URL/bison/>"
;;
lex*|flex*)
echo "You should only need it if you modified a '.l' file."
echo "You may want to install the Fast Lexical Analyzer package:"
echo "<$flex_URL>"
;;
help2man*)
echo "You should only need it if you modified a dependency" \
"of a man page."
echo "You may want to install the GNU Help2man package:"
echo "<$gnu_software_URL/help2man/>"
;;
makeinfo*)
echo "You should only need it if you modified a '.texi' file, or"
echo "any other file indirectly affecting the aspect of the manual."
echo "You might want to install the Texinfo package:"
echo "<$gnu_software_URL/texinfo/>"
echo "The spurious makeinfo call might also be the consequence of"
echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
echo "want to install GNU make:"
echo "<$gnu_software_URL/make/>"
;;
*)
echo "You might have modified some files without having the proper"
echo "tools for further handling them. Check the 'README' file, it"
echo "often tells you about the needed prerequisites for installing"
echo "this package. You may also peek at any GNU archive site, in"
echo "case some other package contains this missing '$1' program."
;;
esac
}
give_advice "$1" | sed -e '1s/^/WARNING: /' \
-e '2,$s/^/ /' >&2
# Propagate the correct exit status (expected to be 127 for a program
# not found, 63 for a program that failed due to version mismatch).
exit $st
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:
================================================
FILE: build.bat
================================================
@echo off
SETLOCAL
for %%x in (%cmdcmdline%) do if %%~x==/c set DOUBLECLICKED=1
:: set path to erlang installation
call "%~dp0"\bin\find_erlang.bat
::replace @EMAKEFILEDEFINES@ from Emakefile.in and write Emakefile
::(this is what autoconf on *nix would do)
:: depending on your config, you might need to add one or more of the following options:
:: {d, enable_debug}
:: {d, have_ctline_support}
:: {d, have_callback_support}
:: {d, with_crypto_hash}
:: {d, with_rand}
:: {d, with_maps}
:: refer to configure.ac for the appropriate checks for necessity
::if yaws should use the file:sendfile/5 functionality, set @YAWS_OPTIONS@ to
:: {d, 'HAVE_ERLANG_SENDFILE'}
::similarly for yaws, add to @YAWS_OPTIONS@ if required:
:: {d, 'HAVE_CRYPTO_HASH'}
:: {d, 'HAVE_ERLANG_NOW'}
::but note the issues in R15 & R16 mentioned at http://erlang.org/pipermail/erlang-questions/2013-October/075676.html
:: Note: Search & Replace functionality from http://www.dostips.com
if not exist Emakefile (
echo Creating Emakefile...
for /f "tokens=1,* delims=&&&" %%a in (Emakefile.in) do (
set "line=%%a"
if defined line (
call set "line=echo.%%line: @EMAKEFILEDEFINES@=%%"
call set "line=%%line: @YAWS_OPTIONS@=%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X >> Emakefile
) ELSE echo.
)
echo ...done!
)
if not exist include/rt.hrl (
echo Creating include/rt.hrl using rt_chord...
echo -include^("rt_chord.hrl"^).>> include/rt.hrl
)
@echo on
pushd "%~dp0""\contrib\log4erl\src"
%ERLANG_HOME%\bin\erlc.exe log4erl_parser.yrl
%ERLANG_HOME%\bin\erl.exe -noinput -noshell -s leex file log4erl_lex.xrl -s init stop
popd
%ERLANG_HOME%\bin\erl.exe -pa contrib\yaws -pa ebin -noinput +B -eval "case make:all() of up_to_date -> halt(0); error -> halt(1) end."
@echo off
if defined DOUBLECLICKED PAUSE
================================================
FILE: configure
================================================
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for scalaris 0.9.0+git.
#
# Report bugs to .
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
#
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
esac
fi
as_nl='
'
export as_nl
# Printing a long string crashes Solaris 7 /usr/bin/printf.
as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
# Prefer a ksh shell builtin over an external printf program on Solaris,
# but without wasting forks for bash or zsh.
if test -z "$BASH_VERSION$ZSH_VERSION" \
&& (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='print -r --'
as_echo_n='print -rn --'
elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='printf %s\n'
as_echo_n='printf %s'
else
if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
as_echo_n='/usr/ucb/echo -n'
else
as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
as_echo_n_body='eval
arg=$1;
case $arg in #(
*"$as_nl"*)
expr "X$arg" : "X\\(.*\\)$as_nl";
arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
esac;
expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
'
export as_echo_n_body
as_echo_n='sh -c $as_echo_n_body as_echo'
fi
export as_echo_body
as_echo='sh -c $as_echo_body as_echo'
fi
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
PATH_SEPARATOR=';'
}
fi
# IFS
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
done
IFS=$as_save_IFS
;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
$as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
# Unset variables that we do not need and which cause bugs (e.g. in
# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
# suppresses any "Segmentation fault" message there. '((' could
# trigger a bug in pdksh 5.2.14.
for as_var in BASH_ENV ENV MAIL MAILPATH
do eval test x\${$as_var+set} = xset \
&& ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE
# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# Use a proper internal environment variable to ensure we don't fall
# into an infinite loop, continuously re-executing ourselves.
if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
_as_can_reexec=no; export _as_can_reexec;
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
*v*x* | *x*v* ) as_opts=-vx ;;
*v* ) as_opts=-v ;;
*x* ) as_opts=-x ;;
* ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
as_fn_exit 255
fi
# We don't want this to propagate to other subprocesses.
{ _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
# is contrary to our usage. Disable this feature.
alias -g '\${1+\"\$@\"}'='\"\$@\"'
setopt NO_GLOB_SUBST
else
case \`(set -o) 2>/dev/null\` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
esac
fi
"
as_required="as_fn_return () { (exit \$1); }
as_fn_success () { as_fn_return 0; }
as_fn_failure () { as_fn_return 1; }
as_fn_ret_success () { return 0; }
as_fn_ret_failure () { return 1; }
exitcode=0
as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
else
exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
test -x / || exit 1"
as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
if (eval "$as_required") 2>/dev/null; then :
as_have_required=yes
else
as_have_required=no
fi
if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
as_found=:
case $as_dir in #(
/*)
for as_base in sh bash ksh sh5; do
# Try only shells that exist, to save several forks.
as_shell=$as_dir/$as_base
if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
{ $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
CONFIG_SHELL=$as_shell as_have_required=yes
if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
break 2
fi
fi
done;;
esac
as_found=false
done
$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
{ $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
CONFIG_SHELL=$SHELL as_have_required=yes
fi; }
IFS=$as_save_IFS
if test "x$CONFIG_SHELL" != x; then :
export CONFIG_SHELL
# We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
*v*x* | *x*v* ) as_opts=-vx ;;
*v* ) as_opts=-v ;;
*x* ) as_opts=-x ;;
* ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi
if test x$as_have_required = xno; then :
$as_echo "$0: This script requires a shell more modern than all"
$as_echo "$0: the shells that I found on your system."
if test x${ZSH_VERSION+set} = xset ; then
$as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
$as_echo "$0: be upgraded to zsh 4.3.4 or later."
else
$as_echo "$0: Please tell bug-autoconf@gnu.org and
$0: scalaris@googlegroups.com about your system, including
$0: any error possibly output before this message. Then
$0: install a modern shell, or manually run the script
$0: under such a shell if you do have one."
fi
exit 1
fi
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
# Unset more variables known to interfere with behavior of common tools.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS
## --------------------- ##
## M4sh Shell Functions. ##
## --------------------- ##
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{
case $as_dir in #(
-*) as_dir=./$as_dir;;
esac
test -d "$as_dir" || eval $as_mkdir_p || {
as_dirs=
while :; do
case $as_dir in #(
*\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
test -d "$as_dir" && break
done
test -z "$as_dirs" || eval "mkdir $as_dirs"
} || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
} # as_fn_mkdir_p
# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
test -f "$1" && test -x "$1"
} # as_fn_executable_p
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
else
as_fn_append ()
{
eval $1=\$$1\$2
}
fi # as_fn_append
# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
else
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
$as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
$as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
as_dirname=dirname
else
as_dirname=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
as_lineno_1=$LINENO as_lineno_1a=$LINENO
as_lineno_2=$LINENO as_lineno_2a=$LINENO
eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
# Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
sed -n '
p
/[$]LINENO/=
' <$as_myself |
sed '
s/[$]LINENO.*/&-/
t lineno
b
:lineno
N
:loop
s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
t loop
s/-\n.*//
' >$as_me.lineno &&
chmod +x "$as_me.lineno" ||
{ $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
# If we had to re-execute with $CONFIG_SHELL, we're ensured to have
# already done that, so ensure we don't try to do so again and fall
# in an infinite loop. This has already happened in practice.
_as_can_reexec=no; export _as_can_reexec
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
# original and so on. Autoconf is especially sensitive to this).
. "./$as_me.lineno"
# Exit status is that of the last command.
exit
}
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
case `echo 'xy\c'` in
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
xy) ECHO_C='\c';;
*) echo `echo ksh88 bug on AIX 6.1` > /dev/null
ECHO_T=' ';;
esac;;
*)
ECHO_N='-n';;
esac
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
else
rm -f conf$$.dir
mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
# ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
# In both cases, we have to default to `cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -pR'
fi
else
as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
if mkdir -p . 2>/dev/null; then
as_mkdir_p='mkdir -p "$as_dir"'
else
test -d ./-p && rmdir ./-p
as_mkdir_p=false
fi
as_test_x='test -x'
as_executable_p=as_fn_executable_p
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
test -n "$DJDIR" || exec 7<&0 &1
# Name of the host.
# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
#
# Initializations.
#
ac_default_prefix=/usr/local
ac_clean_files=
ac_config_libobj_dir=.
LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='scalaris'
PACKAGE_TARNAME='scalaris'
PACKAGE_VERSION='0.9.0+git'
PACKAGE_STRING='scalaris 0.9.0+git'
PACKAGE_BUGREPORT='scalaris@googlegroups.com'
PACKAGE_URL=''
# Factoring default headers for most tests.
ac_includes_default="\
#include
#ifdef HAVE_SYS_TYPES_H
# include
#endif
#ifdef HAVE_SYS_STAT_H
# include
#endif
#ifdef STDC_HEADERS
# include
# include
#else
# ifdef HAVE_STDLIB_H
# include
# endif
#endif
#ifdef HAVE_STRING_H
# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
# include
# endif
# include
#endif
#ifdef HAVE_STRINGS_H
# include
#endif
#ifdef HAVE_INTTYPES_H
# include
#endif
#ifdef HAVE_STDINT_H
# include
#endif
#ifdef HAVE_UNISTD_H
# include
#endif"
ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
ARCHIVECMD
NIFFLAGS
DRIVER_OS
EGREP
GREP
CPP
ENABLEPYTHON3INSTALL
ENABLEPYTHON3
PYTHON3SITELIBDIR
PYTHON3
PYTHON3_2TO3
ENABLEPYTHON2INSTALL
PYTHON2SITELIBDIR
PYTHON2
RUBYSITELIBDIR
ENABLERUBYINSTALL
BUILDCLASSPATH
JAVAFUNCTIONS
RT
YAWS_OPTIONS
EMAKEFILECOMPILECOMPAT
DIALYZER_FLAGS
EDOCMACROS
EMAKEFILEDEFINES
ERLANG_ERLANGJS_FLAGS
ERLANG_LIB_VER_erlang_js
ERLANG_LIB_DIR_erlang_js
BITCASK_LIBS
ERLANG_BITCASK_FLAGS
ERLANG_LIB_VER_bitcask
ERLANG_LIB_DIR_bitcask
ERLANG_HANOIDB_FLAGS
ERLANG_LIB_VER_hanoidb
ERLANG_LIB_DIR_hanoidb
ERLANG_TOKE_FLAGS
ERLANG_LIB_VER_toke
ERLANG_LIB_DIR_toke
RUN_TEST
CT_RUN_FILE
RUN_TEST_FILE
ERLANG_LIB_VER_edoc
ERLANG_LIB_DIR_edoc
ERLANG_LIB_VER_common_test
ERLANG_LIB_DIR_common_test
ERLANG_LIB_VER_xmerl
ERLANG_LIB_DIR_xmerl
ERLANG_LIB_VER_ssl
ERLANG_LIB_DIR_ssl
ERLANG_LIB_VER_inets
ERLANG_LIB_DIR_inets
ERLANG_LIB_VER_tools
ERLANG_LIB_DIR_tools
ERLANG_LIB_VER_os_mon
ERLANG_LIB_DIR_os_mon
ERLANG_LIB_VER_crypto
ERLANG_LIB_DIR_crypto
ERLANG_LIB_VER_compiler
ERLANG_LIB_DIR_compiler
ERLANG_LIB_VER_stdlib
ERLANG_LIB_DIR_stdlib
ERLANG_LIB_VER_kernel
ERLANG_LIB_DIR_kernel
ERLANG_LIB_VER_erts
ERLANG_LIB_DIR_erts
EPMD
ERLANG_ERTS_VER
ERLANG_LIB_DIR
ERLANG_ROOT_DIR
ERL
ERLCFLAGS
ERLC
SYSTEMD_UNITDIR
INSTALL_INIT
RUNUSER
SUDO
SCREEN
BROWSER
JSONFLAGS
CXXSHELL
CLANGTIDY
CLANGFORMAT
OPENSSL_LDFLAGS
OPENSSL_LIBS
OPENSSL_INCLUDES
BOOST_UNIT_TEST_FRAMEWORK_LIB
BOOST_PROGRAM_OPTIONS_LIB
BOOST_ASIO_LIB
BOOST_REGEX_LIB
BOOST_SYSTEM_LIB
am__fastdepCC_FALSE
am__fastdepCC_TRUE
CCDEPMODE
ac_ct_CC
CFLAGS
CC
BOOST_LDFLAGS
BOOST_CPPFLAGS
host_os
host_vendor
host_cpu
host
build_os
build_vendor
build_cpu
build
HAVE_CXX14
am__fastdepCXX_FALSE
am__fastdepCXX_TRUE
CXXDEPMODE
am__nodep
AMDEPBACKSLASH
AMDEP_FALSE
AMDEP_TRUE
am__include
DEPDIR
OBJEXT
EXEEXT
ac_ct_CXX
CPPFLAGS
LDFLAGS
CXXFLAGS
CXX
LIBTOOL
AR
DOXYGEN
SED
TRUE
FALSE
AM_BACKSLASH
AM_DEFAULT_VERBOSITY
AM_DEFAULT_V
AM_V
am__untar
am__tar
AMTAR
am__leading_dot
SET_MAKE
AWK
mkdir_p
MKDIR_P
INSTALL_STRIP_PROGRAM
STRIP
install_sh
MAKEINFO
AUTOHEADER
AUTOMAKE
AUTOCONF
ACLOCAL
VERSION
PACKAGE
CYGPATH_W
am__isrc
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
target_alias
host_alias
build_alias
LIBS
ECHO_T
ECHO_N
ECHO_C
DEFS
mandir
localedir
libdir
psdir
pdfdir
dvidir
htmldir
infodir
docdir
oldincludedir
includedir
localstatedir
sharedstatedir
sysconfdir
datadir
datarootdir
libexecdir
sbindir
bindir
program_transform_name
prefix
exec_prefix
PACKAGE_URL
PACKAGE_BUGREPORT
PACKAGE_STRING
PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
SHELL
am__quote'
ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_silent_rules
enable_cpp
enable_dependency_tracking
with_boost
with_boost_libdir
with_boost_system
with_boost_regex
with_boost_asio
with_boost_program_options
with_boost_unit_test_framework
with_openssl
enable_toke
enable_hanoidb
enable_bitcask
enable_erlang_js
with_browser
enable_runuser
with_systemd
enable_native
enable_debug
enable_txnew
with_rt
with_java_functions
with_build_classpath
with_ruby_sitelibdir
'
ac_precious_vars='build_alias
host_alias
target_alias
CXX
CXXFLAGS
LDFLAGS
LIBS
CPPFLAGS
CCC
CC
CFLAGS
ERLC
ERLCFLAGS
ERL
CPP'
# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
ac_unrecognized_opts=
ac_unrecognized_sep=
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
exec_prefix=NONE
no_create=
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
verbose=
x_includes=NONE
x_libraries=NONE
# Installation directory options.
# These are left unexpanded so users can "make install exec_prefix=/foo"
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datarootdir='${prefix}/share'
datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
infodir='${datarootdir}/info'
htmldir='${docdir}'
dvidir='${docdir}'
pdfdir='${docdir}'
psdir='${docdir}'
libdir='${exec_prefix}/lib'
localedir='${datarootdir}/locale'
mandir='${datarootdir}/man'
ac_prev=
ac_dashdash=
for ac_option
do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval $ac_prev=\$ac_option
ac_prev=
continue
fi
case $ac_option in
*=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
*=) ac_optarg= ;;
*) ac_optarg=yes ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case $ac_dashdash$ac_option in
--)
ac_dashdash=yes ;;
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build_alias=$ac_optarg ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
cache_file=$ac_optarg ;;
--config-cache | -C)
cache_file=config.cache ;;
-datadir | --datadir | --datadi | --datad)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=*)
datadir=$ac_optarg ;;
-datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
| --dataroo | --dataro | --datar)
ac_prev=datarootdir ;;
-datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
| --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
datarootdir=$ac_optarg ;;
-disable-* | --disable-*)
ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid feature name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval enable_$ac_useropt=no ;;
-docdir | --docdir | --docdi | --doc | --do)
ac_prev=docdir ;;
-docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
docdir=$ac_optarg ;;
-dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
ac_prev=dvidir ;;
-dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
dvidir=$ac_optarg ;;
-enable-* | --enable-*)
ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid feature name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"enable_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval enable_$ac_useropt=\$ac_optarg ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
| --exec | --exe | --ex)
ac_prev=exec_prefix ;;
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
-help | --help | --hel | --he | -h)
ac_init_help=long ;;
-help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
ac_init_help=recursive ;;
-help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
ac_init_help=short ;;
-host | --host | --hos | --ho)
ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
host_alias=$ac_optarg ;;
-htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
ac_prev=htmldir ;;
-htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
| --ht=*)
htmldir=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
libdir=$ac_optarg ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
libexecdir=$ac_optarg ;;
-localedir | --localedir | --localedi | --localed | --locale)
ac_prev=localedir ;;
-localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
localedir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst | --locals)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
mandir=$ac_optarg ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c | -n)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
no_recursion=yes ;;
-oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
| --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
| --oldin | --oldi | --old | --ol | --o)
ac_prev=oldincludedir ;;
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
prefix=$ac_optarg ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
program_prefix=$ac_optarg ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
program_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
| --program-transform-n | --program-transform- \
| --program-transform | --program-transfor \
| --program-transfo | --program-transf \
| --program-trans | --program-tran \
| --progr-tra | --program-tr | --program-t)
ac_prev=program_transform_name ;;
-program-transform-name=* | --program-transform-name=* \
| --program-transform-nam=* | --program-transform-na=* \
| --program-transform-n=* | --program-transform-=* \
| --program-transform=* | --program-transfor=* \
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
program_transform_name=$ac_optarg ;;
-pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
ac_prev=pdfdir ;;
-pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
pdfdir=$ac_optarg ;;
-psdir | --psdir | --psdi | --psd | --ps)
ac_prev=psdir ;;
-psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
psdir=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
silent=yes ;;
-sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
| --sharedst | --shareds | --shared | --share | --shar \
| --sha | --sh)
ac_prev=sharedstatedir ;;
-sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir=$ac_optarg ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers | -V)
ac_init_version=: ;;
-with-* | --with-*)
ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid package name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval with_$ac_useropt=\$ac_optarg ;;
-without-* | --without-*)
ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
as_fn_error $? "invalid package name: $ac_useropt"
ac_useropt_orig=$ac_useropt
ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
case $ac_user_opts in
*"
"with_$ac_useropt"
"*) ;;
*) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
ac_unrecognized_sep=', ';;
esac
eval with_$ac_useropt=no ;;
--x)
# Obsolete; use --with-x.
with_x=yes ;;
-x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
| --x-incl | --x-inc | --x-in | --x-i)
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
x_includes=$ac_optarg ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
x_libraries=$ac_optarg ;;
-*) as_fn_error $? "unrecognized option: \`$ac_option'
Try \`$0 --help' for more information"
;;
*=*)
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
# Reject names that are not valid shell variable names.
case $ac_envvar in #(
'' | [0-9]* | *[!_$as_cr_alnum]* )
as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
esac
eval $ac_envvar=\$ac_optarg
export $ac_envvar ;;
*)
# FIXME: should be removed in autoconf 3.0.
$as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
$as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
: "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
;;
esac
done
if test -n "$ac_prev"; then
ac_option=--`echo $ac_prev | sed 's/_/-/g'`
as_fn_error $? "missing argument to $ac_option"
fi
if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no) ;;
fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
*) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
esac
fi
# Check all directory arguments for consistency.
for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
datadir sysconfdir sharedstatedir localstatedir includedir \
oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
libdir localedir mandir
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
case $ac_val in
*/ )
ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
eval $ac_var=\$ac_val;;
esac
# Be sure to have absolute directory names.
case $ac_val in
[\\/$]* | ?:[\\/]* ) continue;;
NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
esac
as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done
# There might be people who depend on the old broken behavior: `$host'
# used to hold the argument of --host etc.
# FIXME: To remove some day.
build=$build_alias
host=$host_alias
target=$target_alias
# FIXME: To remove some day.
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
fi
fi
ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
ac_pwd=`pwd` && test -n "$ac_pwd" &&
ac_ls_di=`ls -di .` &&
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
as_fn_error $? "working directory cannot be determined"
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
as_fn_error $? "pwd does not report name of working directory"
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then the parent directory.
ac_confdir=`$as_dirname -- "$as_myself" ||
$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_myself" : 'X\(//\)[^/]' \| \
X"$as_myself" : 'X\(//\)$' \| \
X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_myself" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
srcdir=$ac_confdir
if test ! -r "$srcdir/$ac_unique_file"; then
srcdir=..
fi
else
ac_srcdir_defaulted=no
fi
if test ! -r "$srcdir/$ac_unique_file"; then
test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
fi
ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
ac_abs_confdir=`(
cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
pwd)`
# When building in place, set srcdir=.
if test "$ac_abs_confdir" = "$ac_pwd"; then
srcdir=.
fi
# Remove unnecessary trailing slashes from srcdir.
# Double slashes in file names in object file debugging info
# mess up M-x gdb in Emacs.
case $srcdir in
*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
esac
for ac_var in $ac_precious_vars; do
eval ac_env_${ac_var}_set=\${${ac_var}+set}
eval ac_env_${ac_var}_value=\$${ac_var}
eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
eval ac_cv_env_${ac_var}_value=\$${ac_var}
done
#
# Report the --help message.
#
if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures scalaris 0.9.0+git to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print \`checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for \`--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
an installation prefix other than \`$ac_default_prefix' using \`--prefix',
for instance \`--prefix=\$HOME'.
For better control, use the options below.
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
--datadir=DIR read-only architecture-independent data [DATAROOTDIR]
--infodir=DIR info documentation [DATAROOTDIR/info]
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root [DATAROOTDIR/doc/scalaris]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
--psdir=DIR ps documentation [DOCDIR]
_ACEOF
cat <<\_ACEOF
Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
_ACEOF
fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of scalaris 0.9.0+git:";;
esac
cat <<\_ACEOF
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-silent-rules less verbose build output (undo: "make V=1")
--disable-silent-rules verbose build output (undo: "make V=0")
--disable-cpp disable support for the C++ bindings
--enable-dependency-tracking
do not reject slow dependency extractors
--disable-dependency-tracking
speeds up one-time build
--enable-toke[=DIR] enable support for tokyo cabinet through toke
--enable-hanoidb[=DIR] enable support for hanoidb
--enable-bitcask[=DIR] enable support for bitcask
--enable-erlang-js[=DIR]
enable support for erlang_js
--disable-runuser disable support for runuser (use sudo instead)
--enable-native enable compilation to native code using HiPE
--enable-debug enable debugging mode
--enable-txnew enable new transaction protocol
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-boost[=ARG] use Boost library from a standard location
(ARG=yes), from the specified location (ARG=),
or disable it (ARG=no) [ARG=yes]
--with-boost-libdir=LIB_DIR
Force given directory for boost libraries. Note that
this will override library path detection, so use
this parameter only if default library detection
fails and you know exactly where your boost
libraries are located.
--with-boost-system[=special-lib]
use the System library from boost - it is possible
to specify a certain library for the linker e.g.
--with-boost-system=boost_system-gcc-mt
--with-boost-regex[=special-lib]
use the Regex library from boost - it is possible to
specify a certain library for the linker e.g.
--with-boost-regex=boost_regex-gcc-mt-d-1_33_1
--with-boost-asio[=special-lib]
use the ASIO library from boost - it is possible to
specify a certain library for the linker e.g.
--with-boost-asio=boost_system-gcc41-mt-1_34
--with-boost-program-options[=special-lib]
use the program options library from boost - it is
possible to specify a certain library for the linker
e.g.
--with-boost-program-options=boost_program_options-gcc-mt-1_33_1
--with-boost-unit-test-framework[=special-lib]
use the Unit_Test_Framework library from boost - it
is possible to specify a certain library for the
linker e.g.
--with-boost-unit-test-framework=boost_unit_test_framework-gcc
--with-openssl=DIR root of the OpenSSL directory
--with-browser=BROWSER absolute path of the browser to use for 'make
test-vts'
--with-systemd[=UNITDIR]
use systemd, optionally specify the directory for
systemd service files
--with-rt[=RTFILE] optionally specify the routing table type
(default=rt_chord)
--with-java-functions=JAVAFUNCTIONS
use the given java-functions script for
java-api/scalaris (default is
/usr/share/java-utils/java-functions)
--with-build-classpath=BUILDCLASSPATH
absolute path of the build-classpath script to use
for java-api/scalaris
--with-ruby-sitelibdir=SITELIBDIR
where to install ruby libraries
Some influential environment variables:
CXX C++ compiler command
CXXFLAGS C++ compiler flags
LDFLAGS linker flags, e.g. -L if you have libraries in a
nonstandard directory
LIBS libraries to pass to the linker, e.g. -l
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if
you have headers in a nonstandard directory
CC C compiler command
CFLAGS C compiler flags
ERLC Erlang/OTP compiler command [autodetected]
ERLCFLAGS Erlang/OTP compiler flags [none]
ERL Erlang/OTP interpreter command [autodetected]
CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to .
_ACEOF
ac_status=$?
fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
test -d "$ac_dir" ||
{ cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
continue
ac_builddir=.
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix
case $srcdir in
.) # We are building in place.
ac_srcdir=.
ac_top_srcdir=$ac_top_builddir_sub
ac_abs_top_srcdir=$ac_pwd ;;
[\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
ac_top_srcdir=$srcdir
ac_abs_top_srcdir=$srcdir ;;
*) # Relative name.
ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
ac_top_srcdir=$ac_top_build_prefix$srcdir
ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
cd "$ac_dir" || { ac_status=$?; continue; }
# Check for guested configure.
if test -f "$ac_srcdir/configure.gnu"; then
echo &&
$SHELL "$ac_srcdir/configure.gnu" --help=recursive
elif test -f "$ac_srcdir/configure"; then
echo &&
$SHELL "$ac_srcdir/configure" --help=recursive
else
$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi || ac_status=$?
cd "$ac_pwd" || { ac_status=$?; break; }
done
fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
scalaris configure 0.9.0+git
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
exit
fi
## ------------------------ ##
## Autoconf initialization. ##
## ------------------------ ##
# ac_fn_cxx_try_compile LINENO
# ----------------------------
# Try to compile conftest.$ac_ext, and return whether this succeeded.
ac_fn_cxx_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
rm -f conftest.$ac_objext
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_cxx_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then :
ac_retval=0
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_cxx_try_compile
# ac_fn_c_try_compile LINENO
# --------------------------
# Try to compile conftest.$ac_ext, and return whether this succeeded.
ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
rm -f conftest.$ac_objext
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then :
ac_retval=0
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_compile
# ac_fn_c_try_link LINENO
# -----------------------
# Try to link conftest.$ac_ext, and return whether this succeeded.
ac_fn_c_try_link ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
rm -f conftest.$ac_objext conftest$ac_exeext
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest$ac_exeext && {
test "$cross_compiling" = yes ||
test -x conftest$ac_exeext
}; then :
ac_retval=0
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
# Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
# created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
# interfere with the next link command; also delete a directory that is
# left behind by Apple's compiler. We do this before executing the actions.
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_link
# ac_fn_erl_try_run LINENO
# ------------------------
# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
# that executables *can* be run.
ac_fn_erl_try_run ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then :
ac_retval=0
else
$as_echo "$as_me: program exited with status $ac_status" >&5
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
fi
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_erl_try_run
# ac_fn_c_try_cpp LINENO
# ----------------------
# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
ac_fn_c_try_cpp ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
if { { ac_try="$ac_cpp conftest.$ac_ext"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } > conftest.i && {
test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
test ! -s conftest.err
}; then :
ac_retval=0
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_cpp
# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists, giving a warning if it cannot be compiled using
# the include files in INCLUDES and setting the cache variable VAR
# accordingly.
ac_fn_c_check_header_mongrel ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
if eval \${$3+:} false; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
fi
eval ac_res=\$$3
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
else
# Is the header compilable?
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
$as_echo_n "checking $2 usability... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
ac_header_compiler=yes
else
ac_header_compiler=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
$as_echo "$ac_header_compiler" >&6; }
# Is the header present?
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
$as_echo_n "checking $2 presence... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <$2>
_ACEOF
if ac_fn_c_try_cpp "$LINENO"; then :
ac_header_preproc=yes
else
ac_header_preproc=no
fi
rm -f conftest.err conftest.i conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
$as_echo "$ac_header_preproc" >&6; }
# So? What about this header?
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
yes:no: )
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
;;
no:yes:* )
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
( $as_echo "## ---------------------------------------- ##
## Report this to scalaris@googlegroups.com ##
## ---------------------------------------- ##"
) | sed "s/^/$as_me: WARNING: /" >&2
;;
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
else
eval "$3=\$ac_header_compiler"
fi
eval ac_res=\$$3
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_mongrel
# ac_fn_c_try_run LINENO
# ----------------------
# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
# that executables *can* be run.
ac_fn_c_try_run ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then :
ac_retval=0
else
$as_echo "$as_me: program exited with status $ac_status" >&5
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=$ac_status
fi
rm -rf conftest.dSYM conftest_ipa8_conftest.oo
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_run
# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
# -------------------------------------------------------
# Tests whether HEADER exists and can be compiled using the include files in
# INCLUDES, setting the cache variable VAR accordingly.
ac_fn_c_check_header_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
$as_echo_n "checking for $2... " >&6; }
if eval \${$3+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
$4
#include <$2>
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
eval "$3=yes"
else
eval "$3=no"
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
eval ac_res=\$$3
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_header_compile
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by scalaris $as_me 0.9.0+git, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
_ACEOF
exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
## Platform. ##
## --------- ##
hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`
/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
_ASUNAME
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
$as_echo "PATH: $as_dir"
done
IFS=$as_save_IFS
} >&5
cat >&5 <<_ACEOF
## ----------- ##
## Core tests. ##
## ----------- ##
_ACEOF
# Keep a trace of the command line.
# Strip out --no-create and --no-recursion so they do not pile up.
# Strip out --silent because we don't want to record it for future runs.
# Also quote any args containing shell meta-characters.
# Make two passes to allow for proper duplicate-argument suppression.
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
ac_must_keep_next=false
for ac_pass in 1 2
do
for ac_arg
do
case $ac_arg in
-no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
continue ;;
*\'*)
ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
case $ac_pass in
1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
2)
as_fn_append ac_configure_args1 " '$ac_arg'"
if test $ac_must_keep_next = true; then
ac_must_keep_next=false # Got value, back to normal.
else
case $ac_arg in
*=* | --config-cache | -C | -disable-* | --disable-* \
| -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
| -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
| -with-* | --with-* | -without-* | --without-* | --x)
case "$ac_configure_args0 " in
"$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
esac
;;
-* ) ac_must_keep_next=true ;;
esac
fi
as_fn_append ac_configure_args " '$ac_arg'"
;;
esac
done
done
{ ac_configure_args0=; unset ac_configure_args0;}
{ ac_configure_args1=; unset ac_configure_args1;}
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
# would cause problems or look ugly.
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
{
echo
$as_echo "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
echo
# The following way of writing the cache mishandles newlines in values,
(
for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
eval ac_val=\$$ac_var
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
*_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
*) { eval $ac_var=; unset $ac_var;} ;;
esac ;;
esac
done
(set) 2>&1 |
case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
*${as_nl}ac_space=\ *)
sed -n \
"s/'\''/'\''\\\\'\'''\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
;; #(
*)
sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
esac |
sort
)
echo
$as_echo "## ----------------- ##
## Output variables. ##
## ----------------- ##"
echo
for ac_var in $ac_subst_vars
do
eval ac_val=\$$ac_var
case $ac_val in
*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
$as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
if test -n "$ac_subst_files"; then
$as_echo "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
echo
for ac_var in $ac_subst_files
do
eval ac_val=\$$ac_var
case $ac_val in
*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
esac
$as_echo "$ac_var='\''$ac_val'\''"
done | sort
echo
fi
if test -s confdefs.h; then
$as_echo "## ----------- ##
## confdefs.h. ##
## ----------- ##"
echo
cat confdefs.h
echo
fi
test "$ac_signal" != 0 &&
$as_echo "$as_me: caught signal $ac_signal"
$as_echo "$as_me: exit $exit_status"
} >&5
rm -f core *.core core.conftest.* &&
rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
' 0
for ac_signal in 1 2 13 15; do
trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
done
ac_signal=0
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h
$as_echo "/* confdefs.h */" > confdefs.h
# Predefined preprocessor variables.
cat >>confdefs.h <<_ACEOF
#define PACKAGE_NAME "$PACKAGE_NAME"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_VERSION "$PACKAGE_VERSION"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_STRING "$PACKAGE_STRING"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define PACKAGE_URL "$PACKAGE_URL"
_ACEOF
# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
ac_site_file1=NONE
ac_site_file2=NONE
if test -n "$CONFIG_SITE"; then
# We do not want a PATH search for config.site.
case $CONFIG_SITE in #((
-*) ac_site_file1=./$CONFIG_SITE;;
*/*) ac_site_file1=$CONFIG_SITE;;
*) ac_site_file1=./$CONFIG_SITE;;
esac
elif test "x$prefix" != xNONE; then
ac_site_file1=$prefix/share/config.site
ac_site_file2=$prefix/etc/config.site
else
ac_site_file1=$ac_default_prefix/share/config.site
ac_site_file2=$ac_default_prefix/etc/config.site
fi
for ac_site_file in "$ac_site_file1" "$ac_site_file2"
do
test "x$ac_site_file" = xNONE && continue
if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
$as_echo "$as_me: loading site script $ac_site_file" >&6;}
sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file" \
|| { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
fi
done
if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special files
# actually), so we avoid doing that. DJGPP emulates it as a regular file.
if test /dev/null != "$cache_file" && test -f "$cache_file"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
$as_echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . "$cache_file";;
*) . "./$cache_file";;
esac
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
$as_echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
for ac_var in $ac_precious_vars; do
eval ac_old_set=\$ac_cv_env_${ac_var}_set
eval ac_new_set=\$ac_env_${ac_var}_set
eval ac_old_val=\$ac_cv_env_${ac_var}_value
eval ac_new_val=\$ac_env_${ac_var}_value
case $ac_old_set,$ac_new_set in
set,)
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
ac_cache_corrupted=: ;;
,set)
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
ac_cache_corrupted=: ;;
,);;
*)
if test "x$ac_old_val" != "x$ac_new_val"; then
# differences in whitespace do not lead to failure.
ac_old_val_w=`echo x $ac_old_val`
ac_new_val_w=`echo x $ac_new_val`
if test "$ac_old_val_w" != "$ac_new_val_w"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
ac_cache_corrupted=:
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
eval $ac_var=\$ac_old_val
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
fi;;
esac
# Pass precious variables to config.status.
if test "$ac_new_set" = set; then
case $ac_new_val in
*\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
*) ac_arg=$ac_var=$ac_new_val ;;
esac
case " $ac_configure_args " in
*" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
*) as_fn_append ac_configure_args " '$ac_arg'" ;;
esac
fi
done
if $ac_cache_corrupted; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
## -------------------- ##
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
# we will never do automake, just pull in config.guess, config.sub, ... for boost
ac_aux_dir=
for ac_dir in build-aux "$srcdir"/build-aux; do
if test -f "$ac_dir/install-sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
elif test -f "$ac_dir/install.sh"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
elif test -f "$ac_dir/shtool"; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/shtool install -c"
break
fi
done
if test -z "$ac_aux_dir"; then
as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
fi
# These three variables are undocumented and unsupported,
# and are intended to be withdrawn in a future Autoconf release.
# They can cause serious problems if a builder's source tree is in a directory
# whose full name contains unusual characters.
ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
am__api_version='1.16'
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
# AmigaOS /C/install, which installs bootblocks on floppy discs
# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# OS/2's system install, which has a completely different semantic
# ./install, which can be erroneously created by make from ./install.sh.
# Reject install programs that cannot install multiple files.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
$as_echo_n "checking for a BSD-compatible install... " >&6; }
if test -z "$INSTALL"; then
if ${ac_cv_path_install+:} false; then :
$as_echo_n "(cached) " >&6
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
# Account for people who put trailing slashes in PATH elements.
case $as_dir/ in #((
./ | .// | /[cC]/* | \
/etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
/usr/ucb/* ) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
# Don't use installbsd from OSF since it installs stuff as root
# by default.
for ac_prog in ginstall scoinst install; do
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
if test $ac_prog = install &&
grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
elif test $ac_prog = install &&
grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
# program-specific install script used by HP pwplus--don't use.
:
else
rm -rf conftest.one conftest.two conftest.dir
echo one > conftest.one
echo two > conftest.two
mkdir conftest.dir
if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
test -s conftest.one && test -s conftest.two &&
test -s conftest.dir/conftest.one &&
test -s conftest.dir/conftest.two
then
ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
break 3
fi
fi
fi
done
done
;;
esac
done
IFS=$as_save_IFS
rm -rf conftest.one conftest.two conftest.dir
fi
if test "${ac_cv_path_install+set}" = set; then
INSTALL=$ac_cv_path_install
else
# As a last resort, use the slow shell script. Don't cache a
# value for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
# removed, or if the value is a relative name.
INSTALL=$ac_install_sh
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
$as_echo "$INSTALL" >&6; }
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
$as_echo_n "checking whether build environment is sane... " >&6; }
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
'
case `pwd` in
*[\\\"\#\$\&\'\`$am_lf]*)
as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
esac
case $srcdir in
*[\\\"\#\$\&\'\`$am_lf\ \ ]*)
as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
esac
# Do 'set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
am_has_slept=no
for am_try in 1 2; do
echo "timestamp, slept: $am_has_slept" > conftest.file
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
if test "$*" = "X"; then
# -L didn't work.
set X `ls -t "$srcdir/configure" conftest.file`
fi
if test "$*" != "X $srcdir/configure conftest.file" \
&& test "$*" != "X conftest.file $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
alias in your environment" "$LINENO" 5
fi
if test "$2" = conftest.file || test $am_try -eq 2; then
break
fi
# Just in case.
sleep 1
am_has_slept=yes
done
test "$2" = conftest.file
)
then
# Ok.
:
else
as_fn_error $? "newly created file is older than distributed files!
Check your system clock" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
# If we didn't sleep, we still need to ensure time stamps of config.status and
# generated files are strictly newer.
am_sleep_pid=
if grep 'slept: no' conftest.file >/dev/null 2>&1; then
( sleep 1 ) &
am_sleep_pid=$!
fi
rm -f conftest.file
test "$program_prefix" != NONE &&
program_transform_name="s&^&$program_prefix&;$program_transform_name"
# Use a double $ so make ignores it.
test "$program_suffix" != NONE &&
program_transform_name="s&\$&$program_suffix&;$program_transform_name"
# Double any \ or $.
# By default was `s,x,x', remove it if useless.
ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
# Expand $ac_aux_dir to an absolute path.
am_aux_dir=`cd "$ac_aux_dir" && pwd`
if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
*)
MISSING="\${SHELL} $am_aux_dir/missing" ;;
esac
fi
# Use eval to expand $SHELL
if eval "$MISSING --is-lightweight"; then
am_missing_run="$MISSING "
else
am_missing_run=
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
fi
if test x"${install_sh+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
*)
install_sh="\${SHELL} $am_aux_dir/install-sh"
esac
fi
# Installed binaries are usually stripped using 'strip' when the user
# run "make install-strip". However 'strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the 'STRIP' environment variable to overrule this program.
if test "$cross_compiling" != no; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_STRIP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
$as_echo "$STRIP" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test -z "$ac_cv_prog_STRIP"; then
ac_ct_STRIP=$STRIP
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_STRIP"; then
ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_STRIP="strip"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
$as_echo "$ac_ct_STRIP" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "x$ac_ct_STRIP" = x; then
STRIP=":"
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
STRIP=$ac_ct_STRIP
fi
else
STRIP="$ac_cv_prog_STRIP"
fi
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
if test -z "$MKDIR_P"; then
if ${ac_cv_path_mkdir+:} false; then :
$as_echo_n "(cached) " >&6
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_prog in mkdir gmkdir; do
for ac_exec_ext in '' $ac_executable_extensions; do
as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
'mkdir (GNU coreutils) '* | \
'mkdir (coreutils) '* | \
'mkdir (fileutils) '4.1*)
ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
break 3;;
esac
done
done
done
IFS=$as_save_IFS
fi
test -d ./--version && rmdir ./--version
if test "${ac_cv_path_mkdir+set}" = set; then
MKDIR_P="$ac_cv_path_mkdir -p"
else
# As a last resort, use the slow shell script. Don't cache a
# value for MKDIR_P within a source directory, because that will
# break other packages using the cache if that directory is
# removed, or if the value is a relative name.
MKDIR_P="$ac_install_sh -d"
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
$as_echo "$MKDIR_P" >&6; }
for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_AWK+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_AWK="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
AWK=$ac_cv_prog_AWK
if test -n "$AWK"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
$as_echo "$AWK" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$AWK" && break
done
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
set x ${MAKE-make}
ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
$as_echo_n "(cached) " >&6
else
cat >conftest.make <<\_ACEOF
SHELL = /bin/sh
all:
@echo '@@@%%%=$(MAKE)=@@@%%%'
_ACEOF
# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
case `${MAKE-make} -f conftest.make 2>/dev/null` in
*@@@%%%=?*=@@@%%%*)
eval ac_cv_prog_make_${ac_make}_set=yes;;
*)
eval ac_cv_prog_make_${ac_make}_set=no;;
esac
rm -f conftest.make
fi
if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
SET_MAKE=
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
SET_MAKE="MAKE=${MAKE-make}"
fi
rm -rf .tst 2>/dev/null
mkdir .tst 2>/dev/null
if test -d .tst; then
am__leading_dot=.
else
am__leading_dot=_
fi
rmdir .tst 2>/dev/null
# Check whether --enable-silent-rules was given.
if test "${enable_silent_rules+set}" = set; then :
enableval=$enable_silent_rules;
fi
case $enable_silent_rules in # (((
yes) AM_DEFAULT_VERBOSITY=0;;
no) AM_DEFAULT_VERBOSITY=1;;
*) AM_DEFAULT_VERBOSITY=1;;
esac
am_make=${MAKE-make}
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
if ${am_cv_make_support_nested_variables+:} false; then :
$as_echo_n "(cached) " >&6
else
if $as_echo 'TRUE=$(BAR$(V))
BAR0=false
BAR1=true
V=1
am__doit:
@$(TRUE)
.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
am_cv_make_support_nested_variables=yes
else
am_cv_make_support_nested_variables=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
$as_echo "$am_cv_make_support_nested_variables" >&6; }
if test $am_cv_make_support_nested_variables = yes; then
AM_V='$(V)'
AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
else
AM_V=$AM_DEFAULT_VERBOSITY
AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
fi
AM_BACKSLASH='\'
if test "`cd $srcdir && pwd`" != "`pwd`"; then
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
# is not polluted with repeated "-I."
am__isrc=' -I$(srcdir)'
# test to see if srcdir already configured
if test -f $srcdir/config.status; then
as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
fi
fi
# test whether we have cygpath
if test -z "$CYGPATH_W"; then
if (cygpath --version) >/dev/null 2>/dev/null; then
CYGPATH_W='cygpath -w'
else
CYGPATH_W=echo
fi
fi
# Define the identity of the package.
PACKAGE='scalaris'
VERSION='0.9.0+git'
cat >>confdefs.h <<_ACEOF
#define PACKAGE "$PACKAGE"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define VERSION "$VERSION"
_ACEOF
# Some tools Automake needs.
ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
# For better backward compatibility. To be removed once Automake 1.9.x
# dies out for good. For more background, see:
#
#
mkdir_p='$(MKDIR_P)'
# We need awk for the "check" target (and possibly the TAP driver). The
# system "awk" is bad on some platforms.
# Always define AMTAR for backward compatibility. Yes, it's still used
# in the wild :-( We should find a proper way to deprecate it ...
AMTAR='$${TAR-tar}'
# We'll loop over all known methods to create a tar archive until one works.
_am_tools='gnutar pax cpio none'
am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
# POSIX will say in a future version that running "rm -f" with no argument
# is OK; and we want to be able to make that assumption in our Makefile
# recipes. So use an aggressive probe to check that the usage we want is
# actually supported "in the wild" to an acceptable degree.
# See automake bug#10828.
# To make any issue more visible, cause the running configure to be aborted
# by default if the 'rm' program in use doesn't match our expectations; the
# user can still override this though.
if rm -f && rm -fr && rm -rf; then : OK; else
cat >&2 <<'END'
Oops!
Your 'rm' program seems unable to run without file operands specified
on the command line, even when the '-f' option is present. This is contrary
to the behaviour of most rm programs out there, and not conforming with
the upcoming POSIX standard:
Please tell bug-automake@gnu.org about your system, including the value
of your $PATH and any error possibly output before this message. This
can help us improve future automake versions.
END
if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
echo 'Configuration will proceed anyway, since you have set the' >&2
echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
echo >&2
else
cat >&2 <<'END'
Aborting the configuration process, to ensure you take notice of the issue.
You can download and install GNU coreutils to get an 'rm' implementation
that behaves properly: .
If you want to complete the configuration process using your problematic
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
to "yes", and re-run configure.
END
as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
fi
fi
EMAKEFILEDEFINES=
EDOCMACROS=
DIALYZER_FLAGS=
# Extract the first word of "false", so it can be a program name with args.
set dummy false; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_FALSE+:} false; then :
$as_echo_n "(cached) " >&6
else
case $FALSE in
[\\/]* | ?:[\\/]*)
ac_cv_path_FALSE="$FALSE" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_FALSE="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
FALSE=$ac_cv_path_FALSE
if test -n "$FALSE"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $FALSE" >&5
$as_echo "$FALSE" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
# Extract the first word of "true", so it can be a program name with args.
set dummy true; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_TRUE+:} false; then :
$as_echo_n "(cached) " >&6
else
case $TRUE in
[\\/]* | ?:[\\/]*)
ac_cv_path_TRUE="$TRUE" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_TRUE="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
TRUE=$ac_cv_path_TRUE
if test -n "$TRUE"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $TRUE" >&5
$as_echo "$TRUE" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
$as_echo_n "checking for a sed that does not truncate output... " >&6; }
if ${ac_cv_path_SED+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
for ac_i in 1 2 3 4 5 6 7; do
ac_script="$ac_script$as_nl$ac_script"
done
echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
{ ac_script=; unset ac_script;}
if test -z "$SED"; then
ac_path_SED_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_prog in sed gsed; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_SED" || continue
# Check for GNU ac_path_SED and select it if it is found.
# Check for GNU $ac_path_SED
case `"$ac_path_SED" --version 2>&1` in
*GNU*)
ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
*)
ac_count=0
$as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
$as_echo '' >> "conftest.nl"
"$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
if test $ac_count -gt ${ac_path_SED_max-0}; then
# Best one so far, save it but keep looking for a better one
ac_cv_path_SED="$ac_path_SED"
ac_path_SED_max=$ac_count
fi
# 10*(2^10) chars as input seems more than enough
test $ac_count -gt 10 && break
done
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
esac
$ac_path_SED_found && break 3
done
done
done
IFS=$as_save_IFS
if test -z "$ac_cv_path_SED"; then
as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
fi
else
ac_cv_path_SED=$SED
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
$as_echo "$ac_cv_path_SED" >&6; }
SED="$ac_cv_path_SED"
rm -f conftest.sed
# Extract the first word of "doxygen", so it can be a program name with args.
set dummy doxygen; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_DOXYGEN+:} false; then :
$as_echo_n "(cached) " >&6
else
case $DOXYGEN in
[\\/]* | ?:[\\/]*)
ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
DOXYGEN=$ac_cv_path_DOXYGEN
if test -n "$DOXYGEN"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5
$as_echo "$DOXYGEN" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_AR+:} false; then :
$as_echo_n "(cached) " >&6
else
case $AR in
[\\/]* | ?:[\\/]*)
ac_cv_path_AR="$AR" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
AR=$ac_cv_path_AR
if test -n "$AR"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
$as_echo "$AR" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
# Extract the first word of "libtool", so it can be a program name with args.
set dummy libtool; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_LIBTOOL+:} false; then :
$as_echo_n "(cached) " >&6
else
case $LIBTOOL in
[\\/]* | ?:[\\/]*)
ac_cv_path_LIBTOOL="$LIBTOOL" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_LIBTOOL="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
LIBTOOL=$ac_cv_path_LIBTOOL
if test -n "$LIBTOOL"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBTOOL" >&5
$as_echo "$LIBTOOL" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
###########################################################
#
# check for C++ and boost
#
###########################################################
ENABLE_CPP=
# Check whether --enable-cpp was given.
if test "${enable_cpp+set}" = set; then :
enableval=$enable_cpp; ENABLE_CPP=$enableval
else
ENABLE_CPP=$enableval
fi
enabled_cxx=0
if test "x$ENABLE_CPP" != xno ; then
# C++ and boost checks
DEPDIR="${am__leading_dot}deps"
ac_config_commands="$ac_config_commands depfiles"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
cat > confinc.mk << 'END'
am__doit:
@echo this is the am__doit target >confinc.out
.PHONY: am__doit
END
am__include="#"
am__quote=
# BSD make does it like this.
echo '.include "confinc.mk" # ignored' > confmf.BSD
# Other make implementations (GNU, Solaris 10, AIX) do it like this.
echo 'include confinc.mk # ignored' > confmf.GNU
_am_result=no
for s in GNU BSD; do
{ echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
(${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }
case $?:`cat confinc.out 2>/dev/null` in #(
'0:this is the am__doit target') :
case $s in #(
BSD) :
am__include='.include' am__quote='"' ;; #(
*) :
am__include='include' am__quote='' ;;
esac ;; #(
*) :
;;
esac
if test "$am__include" != "#"; then
_am_result="yes ($s style)"
break
fi
done
rm -f confinc.* confmf.*
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
$as_echo "${_am_result}" >&6; }
# Check whether --enable-dependency-tracking was given.
if test "${enable_dependency_tracking+set}" = set; then :
enableval=$enable_dependency_tracking;
fi
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
am__nodep='_no'
fi
if test "x$enable_dependency_tracking" != xno; then
AMDEP_TRUE=
AMDEP_FALSE='#'
else
AMDEP_TRUE='#'
AMDEP_FALSE=
fi
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
if test -z "$CXX"; then
if test -n "$CCC"; then
CXX=$CCC
else
if test -n "$ac_tool_prefix"; then
for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
$as_echo "$CXX" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$CXX" && break
done
fi
if test -z "$CXX"; then
ac_ct_CXX=$CXX
for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_ac_ct_CXX+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CXX"; then
ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CXX="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
if test -n "$ac_ct_CXX"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
$as_echo "$ac_ct_CXX" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$ac_ct_CXX" && break
done
if test "x$ac_ct_CXX" = x; then
CXX="g++"
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CXX=$ac_ct_CXX
fi
fi
fi
fi
# Provide some information about the compiler.
$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
set X $ac_compile
ac_compiler=$2
for ac_option in --version -v -V -qversion; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
sed '10a\
... rest of stderr output deleted ...
10q' conftest.err >conftest.er1
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
$as_echo_n "checking whether the C++ compiler works... " >&6; }
ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
# The possible output files:
ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
ac_rmfiles=
for ac_file in $ac_files
do
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
* ) ac_rmfiles="$ac_rmfiles $ac_file";;
esac
done
rm -f $ac_rmfiles
if { { ac_try="$ac_link_default"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link_default") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then :
# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
# in a Makefile. We should not override ac_cv_exeext if it was cached,
# so that the user can short-circuit this test for compilers unknown to
# Autoconf.
for ac_file in $ac_files ''
do
test -f "$ac_file" || continue
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
;;
[ab].out )
# We found the default executable, but exeext='' is most
# certainly right.
break;;
*.* )
if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
then :; else
ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
fi
# We set ac_cv_exeext here because the later test for it is not
# safe: cross compilers may not add the suffix if given an `-o'
# argument, so we may need to know it at that point already.
# Even if this section looks crufty: it has the advantage of
# actually working.
break;;
* )
break;;
esac
done
test "$ac_cv_exeext" = no && ac_cv_exeext=
else
ac_file=''
fi
if test -z "$ac_file"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "C++ compiler cannot create executables
See \`config.log' for more details" "$LINENO" 5; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
$as_echo_n "checking for C++ compiler default output file name... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
$as_echo "$ac_file" >&6; }
ac_exeext=$ac_cv_exeext
rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
$as_echo_n "checking for suffix of executables... " >&6; }
if { { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then :
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
# `rm'.
for ac_file in conftest.exe conftest conftest.*; do
test -f "$ac_file" || continue
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
break;;
* ) break;;
esac
done
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of executables: cannot compile and link
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest conftest$ac_cv_exeext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
$as_echo "$ac_cv_exeext" >&6; }
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
ac_exeext=$EXEEXT
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
FILE *f = fopen ("conftest.out", "w");
return ferror (f) || fclose (f) != 0;
;
return 0;
}
_ACEOF
ac_clean_files="$ac_clean_files conftest.out"
# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
$as_echo_n "checking whether we are cross compiling... " >&6; }
if test "$cross_compiling" != yes; then
{ { ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
if { ac_try='./conftest$ac_cv_exeext'
{ { case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_try") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run C++ compiled programs.
If you meant to cross compile, use \`--host'.
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
$as_echo "$cross_compiling" >&6; }
rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
ac_clean_files=$ac_clean_files_save
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
$as_echo_n "checking for suffix of object files... " >&6; }
if ${ac_cv_objext+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
rm -f conftest.o conftest.obj
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then :
for ac_file in conftest.o conftest.obj conftest.*; do
test -f "$ac_file" || continue;
case $ac_file in
*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
done
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot compute suffix of object files: cannot compile
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
$as_echo "$ac_cv_objext" >&6; }
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
if ${ac_cv_cxx_compiler_gnu+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
#ifndef __GNUC__
choke me
#endif
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ac_compiler_gnu=yes
else
ac_compiler_gnu=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
if test $ac_compiler_gnu = yes; then
GXX=yes
else
GXX=
fi
ac_test_CXXFLAGS=${CXXFLAGS+set}
ac_save_CXXFLAGS=$CXXFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
$as_echo_n "checking whether $CXX accepts -g... " >&6; }
if ${ac_cv_prog_cxx_g+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_save_cxx_werror_flag=$ac_cxx_werror_flag
ac_cxx_werror_flag=yes
ac_cv_prog_cxx_g=no
CXXFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ac_cv_prog_cxx_g=yes
else
CXXFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
else
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
CXXFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ac_cv_prog_cxx_g=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cxx_werror_flag=$ac_save_cxx_werror_flag
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
$as_echo "$ac_cv_prog_cxx_g" >&6; }
if test "$ac_test_CXXFLAGS" = set; then
CXXFLAGS=$ac_save_CXXFLAGS
elif test $ac_cv_prog_cxx_g = yes; then
if test "$GXX" = yes; then
CXXFLAGS="-g -O2"
else
CXXFLAGS="-g"
fi
else
if test "$GXX" = yes; then
CXXFLAGS="-O2"
else
CXXFLAGS=
fi
fi
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
depcc="$CXX" am_compiler_list=
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
$as_echo_n "checking dependency style of $depcc... " >&6; }
if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named 'D' -- because '-MD' means "put the output
# in D".
rm -rf conftest.dir
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
# We will build objects and dependencies in a subdirectory because
# it helps to detect inapplicable dependency modes. For instance
# both Tru64's cc and ICC support -MD to output dependencies as a
# side effect of compilation, but ICC will put the dependencies in
# the current directory while Tru64 will put them in the object
# directory.
mkdir sub
am_cv_CXX_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
fi
am__universal=false
case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
# we should not choose a depcomp mode which is confused by this.
#
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
# Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
# Solaris 10 /bin/sh.
echo '/* dummy */' > sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
# We check with '-c' and '-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle '-M -o', and we need to detect this. Also, some Intel
# versions had trouble with output in subdirs.
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
gcc)
# This depmode causes a compiler race in universal mode.
test "$am__universal" = false || continue
;;
nosideeffect)
# After this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested.
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
# This compiler won't grok '-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
am__minus_obj=
;;
none) break ;;
esac
if depmode=$depmode \
source=sub/conftest.c object=$am__obj \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
# When given -MP, icc 7.0 and 7.1 complain thusly:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
if (grep 'ignoring option' conftest.err ||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
am_cv_CXX_dependencies_compiler_type=$depmode
break
fi
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_CXX_dependencies_compiler_type=none
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
if
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
am__fastdepCXX_TRUE=
am__fastdepCXX_FALSE='#'
else
am__fastdepCXX_TRUE='#'
am__fastdepCXX_FALSE=
fi
ax_cxx_compile_alternatives="14 1y" ax_cxx_compile_cxx14_required=false
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
ac_success=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features by default" >&5
$as_echo_n "checking whether $CXX supports C++14 features by default... " >&6; }
if ${ax_cv_cxx_compile_cxx14+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
// If the compiler admits that it is not ready for C++11, why torture it?
// Hopefully, this will speed up the test.
#ifndef __cplusplus
#error "This is not a C++ compiler"
#elif __cplusplus < 201103L
#error "This is not a C++11 compiler"
#else
namespace cxx11
{
namespace test_static_assert
{
template
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
}
namespace test_final_override
{
struct Base
{
virtual void f() {}
};
struct Derived : public Base
{
virtual void f() override {}
};
}
namespace test_double_right_angle_brackets
{
template < typename T >
struct check {};
typedef check single_type;
typedef check> double_type;
typedef check>> triple_type;
typedef check>>> quadruple_type;
}
namespace test_decltype
{
int
f()
{
int a = 1;
decltype(a) b = 2;
return a + b;
}
}
namespace test_type_deduction
{
template < typename T1, typename T2 >
struct is_same
{
static const bool value = false;
};
template < typename T >
struct is_same
{
static const bool value = true;
};
template < typename T1, typename T2 >
auto
add(T1 a1, T2 a2) -> decltype(a1 + a2)
{
return a1 + a2;
}
int
test(const int c, volatile int v)
{
static_assert(is_same::value == true, "");
static_assert(is_same::value == false, "");
static_assert(is_same::value == false, "");
auto ac = c;
auto av = v;
auto sumi = ac + av + 'x';
auto sumf = ac + av + 1.0;
static_assert(is_same::value == true, "");
static_assert(is_same::value == true, "");
static_assert(is_same::value == true, "");
static_assert(is_same::value == false, "");
static_assert(is_same::value == true, "");
return (sumf > 0.0) ? sumi : add(c, v);
}
}
namespace test_noexcept
{
int f() { return 0; }
int g() noexcept { return 0; }
static_assert(noexcept(f()) == false, "");
static_assert(noexcept(g()) == true, "");
}
namespace test_constexpr
{
template < typename CharT >
unsigned long constexpr
strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
{
return *s ? strlen_c_r(s + 1, acc + 1) : acc;
}
template < typename CharT >
unsigned long constexpr
strlen_c(const CharT *const s) noexcept
{
return strlen_c_r(s, 0UL);
}
static_assert(strlen_c("") == 0UL, "");
static_assert(strlen_c("1") == 1UL, "");
static_assert(strlen_c("example") == 7UL, "");
static_assert(strlen_c("another\0example") == 7UL, "");
}
namespace test_rvalue_references
{
template < int N >
struct answer
{
static constexpr int value = N;
};
answer<1> f(int&) { return answer<1>(); }
answer<2> f(const int&) { return answer<2>(); }
answer<3> f(int&&) { return answer<3>(); }
void
test()
{
int i = 0;
const int c = 0;
static_assert(decltype(f(i))::value == 1, "");
static_assert(decltype(f(c))::value == 2, "");
static_assert(decltype(f(0))::value == 3, "");
}
}
namespace test_uniform_initialization
{
struct test
{
static const int zero {};
static const int one {1};
};
static_assert(test::zero == 0, "");
static_assert(test::one == 1, "");
}
namespace test_lambdas
{
void
test1()
{
auto lambda1 = [](){};
auto lambda2 = lambda1;
lambda1();
lambda2();
}
int
test2()
{
auto a = [](int i, int j){ return i + j; }(1, 2);
auto b = []() -> int { return '0'; }();
auto c = [=](){ return a + b; }();
auto d = [&](){ return c; }();
auto e = [a, &b](int x) mutable {
const auto identity = [](int y){ return y; };
for (auto i = 0; i < a; ++i)
a += b--;
return x + identity(a + b);
}(0);
return a + b + c + d + e;
}
int
test3()
{
const auto nullary = [](){ return 0; };
const auto unary = [](int x){ return x; };
using nullary_t = decltype(nullary);
using unary_t = decltype(unary);
const auto higher1st = [](nullary_t f){ return f(); };
const auto higher2nd = [unary](nullary_t f1){
return [unary, f1](unary_t f2){ return f2(unary(f1())); };
};
return higher1st(nullary) + higher2nd(nullary)(unary);
}
}
namespace test_variadic_templates
{
template
struct sum;
template
struct sum
{
static constexpr auto value = N0 + sum::value;
};
template <>
struct sum<>
{
static constexpr auto value = 0;
};
static_assert(sum<>::value == 0, "");
static_assert(sum<1>::value == 1, "");
static_assert(sum<23>::value == 23, "");
static_assert(sum<1, 2>::value == 3, "");
static_assert(sum<5, 5, 11>::value == 21, "");
static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
}
// http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
// Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
// because of this.
namespace test_template_alias_sfinae
{
struct foo {};
template
using member = typename T::member_type;
template
void func(...) {}
template
void func(member*) {}
void test();
void test() { func(0); }
}
} // namespace cxx11
#endif // __cplusplus >= 201103L
// If the compiler admits that it is not ready for C++14, why torture it?
// Hopefully, this will speed up the test.
#ifndef __cplusplus
#error "This is not a C++ compiler"
#elif __cplusplus < 201402L
#error "This is not a C++14 compiler"
#else
namespace cxx14
{
namespace test_polymorphic_lambdas
{
int
test()
{
const auto lambda = [](auto&&... args){
const auto istiny = [](auto x){
return (sizeof(x) == 1UL) ? 1 : 0;
};
const int aretiny[] = { istiny(args)... };
return aretiny[0];
};
return lambda(1, 1L, 1.0f, '1');
}
}
namespace test_binary_literals
{
constexpr auto ivii = 0b0000000000101010;
static_assert(ivii == 42, "wrong value");
}
namespace test_generalized_constexpr
{
template < typename CharT >
constexpr unsigned long
strlen_c(const CharT *const s) noexcept
{
auto length = 0UL;
for (auto p = s; *p; ++p)
++length;
return length;
}
static_assert(strlen_c("") == 0UL, "");
static_assert(strlen_c("x") == 1UL, "");
static_assert(strlen_c("test") == 4UL, "");
static_assert(strlen_c("another\0test") == 7UL, "");
}
namespace test_lambda_init_capture
{
int
test()
{
auto x = 0;
const auto lambda1 = [a = x](int b){ return a + b; };
const auto lambda2 = [a = lambda1(x)](){ return a; };
return lambda2();
}
}
namespace test_digit_separators
{
constexpr auto ten_million = 100'000'000;
static_assert(ten_million == 100000000, "");
}
namespace test_return_type_deduction
{
auto f(int& x) { return x; }
decltype(auto) g(int& x) { return x; }
template < typename T1, typename T2 >
struct is_same
{
static constexpr auto value = false;
};
template < typename T >
struct is_same
{
static constexpr auto value = true;
};
int
test()
{
auto x = 0;
static_assert(is_same::value, "");
static_assert(is_same::value, "");
return x;
}
}
} // namespace cxx14
#endif // __cplusplus >= 201402L
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ax_cv_cxx_compile_cxx14=yes
else
ax_cv_cxx_compile_cxx14=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx14" >&5
$as_echo "$ax_cv_cxx_compile_cxx14" >&6; }
if test x$ax_cv_cxx_compile_cxx14 = xyes; then
ac_success=yes
fi
if test x$ac_success = xno; then
for alternative in ${ax_cxx_compile_alternatives}; do
for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
cachevar=`$as_echo "ax_cv_cxx_compile_cxx14_$switch" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++14 features with $switch" >&5
$as_echo_n "checking whether $CXX supports C++14 features with $switch... " >&6; }
if eval \${$cachevar+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_save_CXX="$CXX"
CXX="$CXX $switch"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
// If the compiler admits that it is not ready for C++11, why torture it?
// Hopefully, this will speed up the test.
#ifndef __cplusplus
#error "This is not a C++ compiler"
#elif __cplusplus < 201103L
#error "This is not a C++11 compiler"
#else
namespace cxx11
{
namespace test_static_assert
{
template
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
}
namespace test_final_override
{
struct Base
{
virtual void f() {}
};
struct Derived : public Base
{
virtual void f() override {}
};
}
namespace test_double_right_angle_brackets
{
template < typename T >
struct check {};
typedef check single_type;
typedef check> double_type;
typedef check>> triple_type;
typedef check>>> quadruple_type;
}
namespace test_decltype
{
int
f()
{
int a = 1;
decltype(a) b = 2;
return a + b;
}
}
namespace test_type_deduction
{
template < typename T1, typename T2 >
struct is_same
{
static const bool value = false;
};
template < typename T >
struct is_same
{
static const bool value = true;
};
template < typename T1, typename T2 >
auto
add(T1 a1, T2 a2) -> decltype(a1 + a2)
{
return a1 + a2;
}
int
test(const int c, volatile int v)
{
static_assert(is_same::value == true, "");
static_assert(is_same::value == false, "");
static_assert(is_same::value == false, "");
auto ac = c;
auto av = v;
auto sumi = ac + av + 'x';
auto sumf = ac + av + 1.0;
static_assert(is_same::value == true, "");
static_assert(is_same::value == true, "");
static_assert(is_same::value == true, "");
static_assert(is_same::value == false, "");
static_assert(is_same::value == true, "");
return (sumf > 0.0) ? sumi : add(c, v);
}
}
namespace test_noexcept
{
int f() { return 0; }
int g() noexcept { return 0; }
static_assert(noexcept(f()) == false, "");
static_assert(noexcept(g()) == true, "");
}
namespace test_constexpr
{
template < typename CharT >
unsigned long constexpr
strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
{
return *s ? strlen_c_r(s + 1, acc + 1) : acc;
}
template < typename CharT >
unsigned long constexpr
strlen_c(const CharT *const s) noexcept
{
return strlen_c_r(s, 0UL);
}
static_assert(strlen_c("") == 0UL, "");
static_assert(strlen_c("1") == 1UL, "");
static_assert(strlen_c("example") == 7UL, "");
static_assert(strlen_c("another\0example") == 7UL, "");
}
namespace test_rvalue_references
{
template < int N >
struct answer
{
static constexpr int value = N;
};
answer<1> f(int&) { return answer<1>(); }
answer<2> f(const int&) { return answer<2>(); }
answer<3> f(int&&) { return answer<3>(); }
void
test()
{
int i = 0;
const int c = 0;
static_assert(decltype(f(i))::value == 1, "");
static_assert(decltype(f(c))::value == 2, "");
static_assert(decltype(f(0))::value == 3, "");
}
}
namespace test_uniform_initialization
{
struct test
{
static const int zero {};
static const int one {1};
};
static_assert(test::zero == 0, "");
static_assert(test::one == 1, "");
}
namespace test_lambdas
{
void
test1()
{
auto lambda1 = [](){};
auto lambda2 = lambda1;
lambda1();
lambda2();
}
int
test2()
{
auto a = [](int i, int j){ return i + j; }(1, 2);
auto b = []() -> int { return '0'; }();
auto c = [=](){ return a + b; }();
auto d = [&](){ return c; }();
auto e = [a, &b](int x) mutable {
const auto identity = [](int y){ return y; };
for (auto i = 0; i < a; ++i)
a += b--;
return x + identity(a + b);
}(0);
return a + b + c + d + e;
}
int
test3()
{
const auto nullary = [](){ return 0; };
const auto unary = [](int x){ return x; };
using nullary_t = decltype(nullary);
using unary_t = decltype(unary);
const auto higher1st = [](nullary_t f){ return f(); };
const auto higher2nd = [unary](nullary_t f1){
return [unary, f1](unary_t f2){ return f2(unary(f1())); };
};
return higher1st(nullary) + higher2nd(nullary)(unary);
}
}
namespace test_variadic_templates
{
template
struct sum;
template
struct sum
{
static constexpr auto value = N0 + sum::value;
};
template <>
struct sum<>
{
static constexpr auto value = 0;
};
static_assert(sum<>::value == 0, "");
static_assert(sum<1>::value == 1, "");
static_assert(sum<23>::value == 23, "");
static_assert(sum<1, 2>::value == 3, "");
static_assert(sum<5, 5, 11>::value == 21, "");
static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
}
// http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
// Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
// because of this.
namespace test_template_alias_sfinae
{
struct foo {};
template
using member = typename T::member_type;
template
void func(...) {}
template
void func(member*) {}
void test();
void test() { func(0); }
}
} // namespace cxx11
#endif // __cplusplus >= 201103L
// If the compiler admits that it is not ready for C++14, why torture it?
// Hopefully, this will speed up the test.
#ifndef __cplusplus
#error "This is not a C++ compiler"
#elif __cplusplus < 201402L
#error "This is not a C++14 compiler"
#else
namespace cxx14
{
namespace test_polymorphic_lambdas
{
int
test()
{
const auto lambda = [](auto&&... args){
const auto istiny = [](auto x){
return (sizeof(x) == 1UL) ? 1 : 0;
};
const int aretiny[] = { istiny(args)... };
return aretiny[0];
};
return lambda(1, 1L, 1.0f, '1');
}
}
namespace test_binary_literals
{
constexpr auto ivii = 0b0000000000101010;
static_assert(ivii == 42, "wrong value");
}
namespace test_generalized_constexpr
{
template < typename CharT >
constexpr unsigned long
strlen_c(const CharT *const s) noexcept
{
auto length = 0UL;
for (auto p = s; *p; ++p)
++length;
return length;
}
static_assert(strlen_c("") == 0UL, "");
static_assert(strlen_c("x") == 1UL, "");
static_assert(strlen_c("test") == 4UL, "");
static_assert(strlen_c("another\0test") == 7UL, "");
}
namespace test_lambda_init_capture
{
int
test()
{
auto x = 0;
const auto lambda1 = [a = x](int b){ return a + b; };
const auto lambda2 = [a = lambda1(x)](){ return a; };
return lambda2();
}
}
namespace test_digit_separators
{
constexpr auto ten_million = 100'000'000;
static_assert(ten_million == 100000000, "");
}
namespace test_return_type_deduction
{
auto f(int& x) { return x; }
decltype(auto) g(int& x) { return x; }
template < typename T1, typename T2 >
struct is_same
{
static constexpr auto value = false;
};
template < typename T >
struct is_same
{
static constexpr auto value = true;
};
int
test()
{
auto x = 0;
static_assert(is_same::value, "");
static_assert(is_same::value, "");
return x;
}
}
} // namespace cxx14
#endif // __cplusplus >= 201402L
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
eval $cachevar=yes
else
eval $cachevar=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CXX="$ac_save_CXX"
fi
eval ac_res=\$$cachevar
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test x\$$cachevar = xyes; then
CXX="$CXX $switch"
if test -n "$CXXCPP" ; then
CXXCPP="$CXXCPP $switch"
fi
ac_success=yes
break
fi
done
if test x$ac_success = xyes; then
break
fi
done
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test x$ax_cxx_compile_cxx14_required = xtrue; then
if test x$ac_success = xno; then
as_fn_error $? "*** A compiler with support for C++14 language features is required." "$LINENO" 5
fi
fi
if test x$ac_success = xno; then
HAVE_CXX14=0
{ $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++14 support was found" >&5
$as_echo "$as_me: No compiler with C++14 support was found" >&6;}
else
HAVE_CXX14=1
$as_echo "#define HAVE_CXX14 1" >>confdefs.h
fi
if test "x$HAVE_CXX14" = "x1" ; then
have_boost_147=
# Make sure we can run config.sub.
$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
$as_echo_n "checking build system type... " >&6; }
if ${ac_cv_build+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_build_alias=$build_alias
test "x$ac_build_alias" = x &&
ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
test "x$ac_build_alias" = x &&
as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
$as_echo "$ac_cv_build" >&6; }
case $ac_cv_build in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
esac
build=$ac_cv_build
ac_save_IFS=$IFS; IFS='-'
set x $ac_cv_build
shift
build_cpu=$1
build_vendor=$2
shift; shift
# Remember, the first character of IFS is used to create $*,
# except with old shells:
build_os=$*
IFS=$ac_save_IFS
case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
$as_echo_n "checking host system type... " >&6; }
if ${ac_cv_host+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "x$host_alias" = x; then
ac_cv_host=$ac_cv_build
else
ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
$as_echo "$ac_cv_host" >&6; }
case $ac_cv_host in
*-*-*) ;;
*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
esac
host=$ac_cv_host
ac_save_IFS=$IFS; IFS='-'
set x $ac_cv_host
shift
host_cpu=$1
host_vendor=$2
shift; shift
# Remember, the first character of IFS is used to create $*,
# except with old shells:
host_os=$*
IFS=$ac_save_IFS
case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
# Check whether --with-boost was given.
if test "${with_boost+set}" = set; then :
withval=$with_boost;
if test "$withval" = "no"; then
want_boost="no"
elif test "$withval" = "yes"; then
want_boost="yes"
ac_boost_path=""
else
want_boost="yes"
ac_boost_path="$withval"
fi
else
want_boost="yes"
fi
# Check whether --with-boost-libdir was given.
if test "${with_boost_libdir+set}" = set; then :
withval=$with_boost_libdir;
if test -d "$withval"
then
ac_boost_lib_path="$withval"
else
as_fn_error $? "--with-boost-libdir expected directory name" "$LINENO" 5
fi
else
ac_boost_lib_path=""
fi
if test "x$want_boost" = "xyes"; then
boost_lib_version_req=1.47
boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'`
boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'`
boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'`
boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
if test "x$boost_lib_version_req_sub_minor" = "x" ; then
boost_lib_version_req_sub_minor="0"
fi
WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for boostlib >= $boost_lib_version_req" >&5
$as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; }
succeeded=no
libsubdirs="lib"
ax_arch=`uname -m`
case $ax_arch in
x86_64)
libsubdirs="lib64 libx32 lib lib64"
;;
ppc64|s390x|sparc64|aarch64|ppc64le)
libsubdirs="lib64 lib lib64 ppc64le"
;;
esac
libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs"
case ${host_cpu} in
i?86)
libsubdirs="lib/i386-${host_os} $libsubdirs"
;;
esac
if test "$ac_boost_path" != ""; then
BOOST_CPPFLAGS="-I$ac_boost_path/include"
for ac_boost_path_tmp in $libsubdirs; do
if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then
BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp"
break
fi
done
elif test "$cross_compiling" != yes; then
for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
for libsubdir in $libsubdirs ; do
if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
break;
fi
done
fi
if test "$ac_boost_lib_path" != ""; then
BOOST_LDFLAGS="-L$ac_boost_lib_path"
fi
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
#if BOOST_VERSION >= $WANT_BOOST_VERSION
// Everything is okay
#else
# error Boost version is too old
#endif
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
succeeded=yes
found_system=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test "x$succeeded" != "xyes"; then
_version=0
if test "$ac_boost_path" != ""; then
if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
_version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
V_CHECK=`expr $_version_tmp \> $_version`
if test "$V_CHECK" = "1" ; then
_version=$_version_tmp
fi
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
done
fi
else
if test "$cross_compiling" != yes; then
for ac_boost_path in /usr /usr/local /opt /opt/local ; do
if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
_version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
V_CHECK=`expr $_version_tmp \> $_version`
if test "$V_CHECK" = "1" ; then
_version=$_version_tmp
best_path=$ac_boost_path
fi
done
fi
done
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
if test "$ac_boost_lib_path" = ""; then
for libsubdir in $libsubdirs ; do
if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
BOOST_LDFLAGS="-L$best_path/$libsubdir"
fi
fi
if test "x$BOOST_ROOT" != "x"; then
for libsubdir in $libsubdirs ; do
if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'`
V_CHECK=`expr $stage_version_shorten \>\= $_version`
if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: We will use a staged boost library from $BOOST_ROOT" >&5
$as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;}
BOOST_CPPFLAGS="-I$BOOST_ROOT"
BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
fi
fi
fi
fi
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
#if BOOST_VERSION >= $WANT_BOOST_VERSION
// Everything is okay
#else
# error Boost version is too old
#endif
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
succeeded=yes
found_system=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
if test "$succeeded" != "yes" ; then
if test "$_version" = "0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&5
$as_echo "$as_me: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5
$as_echo "$as_me: Your boost libraries seems to old (version $_version)." >&6;}
fi
# execute ACTION-IF-NOT-FOUND (if present):
have_boost_147=no
else
$as_echo "#define HAVE_BOOST /**/" >>confdefs.h
# execute ACTION-IF-FOUND (if present):
have_boost_147=yes
fi
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}gcc"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
$as_echo "$CC" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_ac_ct_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="gcc"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
$as_echo "$ac_ct_CC" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "x$ac_ct_CC" = x; then
CC=""
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
fi
else
CC="$ac_cv_prog_CC"
fi
if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="${ac_tool_prefix}cc"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
$as_echo "$CC" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
ac_prog_rejected=no
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
set dummy $ac_cv_prog_CC
shift
if test $# != 0; then
# We chose a different compiler from the bogus one.
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
$as_echo "$CC" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
for ac_prog in cl.exe
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
$as_echo "$CC" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$CC" && break
done
fi
if test -z "$CC"; then
ac_ct_CC=$CC
for ac_prog in cl.exe
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_ac_ct_CC+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_ac_ct_CC="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
$as_echo "$ac_ct_CC" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -n "$ac_ct_CC" && break
done
if test "x$ac_ct_CC" = x; then
CC=""
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
CC=$ac_ct_CC
fi
fi
fi
test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "no acceptable C compiler found in \$PATH
See \`config.log' for more details" "$LINENO" 5; }
# Provide some information about the compiler.
$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
set X $ac_compile
ac_compiler=$2
for ac_option in --version -v -V -qversion; do
{ { ac_try="$ac_compiler $ac_option >&5"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
$as_echo "$ac_try_echo"; } >&5
(eval "$ac_compiler $ac_option >&5") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
sed '10a\
... rest of stderr output deleted ...
10q' conftest.err >conftest.er1
cat conftest.er1 >&5
fi
rm -f conftest.er1 conftest.err
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }
done
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
if ${ac_cv_c_compiler_gnu+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
#ifndef __GNUC__
choke me
#endif
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
ac_compiler_gnu=yes
else
ac_compiler_gnu=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
$as_echo "$ac_cv_c_compiler_gnu" >&6; }
if test $ac_compiler_gnu = yes; then
GCC=yes
else
GCC=
fi
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
$as_echo_n "checking whether $CC accepts -g... " >&6; }
if ${ac_cv_prog_cc_g+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_save_c_werror_flag=$ac_c_werror_flag
ac_c_werror_flag=yes
ac_cv_prog_cc_g=no
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_g=yes
else
CFLAGS=""
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
else
ac_c_werror_flag=$ac_save_c_werror_flag
CFLAGS="-g"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_g=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_c_werror_flag=$ac_save_c_werror_flag
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
$as_echo "$ac_cv_prog_cc_g" >&6; }
if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-g"
fi
else
if test "$GCC" = yes; then
CFLAGS="-O2"
else
CFLAGS=
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
if ${ac_cv_prog_cc_c89+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
#include
struct stat;
/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
struct buf { int x; };
FILE * (*rcsopen) (struct buf *, struct stat *, int);
static char *e (p, i)
char **p;
int i;
{
return p[i];
}
static char *f (char * (*g) (char **, int), char **p, ...)
{
char *s;
va_list v;
va_start (v,p);
s = g (p, va_arg (v,int));
va_end (v);
return s;
}
/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
function prototypes and stuff, but not '\xHH' hex character constants.
These don't provoke an error unfortunately, instead are silently treated
as 'x'. The following induces an error, until -std is added to get
proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
array size at least. It's necessary to write '\x00'==0 to get something
that's true only with -std. */
int osf4_cc_array ['\x00' == 0 ? 1 : -1];
/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
inside strings and character constants. */
#define FOO(x) 'x'
int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
int test (int i, double x);
struct s1 {int (*f) (int a);};
struct s2 {int (*f) (double a);};
int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
int argc;
char **argv;
int
main ()
{
return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
;
return 0;
}
_ACEOF
for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_c89=$ac_arg
fi
rm -f core conftest.err conftest.$ac_objext
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC
fi
# AC_CACHE_VAL
case "x$ac_cv_prog_cc_c89" in
x)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
$as_echo "none needed" >&6; } ;;
xno)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
$as_echo "unsupported" >&6; } ;;
*)
CC="$CC $ac_cv_prog_cc_c89"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
esac
if test "x$ac_cv_prog_cc_c89" != xno; then :
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
if ${am_cv_prog_cc_c_o+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
# Make sure it works both with $CC and with simple cc.
# Following AC_PROG_CC_C_O, we do the test twice because some
# compilers refuse to overwrite an existing .o file with -o,
# though they will create one.
am_cv_prog_cc_c_o=yes
for am_i in 1 2; do
if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } \
&& test -f conftest2.$ac_objext; then
: OK
else
am_cv_prog_cc_c_o=no
break
fi
done
rm -f core conftest*
unset am_i
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
$as_echo "$am_cv_prog_cc_c_o" >&6; }
if test "$am_cv_prog_cc_c_o" != yes; then
# Losing compiler, so override with the script.
# FIXME: It is wrong to rewrite CC.
# But if we don't then we get into trouble of one sort or another.
# A longer-term fix would be to have automake use am__CC in this case,
# and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
CC="$am_aux_dir/compile $CC"
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
depcc="$CC" am_compiler_list=
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
$as_echo_n "checking dependency style of $depcc... " >&6; }
if ${am_cv_CC_dependencies_compiler_type+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named 'D' -- because '-MD' means "put the output
# in D".
rm -rf conftest.dir
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
# We will build objects and dependencies in a subdirectory because
# it helps to detect inapplicable dependency modes. For instance
# both Tru64's cc and ICC support -MD to output dependencies as a
# side effect of compilation, but ICC will put the dependencies in
# the current directory while Tru64 will put them in the object
# directory.
mkdir sub
am_cv_CC_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
fi
am__universal=false
case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
# we should not choose a depcomp mode which is confused by this.
#
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
# Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
# Solaris 10 /bin/sh.
echo '/* dummy */' > sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
# We check with '-c' and '-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle '-M -o', and we need to detect this. Also, some Intel
# versions had trouble with output in subdirs.
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
gcc)
# This depmode causes a compiler race in universal mode.
test "$am__universal" = false || continue
;;
nosideeffect)
# After this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested.
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
# This compiler won't grok '-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
am__minus_obj=
;;
none) break ;;
esac
if depmode=$depmode \
source=sub/conftest.c object=$am__obj \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
# When given -MP, icc 7.0 and 7.1 complain thusly:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
if (grep 'ignoring option' conftest.err ||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
am_cv_CC_dependencies_compiler_type=$depmode
break
fi
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_CC_dependencies_compiler_type=none
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
if
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
am__fastdepCC_TRUE=
am__fastdepCC_FALSE='#'
else
am__fastdepCC_TRUE='#'
am__fastdepCC_FALSE=
fi
# Check whether --with-boost-system was given.
if test "${with_boost_system+set}" = set; then :
withval=$with_boost_system;
if test "$withval" = "no"; then
want_boost="no"
elif test "$withval" = "yes"; then
want_boost="yes"
ax_boost_user_system_lib=""
else
want_boost="yes"
ax_boost_user_system_lib="$withval"
fi
else
want_boost="yes"
fi
if test "x$want_boost" = "xyes"; then
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::System library is available" >&5
$as_echo_n "checking whether the Boost::System library is available... " >&6; }
if ${ax_cv_boost_system+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
CXXFLAGS_SAVE=$CXXFLAGS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
boost::system::system_category
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ax_cv_boost_system=yes
else
ax_cv_boost_system=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CXXFLAGS=$CXXFLAGS_SAVE
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_system" >&5
$as_echo "$ax_cv_boost_system" >&6; }
if test "x$ax_cv_boost_system" = "xyes"; then
$as_echo "#define HAVE_BOOST_SYSTEM /**/" >>confdefs.h
BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'`
LDFLAGS_SAVE=$LDFLAGS
if test "x$ax_boost_user_system_lib" = "x"; then
for libextension in `ls -r $BOOSTLIBDIR/libboost_system* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do
ax_lib=${libextension}
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5
$as_echo_n "checking for exit in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char exit ();
int
main ()
{
return exit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break
else
link_system="no"
fi
done
if test "x$link_system" != "xyes"; then
for libextension in `ls -r $BOOSTLIBDIR/boost_system* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do
ax_lib=${libextension}
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5
$as_echo_n "checking for exit in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char exit ();
int
main ()
{
return exit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break
else
link_system="no"
fi
done
fi
else
for ax_lib in $ax_boost_user_system_lib boost_system-$ax_boost_user_system_lib; do
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5
$as_echo_n "checking for exit in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char exit ();
int
main ()
{
return exit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break
else
link_system="no"
fi
done
fi
if test "x$ax_lib" = "x"; then
as_fn_error $? "Could not find a version of the library!" "$LINENO" 5
fi
if test "x$link_system" = "xno"; then
as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5
fi
fi
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
fi
# Check whether --with-boost-regex was given.
if test "${with_boost_regex+set}" = set; then :
withval=$with_boost_regex;
if test "$withval" = "no"; then
want_boost="no"
elif test "$withval" = "yes"; then
want_boost="yes"
ax_boost_user_regex_lib=""
else
want_boost="yes"
ax_boost_user_regex_lib="$withval"
fi
else
want_boost="yes"
fi
if test "x$want_boost" = "xyes"; then
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::Regex library is available" >&5
$as_echo_n "checking whether the Boost::Regex library is available... " >&6; }
if ${ax_cv_boost_regex+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
boost::regex r(); return 0;
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ax_cv_boost_regex=yes
else
ax_cv_boost_regex=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_regex" >&5
$as_echo "$ax_cv_boost_regex" >&6; }
if test "x$ax_cv_boost_regex" = "xyes"; then
$as_echo "#define HAVE_BOOST_REGEX /**/" >>confdefs.h
BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'`
if test "x$ax_boost_user_regex_lib" = "x"; then
for libextension in `ls $BOOSTLIBDIR/libboost_regex*.so* $BOOSTLIBDIR/libboost_regex*.dylib* $BOOSTLIBDIR/libboost_regex*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_regex.*\)\.so.*$;\1;' -e 's;^lib\(boost_regex.*\)\.dylib.*;\1;' -e 's;^lib\(boost_regex.*\)\.a.*$;\1;'` ; do
ax_lib=${libextension}
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5
$as_echo_n "checking for exit in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char exit ();
int
main ()
{
return exit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break
else
link_regex="no"
fi
done
if test "x$link_regex" != "xyes"; then
for libextension in `ls $BOOSTLIBDIR/boost_regex*.dll* $BOOSTLIBDIR/boost_regex*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_regex.*\)\.dll.*$;\1;' -e 's;^\(boost_regex.*\)\.a.*$;\1;'` ; do
ax_lib=${libextension}
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5
$as_echo_n "checking for exit in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char exit ();
int
main ()
{
return exit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break
else
link_regex="no"
fi
done
fi
else
for ax_lib in $ax_boost_user_regex_lib boost_regex-$ax_boost_user_regex_lib; do
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_main" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_lib" >&5
$as_echo_n "checking for main in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
return main ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break
else
link_regex="no"
fi
done
fi
if test "x$ax_lib" = "x"; then
as_fn_error $? "Could not find a version of the Boost::Regex library!" "$LINENO" 5
fi
if test "x$link_regex" != "xyes"; then
as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5
fi
fi
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
fi
# Check whether --with-boost-asio was given.
if test "${with_boost_asio+set}" = set; then :
withval=$with_boost_asio;
if test "$withval" = "no"; then
want_boost="no"
elif test "$withval" = "yes"; then
want_boost="yes"
ax_boost_user_asio_lib=""
else
want_boost="yes"
ax_boost_user_asio_lib="$withval"
fi
else
want_boost="yes"
fi
if test "x$want_boost" = "xyes"; then
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::ASIO library is available" >&5
$as_echo_n "checking whether the Boost::ASIO library is available... " >&6; }
if ${ax_cv_boost_asio+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
boost::asio::io_service io;
boost::system::error_code timer_result;
boost::asio::deadline_timer t(io);
t.cancel();
io.run_one();
return 0;
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ax_cv_boost_asio=yes
else
ax_cv_boost_asio=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_asio" >&5
$as_echo "$ax_cv_boost_asio" >&6; }
if test "x$ax_cv_boost_asio" = "xyes"; then
$as_echo "#define HAVE_BOOST_ASIO /**/" >>confdefs.h
BN=boost_system
BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'`
if test "x$ax_boost_user_asio_lib" = "x"; then
for ax_lib in `ls $BOOSTLIBDIR/libboost_system*.so* $BOOSTLIBDIR/libboost_system*.dylib* $BOOSTLIBDIR/libboost_system*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_system.*\)\.so.*$;\1;' -e 's;^lib\(boost_system.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_system.*\)\.a.*$;\1;' ` ; do
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_main" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_lib" >&5
$as_echo_n "checking for main in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
return main ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_ASIO_LIB="-l$ax_lib" link_thread="yes" break
else
link_thread="no"
fi
done
else
for ax_lib in $ax_boost_user_asio_lib $BN-$ax_boost_user_asio_lib; do
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_main" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_lib" >&5
$as_echo_n "checking for main in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
return main ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_ASIO_LIB="-l$ax_lib" link_asio="yes" break
else
link_asio="no"
fi
done
fi
if test "x$ax_lib" = "x"; then
as_fn_error $? "Could not find a version of the library!" "$LINENO" 5
fi
if test "x$link_asio" = "xno"; then
as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5
fi
fi
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
fi
# Check whether --with-boost-program-options was given.
if test "${with_boost_program_options+set}" = set; then :
withval=$with_boost_program_options;
if test "$withval" = "no"; then
want_boost="no"
elif test "$withval" = "yes"; then
want_boost="yes"
ax_boost_user_program_options_lib=""
else
want_boost="yes"
ax_boost_user_program_options_lib="$withval"
fi
else
want_boost="yes"
fi
if test "x$want_boost" = "xyes"; then
export want_boost
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::Program_Options library is available" >&5
$as_echo_n "checking whether the Boost::Program_Options library is available... " >&6; }
if ${ax_cv_boost_program_options+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
boost::program_options::options_description generic("Generic options");
return 0;
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ax_cv_boost_program_options=yes
else
ax_cv_boost_program_options=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_program_options" >&5
$as_echo "$ax_cv_boost_program_options" >&6; }
if test "$ax_cv_boost_program_options" = yes; then
$as_echo "#define HAVE_BOOST_PROGRAM_OPTIONS /**/" >>confdefs.h
BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'`
if test "x$ax_boost_user_program_options_lib" = "x"; then
for libextension in `ls $BOOSTLIBDIR/libboost_program_options*.so* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_program_options.*\)\.so.*$;\1;'` `ls $BOOSTLIBDIR/libboost_program_options*.dylib* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_program_options.*\)\.dylib.*$;\1;'` `ls $BOOSTLIBDIR/libboost_program_options*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_program_options.*\)\.a.*$;\1;'` ; do
ax_lib=${libextension}
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5
$as_echo_n "checking for exit in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char exit ();
int
main ()
{
return exit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib"; link_program_options="yes"; break
else
link_program_options="no"
fi
done
if test "x$link_program_options" != "xyes"; then
for libextension in `ls $BOOSTLIBDIR/boost_program_options*.dll* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_program_options.*\)\.dll.*$;\1;'` `ls $BOOSTLIBDIR/boost_program_options*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_program_options.*\)\.a.*$;\1;'` ; do
ax_lib=${libextension}
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5
$as_echo_n "checking for exit in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char exit ();
int
main ()
{
return exit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib"; link_program_options="yes"; break
else
link_program_options="no"
fi
done
fi
else
for ax_lib in $ax_boost_user_program_options_lib boost_program_options-$ax_boost_user_program_options_lib; do
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_main" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_lib" >&5
$as_echo_n "checking for main in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
return main ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_PROGRAM_OPTIONS_LIB="-l$ax_lib"; link_program_options="yes"; break
else
link_program_options="no"
fi
done
fi
if test "x$ax_lib" = "x"; then
as_fn_error $? "Could not find a version of the library!" "$LINENO" 5
fi
if test "x$link_program_options" != "xyes"; then
as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5
fi
fi
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
fi
# Check whether --with-boost-unit-test-framework was given.
if test "${with_boost_unit_test_framework+set}" = set; then :
withval=$with_boost_unit_test_framework;
if test "$withval" = "no"; then
want_boost="no"
elif test "$withval" = "yes"; then
want_boost="yes"
ax_boost_user_unit_test_framework_lib=""
else
want_boost="yes"
ax_boost_user_unit_test_framework_lib="$withval"
fi
else
want_boost="yes"
fi
if test "x$want_boost" = "xyes"; then
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::Unit_Test_Framework library is available" >&5
$as_echo_n "checking whether the Boost::Unit_Test_Framework library is available... " >&6; }
if ${ax_cv_boost_unit_test_framework+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
using boost::unit_test::test_suite;
test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); return 0;
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ax_cv_boost_unit_test_framework=yes
else
ax_cv_boost_unit_test_framework=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_unit_test_framework" >&5
$as_echo "$ax_cv_boost_unit_test_framework" >&6; }
if test "x$ax_cv_boost_unit_test_framework" = "xyes"; then
$as_echo "#define HAVE_BOOST_UNIT_TEST_FRAMEWORK /**/" >>confdefs.h
BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'`
if test "x$ax_boost_user_unit_test_framework_lib" = "x"; then
saved_ldflags="${LDFLAGS}"
for monitor_library in `ls $BOOSTLIBDIR/libboost_unit_test_framework*.so* $BOOSTLIBDIR/libboost_unit_test_framework*.dylib* $BOOSTLIBDIR/libboost_unit_test_framework*.a* 2>/dev/null` ; do
if test -r $monitor_library ; then
libextension=`echo $monitor_library | sed 's,.*/,,' | sed -e 's;^lib\(boost_unit_test_framework.*\)\.so.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.a.*$;\1;'`
ax_lib=${libextension}
link_unit_test_framework="yes"
else
link_unit_test_framework="no"
fi
if test "x$link_unit_test_framework" = "xyes"; then
BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"
break
fi
done
if test "x$link_unit_test_framework" != "xyes"; then
for libextension in `ls $BOOSTLIBDIR/boost_unit_test_framework*.dll* $BOOSTLIBDIR/boost_unit_test_framework*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_unit_test_framework.*\)\.dll.*$;\1;' -e 's;^\(boost_unit_test_framework.*\)\.a.*$;\1;'` ; do
ax_lib=${libextension}
as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5
$as_echo_n "checking for exit in -l$ax_lib... " >&6; }
if eval \${$as_ac_Lib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-l$ax_lib $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char exit ();
int
main ()
{
return exit ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
eval "$as_ac_Lib=yes"
else
eval "$as_ac_Lib=no"
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
eval ac_res=\$$as_ac_Lib
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"; link_unit_test_framework="yes"; break
else
link_unit_test_framework="no"
fi
done
fi
else
link_unit_test_framework="no"
saved_ldflags="${LDFLAGS}"
for ax_lib in boost_unit_test_framework-$ax_boost_user_unit_test_framework_lib $ax_boost_user_unit_test_framework_lib ; do
if test "x$link_unit_test_framework" = "xyes"; then
break;
fi
for unittest_library in `ls $BOOSTLIBDIR/lib${ax_lib}.so* $BOOSTLIBDIR/lib${ax_lib}.a* 2>/dev/null` ; do
if test -r $unittest_library ; then
libextension=`echo $unittest_library | sed 's,.*/,,' | sed -e 's;^lib\(boost_unit_test_framework.*\)\.so.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.a*$;\1;'`
ax_lib=${libextension}
link_unit_test_framework="yes"
else
link_unit_test_framework="no"
fi
if test "x$link_unit_test_framework" = "xyes"; then
BOOST_UNIT_TEST_FRAMEWORK_LIB="-l$ax_lib"
break
fi
done
done
fi
if test "x$ax_lib" = "x"; then
as_fn_error $? "Could not find a version of the library!" "$LINENO" 5
fi
if test "x$link_unit_test_framework" != "xyes"; then
as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5
fi
fi
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
fi
found=false
# Check whether --with-openssl was given.
if test "${with_openssl+set}" = set; then :
withval=$with_openssl;
case "$withval" in
"" | y | ye | yes | n | no)
as_fn_error $? "Invalid --with-openssl value" "$LINENO" 5
;;
*) ssldirs="$withval"
;;
esac
else
## # if pkg-config is installed and openssl has installed a .pc file,
## # then use that information and don't search ssldirs
## AC_CHECK_TOOL([PKG_CONFIG], [pkg-config])
## if test x"$PKG_CONFIG" != x""; then
## OPENSSL_LDFLAGS=`$PKG_CONFIG openssl --libs-only-L 2>/dev/null`
## if test $? = 0; then
## OPENSSL_LIBS=`$PKG_CONFIG openssl --libs-only-l 2>/dev/null`
## OPENSSL_INCLUDES=`$PKG_CONFIG openssl --cflags-only-I 2>/dev/null`
## found=true
## fi
## fi
# no such luck; use some default ssldirs
if ! $found; then
ssldirs="/usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/local/Cellar/openssl/*"
fi
fi
# note that we #include , so the OpenSSL headers have to be in
# an 'openssl' subdirectory
if ! $found; then
OPENSSL_INCLUDES=
for ssldir in $ssldirs; do
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl/ssl.h in $ssldir" >&5
$as_echo_n "checking for openssl/ssl.h in $ssldir... " >&6; }
if test -f "$ssldir/include/openssl/ssl.h"; then
OPENSSL_INCLUDES="-I$ssldir/include"
OPENSSL_LDFLAGS="-L$ssldir/lib"
OPENSSL_LIBS="-lssl -lcrypto"
found=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
break
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
done
# if the file wasn't found, well, go ahead and try the link anyway -- maybe
# it will just work!
fi
# try the preprocessor and linker with our new flags,
# being careful not to pollute the global LIBS, LDFLAGS, and CPPFLAGS
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiling and linking against OpenSSL works" >&5
$as_echo_n "checking whether compiling and linking against OpenSSL works... " >&6; }
echo "Trying link with OPENSSL_LDFLAGS=$OPENSSL_LDFLAGS;" \
"OPENSSL_LIBS=$OPENSSL_LIBS; OPENSSL_INCLUDES=$OPENSSL_INCLUDES" >&5
save_LIBS="$LIBS"
save_LDFLAGS="$LDFLAGS"
save_CPPFLAGS="$CPPFLAGS"
LDFLAGS="$LDFLAGS $OPENSSL_LDFLAGS"
LIBS="$OPENSSL_LIBS $LIBS"
CPPFLAGS="$OPENSSL_INCLUDES $CPPFLAGS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
int
main ()
{
SSL_new(NULL)
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
ENABLE_SSL=yes
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
CPPFLAGS="$save_CPPFLAGS"
LDFLAGS="$save_LDFLAGS"
LIBS="$save_LIBS"
if test "x$have_boost_147" = "xyes" -a "x$ax_cv_boost_system" = "xyes" -a "x$ax_cv_boost_regex" = "xyes" -a "x$ax_cv_boost_program_options" = "xyes" -a "x$ax_cv_boost_unit_test_framework" = "xyes" -a "x$ENABLE_SSL" = "xyes" ; then
enabled_cxx=1
fi
fi
fi
if test "x$enabled_cxx" = "x0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: c++ bindings disabled ('make cpp' will fail)" >&5
$as_echo "$as_me: c++ bindings disabled ('make cpp' will fail)" >&6;}
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -MJ foo" >&5
$as_echo_n "checking whether C compiler accepts -MJ foo... " >&6; }
if ${ax_cv_check_cflags___MJ_foo+:} false; then :
$as_echo_n "(cached) " >&6
else
ax_check_save_flags=$CFLAGS
CFLAGS="$CFLAGS -MJ foo"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
ax_cv_check_cflags___MJ_foo=yes
else
ax_cv_check_cflags___MJ_foo=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CFLAGS=$ax_check_save_flags
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___MJ_foo" >&5
$as_echo "$ax_cv_check_cflags___MJ_foo" >&6; }
if test "x$ax_cv_check_cflags___MJ_foo" = xyes; then :
:
else
:
fi
JSONFLAGS=""
if test "x$ax_cv_check_cflags___MJ_foo" = "xyes"; then
JSONFLAGS='-MJ $@.json'
fi
CXXSHELL=$SHELL
if test -f /usr/local/bin/bash; then
CXXSHELL=/usr/local/bin/bash
elif test -f /bin/bash; then
CXXSHELL=/bin/bash
elif test -f /bin/zsh; then
CXXSHELL=/bin/zsh
fi
# Extract the first word of "clang-format", so it can be a program name with args.
set dummy clang-format; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_CLANGFORMAT+:} false; then :
$as_echo_n "(cached) " >&6
else
case $CLANGFORMAT in
[\\/]* | ?:[\\/]*)
ac_cv_path_CLANGFORMAT="$CLANGFORMAT" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_CLANGFORMAT="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_CLANGFORMAT" && ac_cv_path_CLANGFORMAT="$ac_cv_path_TRUE"
;;
esac
fi
CLANGFORMAT=$ac_cv_path_CLANGFORMAT
if test -n "$CLANGFORMAT"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CLANGFORMAT" >&5
$as_echo "$CLANGFORMAT" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
# Extract the first word of "clang-tidy", so it can be a program name with args.
set dummy clang-tidy; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_CLANGTIDY+:} false; then :
$as_echo_n "(cached) " >&6
else
case $CLANGTIDY in
[\\/]* | ?:[\\/]*)
ac_cv_path_CLANGTIDY="$CLANGTIDY" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_CLANGTIDY="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_CLANGTIDY" && ac_cv_path_CLANGTIDY="$ac_cv_path_TRUE"
;;
esac
fi
CLANGTIDY=$ac_cv_path_CLANGTIDY
if test -n "$CLANGTIDY"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CLANGTIDY" >&5
$as_echo "$CLANGTIDY" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
###########################################################
#
# check tokyo cabinet and toke
#
###########################################################
ENABLE_TOKE=
TOKEPREFIX=
# Check whether --enable-toke was given.
if test "${enable_toke+set}" = set; then :
enableval=$enable_toke; ENABLE_TOKE=yes
TOKEPREFIX=$enableval
fi
###########################################################
#
# check hanoidb
#
###########################################################
ENABLE_HANOIDB=
HANOIDBPREFIX=
# Check whether --enable-hanoidb was given.
if test "${enable_hanoidb+set}" = set; then :
enableval=$enable_hanoidb; ENABLE_HANOIDB=yes
HANOIDBPREFIX=$enableval
fi
###########################################################
#
# check bitcask
#
###########################################################
ENABLE_BITCASK=
BITCASKPREFIX=
# Check whether --enable-bitcask was given.
if test "${enable_bitcask+set}" = set; then :
enableval=$enable_bitcask; ENABLE_BITCASK=yes
BITCASKPREFIX=$enableval
fi
###########################################################
#
# check erlang_js
#
###########################################################
ENABLE_ERLANGJS=
ERLANGJSPREFIX=
# Check whether --enable-erlang-js was given.
if test "${enable_erlang_js+set}" = set; then :
enableval=$enable_erlang_js; ENABLE_ERLANGJS=yes
ERLANGJSPREFIX=$enableval
fi
###########################################################
#
# check browser for 'make test-vts'
#
###########################################################
BROWSER=
# Check whether --with-browser was given.
if test "${with_browser+set}" = set; then :
withval=$with_browser; if test -n "$withval"; then
BROWSER="$withval"
if test ! -x "$BROWSER"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"$BROWSER\" was not found or is not executable ('make test-vts' will likely fail)" >&5
$as_echo "$as_me: WARNING: \"$BROWSER\" was not found or is not executable ('make test-vts' will likely fail)" >&2;}
fi
fi
else
# Extract the first word of "xdg-open", so it can be a program name with args.
set dummy xdg-open; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_BROWSER+:} false; then :
$as_echo_n "(cached) " >&6
else
case $BROWSER in
[\\/]* | ?:[\\/]*)
ac_cv_path_BROWSER="$BROWSER" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_BROWSER="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
BROWSER=$ac_cv_path_BROWSER
if test -n "$BROWSER"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BROWSER" >&5
$as_echo "$BROWSER" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test "$BROWSER" = ""; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xdg-open was not found ('make test-vts' will likely fail)" >&5
$as_echo "$as_me: WARNING: xdg-open was not found ('make test-vts' will likely fail)" >&2;}
fi
###########################################################
#
# check screen availability for 'scalarisctl -d --screen'
#
###########################################################
# Extract the first word of "screen", so it can be a program name with args.
set dummy screen; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_SCREEN+:} false; then :
$as_echo_n "(cached) " >&6
else
case $SCREEN in
[\\/]* | ?:[\\/]*)
ac_cv_path_SCREEN="$SCREEN" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_SCREEN="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_SCREEN" && ac_cv_path_SCREEN="$FALSE"
;;
esac
fi
SCREEN=$ac_cv_path_SCREEN
if test -n "$SCREEN"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SCREEN" >&5
$as_echo "$SCREEN" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "$ac_cv_path_SCREEN" = "$FALSE" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: screen not found - you won't be able to run scalaris deamonized with screen, i.e. 'scalarisctl -d --screen'" >&5
$as_echo "$as_me: screen not found - you won't be able to run scalaris deamonized with screen, i.e. 'scalarisctl -d --screen'" >&6;}
fi
###########################################################
#
# check sudo, runuser availability for the init.d script
#
###########################################################
# Extract the first word of "sudo", so it can be a program name with args.
set dummy sudo; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_SUDO+:} false; then :
$as_echo_n "(cached) " >&6
else
case $SUDO in
[\\/]* | ?:[\\/]*)
ac_cv_path_SUDO="$SUDO" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_SUDO="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_SUDO" && ac_cv_path_SUDO="$FALSE"
;;
esac
fi
SUDO=$ac_cv_path_SUDO
if test -n "$SUDO"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SUDO" >&5
$as_echo "$SUDO" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
RUNUSER=""
# Check whether --enable-runuser was given.
if test "${enable_runuser+set}" = set; then :
enableval=$enable_runuser;
fi
if test "$enable_runuser" != "no"; then :
# Extract the first word of "runuser", so it can be a program name with args.
set dummy runuser; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_RUNUSER+:} false; then :
$as_echo_n "(cached) " >&6
else
case $RUNUSER in
[\\/]* | ?:[\\/]*)
ac_cv_path_RUNUSER="$RUNUSER" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH$PATH_SEPARATOR/usr/sbin
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_RUNUSER="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_RUNUSER" && ac_cv_path_RUNUSER=""""
;;
esac
fi
RUNUSER=$ac_cv_path_RUNUSER
if test -n "$RUNUSER"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUNUSER" >&5
$as_echo "$RUNUSER" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test "$ac_cv_path_SUDO" = "$FALSE" -a "$ac_cv_path_RUNUSER" = ""; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: sudo or runuser not found - you won't be able to use our init.d script" >&5
$as_echo "$as_me: sudo or runuser not found - you won't be able to use our init.d script" >&6;}
fi
###########################################################
#
# check systemd support
#
###########################################################
INSTALL_INIT=install-initd
SYSTEMD_UNITDIR=
# Check whether --with-systemd was given.
if test "${with_systemd+set}" = set; then :
withval=$with_systemd; if test -d "$withval"; then
SYSTEMD_UNITDIR="$withval"
INSTALL_INIT="install-systemd"
else
if test "$withval" = "yes"; then
SYSTEMD_UNITDIR="\${prefix}/lib/systemd/system/"
INSTALL_INIT="install-systemd"
fi
fi
fi
###########################################################
#
# check whether to compile to native code using HiPE
#
###########################################################
COMPILE_NATIVE=no
# Check whether --enable-native was given.
if test "${enable_native+set}" = set; then :
enableval=$enable_native; COMPILE_NATIVE=yes
fi
###########################################################
#
# check wether to enable debugging, e.g. enable the ASSERT macro
#
###########################################################
# Check whether --enable-debug was given.
if test "${enable_debug+set}" = set; then :
enableval=$enable_debug; if test "no" != "$enableval"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, enable_debug}"
EDOCMACROS="${EDOCMACROS}, {enable_debug, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Denable_debug"
fi
fi
###########################################################
#
# enable new transaction protocol
#
###########################################################
# Check whether --enable-txnew was given.
if test "${enable_txnew+set}" = set; then :
enableval=$enable_txnew; if test "no" != "$enableval"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, enable_txnew}"
EDOCMACROS="${EDOCMACROS}, {enable_txnew, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Denable_txnew"
fi
fi
###########################################################
#
# check erlang
#
###########################################################
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test -n "$ERLC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for erlc" >&5
$as_echo_n "checking for erlc... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ERLC" >&5
$as_echo "$ERLC" >&6; }
else
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}erlc", so it can be a program name with args.
set dummy ${ac_tool_prefix}erlc; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_ERLC+:} false; then :
$as_echo_n "(cached) " >&6
else
case $ERLC in
[\\/]* | ?:[\\/]*)
ac_cv_path_ERLC="$ERLC" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_ERLC="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
ERLC=$ac_cv_path_ERLC
if test -n "$ERLC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ERLC" >&5
$as_echo "$ERLC" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test -z "$ac_cv_path_ERLC"; then
ac_pt_ERLC=$ERLC
# Extract the first word of "erlc", so it can be a program name with args.
set dummy erlc; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_ac_pt_ERLC+:} false; then :
$as_echo_n "(cached) " >&6
else
case $ac_pt_ERLC in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_ERLC="$ac_pt_ERLC" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_ac_pt_ERLC="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
ac_pt_ERLC=$ac_cv_path_ac_pt_ERLC
if test -n "$ac_pt_ERLC"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ERLC" >&5
$as_echo "$ac_pt_ERLC" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "x$ac_pt_ERLC" = x; then
ERLC="not found"
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
ERLC=$ac_pt_ERLC
fi
else
ERLC="$ac_cv_path_ERLC"
fi
fi
if test "$ERLC" = "not found"; then
as_fn_error $? "Erlang/OTP compiler (erlc) not found but required" "$LINENO" 5
fi
if test -n "$ERL"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for erl" >&5
$as_echo_n "checking for erl... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ERL" >&5
$as_echo "$ERL" >&6; }
else
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}erl", so it can be a program name with args.
set dummy ${ac_tool_prefix}erl; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_ERL+:} false; then :
$as_echo_n "(cached) " >&6
else
case $ERL in
[\\/]* | ?:[\\/]*)
ac_cv_path_ERL="$ERL" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_ERL="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
ERL=$ac_cv_path_ERL
if test -n "$ERL"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ERL" >&5
$as_echo "$ERL" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test -z "$ac_cv_path_ERL"; then
ac_pt_ERL=$ERL
# Extract the first word of "erl", so it can be a program name with args.
set dummy erl; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_ac_pt_ERL+:} false; then :
$as_echo_n "(cached) " >&6
else
case $ac_pt_ERL in
[\\/]* | ?:[\\/]*)
ac_cv_path_ac_pt_ERL="$ac_pt_ERL" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_ac_pt_ERL="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
ac_pt_ERL=$ac_cv_path_ac_pt_ERL
if test -n "$ac_pt_ERL"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ERL" >&5
$as_echo "$ac_pt_ERL" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "x$ac_pt_ERL" = x; then
ERL="not found"
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
ERL=$ac_pt_ERL
fi
else
ERL="$ac_cv_path_ERL"
fi
fi
if test "$ERL" = "not found"; then
as_fn_error $? "Erlang/OTP interpreter (erl) not found but required" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP root directory" >&5
$as_echo_n "checking for Erlang/OTP root directory... " >&6; }
if ${ac_cv_erlang_root_dir+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
RootDir = code:root_dir(),
file:write_file("conftest.out", RootDir),
ReturnValue = 0,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_root_dir=`cat conftest.out`
rm -f conftest.out
else
rm -f conftest.out
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_root_dir" >&5
$as_echo "$ac_cv_erlang_root_dir" >&6; }
ERLANG_ROOT_DIR=$ac_cv_erlang_root_dir
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP library base directory" >&5
$as_echo_n "checking for Erlang/OTP library base directory... " >&6; }
if ${ac_cv_erlang_lib_dir+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
LibDir = code:lib_dir(),
file:write_file("conftest.out", LibDir),
ReturnValue = 0,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir=`cat conftest.out`
rm -f conftest.out
else
rm -f conftest.out
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir" >&5
$as_echo "$ac_cv_erlang_lib_dir" >&6; }
ERLANG_LIB_DIR=$ac_cv_erlang_lib_dir
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP ERTS version" >&5
$as_echo_n "checking for Erlang/OTP ERTS version... " >&6; }
if ${erlang_cv_erts_ver+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
Version = erlang:system_info(version),
file:write_file("conftest.out", Version),
ReturnValue = 0,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
erlang_cv_erts_ver=`cat conftest.out`
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $erlang_cv_erts_ver" >&5
$as_echo "$erlang_cv_erts_ver" >&6; }
ERLANG_ERTS_VER=$erlang_cv_erts_ver
# split erlang erts version:
set `echo $erlang_cv_erts_ver | $SED 's/\./ /g'`
ERTS_MAJOR=$1
ERTS_MINOR=$2
ERTS_MAINT=${3:-0}
# require Erlang >= R14B04, i.e. ERTS >= 5.8.5
if test $ERTS_MAJOR -gt 5 -o \
'(' $ERTS_MAJOR -eq 5 -a $ERTS_MINOR -gt 8 ')' -o \
'(' $ERTS_MAJOR -eq 5 -a $ERTS_MINOR -eq 8 -a $ERTS_MAINT -ge 5 ')'; then :
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "Erlang >= R14B04 required
See \`config.log' for more details" "$LINENO" 5; }
fi
# Extract the first word of "epmd", so it can be a program name with args.
set dummy epmd; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_EPMD+:} false; then :
$as_echo_n "(cached) " >&6
else
case $EPMD in
[\\/]* | ?:[\\/]*)
ac_cv_path_EPMD="$EPMD" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_dummy=""$PATH:$ERLANG_ROOT_DIR/bin:$ERLANG_ROOT_DIR/erts-$ERLANG_ERTS_VER/bin""
for as_dir in $as_dummy
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_EPMD="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_EPMD" && ac_cv_path_EPMD="$FALSE"
;;
esac
fi
EPMD=$ac_cv_path_EPMD
if test -n "$EPMD"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $EPMD" >&5
$as_echo "$EPMD" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "x$COMPILE_NATIVE" != xno; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, native"
fi
# required libs:
ERLANG_UNAVAILABLE_LIBS=
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'erts' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'erts' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_erts+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("erts") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_erts=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_erts="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_erts" >&5
$as_echo "$ac_cv_erlang_lib_dir_erts" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'erts' library version" >&5
$as_echo_n "checking for Erlang/OTP 'erts' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_erts+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_erts" = "not found"; then :
ac_cv_erlang_lib_ver_erts="not found"
else
ac_cv_erlang_lib_ver_erts=`$as_echo "$ac_cv_erlang_lib_dir_erts" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_erts" >&5
$as_echo "$ac_cv_erlang_lib_ver_erts" >&6; }
ERLANG_LIB_DIR_erts=$ac_cv_erlang_lib_dir_erts
ERLANG_LIB_VER_erts=$ac_cv_erlang_lib_ver_erts
if test "$ac_cv_erlang_lib_dir_erts" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS erts"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'kernel' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'kernel' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_kernel+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("kernel") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_kernel=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_kernel="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_kernel" >&5
$as_echo "$ac_cv_erlang_lib_dir_kernel" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'kernel' library version" >&5
$as_echo_n "checking for Erlang/OTP 'kernel' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_kernel+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_kernel" = "not found"; then :
ac_cv_erlang_lib_ver_kernel="not found"
else
ac_cv_erlang_lib_ver_kernel=`$as_echo "$ac_cv_erlang_lib_dir_kernel" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_kernel" >&5
$as_echo "$ac_cv_erlang_lib_ver_kernel" >&6; }
ERLANG_LIB_DIR_kernel=$ac_cv_erlang_lib_dir_kernel
ERLANG_LIB_VER_kernel=$ac_cv_erlang_lib_ver_kernel
if test "$ac_cv_erlang_lib_dir_kernel" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS kernel"
fi
as_ac_File=`$as_echo "ac_cv_file_$ERLANG_LIB_DIR_kernel/include/inet.hrl" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ERLANG_LIB_DIR_kernel/include/inet.hrl" >&5
$as_echo_n "checking for $ERLANG_LIB_DIR_kernel/include/inet.hrl... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$ERLANG_LIB_DIR_kernel/include/inet.hrl"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "kernel/include/inet.hrl not found - you won't be able to compile the erlang sources
See \`config.log' for more details" "$LINENO" 5; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'stdlib' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'stdlib' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_stdlib+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("stdlib") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_stdlib=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_stdlib="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_stdlib" >&5
$as_echo "$ac_cv_erlang_lib_dir_stdlib" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'stdlib' library version" >&5
$as_echo_n "checking for Erlang/OTP 'stdlib' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_stdlib+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_stdlib" = "not found"; then :
ac_cv_erlang_lib_ver_stdlib="not found"
else
ac_cv_erlang_lib_ver_stdlib=`$as_echo "$ac_cv_erlang_lib_dir_stdlib" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_stdlib" >&5
$as_echo "$ac_cv_erlang_lib_ver_stdlib" >&6; }
ERLANG_LIB_DIR_stdlib=$ac_cv_erlang_lib_dir_stdlib
ERLANG_LIB_VER_stdlib=$ac_cv_erlang_lib_ver_stdlib
if test "$ac_cv_erlang_lib_dir_stdlib" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS stdlib"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'compiler' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'compiler' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_compiler+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("compiler") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_compiler=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_compiler="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_compiler" >&5
$as_echo "$ac_cv_erlang_lib_dir_compiler" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'compiler' library version" >&5
$as_echo_n "checking for Erlang/OTP 'compiler' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_compiler+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_compiler" = "not found"; then :
ac_cv_erlang_lib_ver_compiler="not found"
else
ac_cv_erlang_lib_ver_compiler=`$as_echo "$ac_cv_erlang_lib_dir_compiler" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_compiler" >&5
$as_echo "$ac_cv_erlang_lib_ver_compiler" >&6; }
ERLANG_LIB_DIR_compiler=$ac_cv_erlang_lib_dir_compiler
ERLANG_LIB_VER_compiler=$ac_cv_erlang_lib_ver_compiler
if test "$ac_cv_erlang_lib_dir_compiler" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS compiler"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'crypto' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'crypto' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_crypto+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("crypto") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_crypto=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_crypto="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_crypto" >&5
$as_echo "$ac_cv_erlang_lib_dir_crypto" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'crypto' library version" >&5
$as_echo_n "checking for Erlang/OTP 'crypto' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_crypto+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_crypto" = "not found"; then :
ac_cv_erlang_lib_ver_crypto="not found"
else
ac_cv_erlang_lib_ver_crypto=`$as_echo "$ac_cv_erlang_lib_dir_crypto" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_crypto" >&5
$as_echo "$ac_cv_erlang_lib_ver_crypto" >&6; }
ERLANG_LIB_DIR_crypto=$ac_cv_erlang_lib_dir_crypto
ERLANG_LIB_VER_crypto=$ac_cv_erlang_lib_ver_crypto
if test "$ac_cv_erlang_lib_dir_crypto" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS crypto"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'os_mon' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'os_mon' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_os_mon+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("os_mon") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_os_mon=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_os_mon="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_os_mon" >&5
$as_echo "$ac_cv_erlang_lib_dir_os_mon" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'os_mon' library version" >&5
$as_echo_n "checking for Erlang/OTP 'os_mon' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_os_mon+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_os_mon" = "not found"; then :
ac_cv_erlang_lib_ver_os_mon="not found"
else
ac_cv_erlang_lib_ver_os_mon=`$as_echo "$ac_cv_erlang_lib_dir_os_mon" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_os_mon" >&5
$as_echo "$ac_cv_erlang_lib_ver_os_mon" >&6; }
ERLANG_LIB_DIR_os_mon=$ac_cv_erlang_lib_dir_os_mon
ERLANG_LIB_VER_os_mon=$ac_cv_erlang_lib_ver_os_mon
if test "$ac_cv_erlang_lib_dir_os_mon" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS os_mon"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'tools' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'tools' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_tools+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("tools") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_tools=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_tools="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_tools" >&5
$as_echo "$ac_cv_erlang_lib_dir_tools" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'tools' library version" >&5
$as_echo_n "checking for Erlang/OTP 'tools' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_tools+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_tools" = "not found"; then :
ac_cv_erlang_lib_ver_tools="not found"
else
ac_cv_erlang_lib_ver_tools=`$as_echo "$ac_cv_erlang_lib_dir_tools" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_tools" >&5
$as_echo "$ac_cv_erlang_lib_ver_tools" >&6; }
ERLANG_LIB_DIR_tools=$ac_cv_erlang_lib_dir_tools
ERLANG_LIB_VER_tools=$ac_cv_erlang_lib_ver_tools
if test "$ac_cv_erlang_lib_dir_tools" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS tools"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'inets' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'inets' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_inets+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("inets") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_inets=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_inets="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_inets" >&5
$as_echo "$ac_cv_erlang_lib_dir_inets" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'inets' library version" >&5
$as_echo_n "checking for Erlang/OTP 'inets' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_inets+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_inets" = "not found"; then :
ac_cv_erlang_lib_ver_inets="not found"
else
ac_cv_erlang_lib_ver_inets=`$as_echo "$ac_cv_erlang_lib_dir_inets" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_inets" >&5
$as_echo "$ac_cv_erlang_lib_ver_inets" >&6; }
ERLANG_LIB_DIR_inets=$ac_cv_erlang_lib_dir_inets
ERLANG_LIB_VER_inets=$ac_cv_erlang_lib_ver_inets
if test "$ac_cv_erlang_lib_dir_inets" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS inets"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'ssl' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'ssl' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_ssl+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("ssl") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_ssl=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_ssl="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_ssl" >&5
$as_echo "$ac_cv_erlang_lib_dir_ssl" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'ssl' library version" >&5
$as_echo_n "checking for Erlang/OTP 'ssl' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_ssl+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_ssl" = "not found"; then :
ac_cv_erlang_lib_ver_ssl="not found"
else
ac_cv_erlang_lib_ver_ssl=`$as_echo "$ac_cv_erlang_lib_dir_ssl" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_ssl" >&5
$as_echo "$ac_cv_erlang_lib_ver_ssl" >&6; }
ERLANG_LIB_DIR_ssl=$ac_cv_erlang_lib_dir_ssl
ERLANG_LIB_VER_ssl=$ac_cv_erlang_lib_ver_ssl
if test "$ac_cv_erlang_lib_dir_ssl" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS ssl"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'xmerl' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'xmerl' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_xmerl+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("xmerl") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_xmerl=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_xmerl="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_xmerl" >&5
$as_echo "$ac_cv_erlang_lib_dir_xmerl" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'xmerl' library version" >&5
$as_echo_n "checking for Erlang/OTP 'xmerl' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_xmerl+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_xmerl" = "not found"; then :
ac_cv_erlang_lib_ver_xmerl="not found"
else
ac_cv_erlang_lib_ver_xmerl=`$as_echo "$ac_cv_erlang_lib_dir_xmerl" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_xmerl" >&5
$as_echo "$ac_cv_erlang_lib_ver_xmerl" >&6; }
ERLANG_LIB_DIR_xmerl=$ac_cv_erlang_lib_dir_xmerl
ERLANG_LIB_VER_xmerl=$ac_cv_erlang_lib_ver_xmerl
if test "$ac_cv_erlang_lib_dir_xmerl" = "not found"; then :
ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS xmerl"
fi
if test "x$ERLANG_UNAVAILABLE_LIBS" != x; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "$ERLANG_UNAVAILABLE_LIBS not found - you won't be able to compile or run the erlang sources
See \`config.log' for more details" "$LINENO" 5; }
fi
# libs for optional build tasks:
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'common_test' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'common_test' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_common_test+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("common_test") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_common_test=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_common_test="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_common_test" >&5
$as_echo "$ac_cv_erlang_lib_dir_common_test" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'common_test' library version" >&5
$as_echo_n "checking for Erlang/OTP 'common_test' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_common_test+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_common_test" = "not found"; then :
ac_cv_erlang_lib_ver_common_test="not found"
else
ac_cv_erlang_lib_ver_common_test=`$as_echo "$ac_cv_erlang_lib_dir_common_test" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_common_test" >&5
$as_echo "$ac_cv_erlang_lib_ver_common_test" >&6; }
ERLANG_LIB_DIR_common_test=$ac_cv_erlang_lib_dir_common_test
ERLANG_LIB_VER_common_test=$ac_cv_erlang_lib_ver_common_test
if test "$ac_cv_erlang_lib_dir_common_test" = "not found"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: erlang-common_test not found - you won't be able to run the unit tests without common_test" >&5
$as_echo "$as_me: erlang-common_test not found - you won't be able to run the unit tests without common_test" >&6;}
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'edoc' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'edoc' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_edoc+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("edoc") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_edoc=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_edoc="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_edoc" >&5
$as_echo "$ac_cv_erlang_lib_dir_edoc" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'edoc' library version" >&5
$as_echo_n "checking for Erlang/OTP 'edoc' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_edoc+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_edoc" = "not found"; then :
ac_cv_erlang_lib_ver_edoc="not found"
else
ac_cv_erlang_lib_ver_edoc=`$as_echo "$ac_cv_erlang_lib_dir_edoc" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_edoc" >&5
$as_echo "$ac_cv_erlang_lib_ver_edoc" >&6; }
ERLANG_LIB_DIR_edoc=$ac_cv_erlang_lib_dir_edoc
ERLANG_LIB_VER_edoc=$ac_cv_erlang_lib_ver_edoc
if test "$ac_cv_erlang_lib_dir_edoc" = "not found"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: erlang-edoc not found - you won't be able to create the documentation or run 'make install'" >&5
$as_echo "$as_me: erlang-edoc not found - you won't be able to create the documentation or run 'make install'" >&6;}
fi
as_ac_File=`$as_echo "ac_cv_file_$ERLANG_LIB_DIR_common_test/priv/bin/run_test" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ERLANG_LIB_DIR_common_test/priv/bin/run_test" >&5
$as_echo_n "checking for $ERLANG_LIB_DIR_common_test/priv/bin/run_test... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$ERLANG_LIB_DIR_common_test/priv/bin/run_test"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
RUN_TEST_FILE=$ERLANG_LIB_DIR_common_test/priv/bin/run_test
else
as_ac_File=`$as_echo "ac_cv_file_$ac_cv_erlang_root_dir/bin/run_test" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_cv_erlang_root_dir/bin/run_test" >&5
$as_echo_n "checking for $ac_cv_erlang_root_dir/bin/run_test... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$ac_cv_erlang_root_dir/bin/run_test"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
RUN_TEST_FILE=$ac_cv_erlang_root_dir/bin/run_test
else
# Extract the first word of "run_test", so it can be a program name with args.
set dummy run_test; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_RUN_TEST_FILE+:} false; then :
$as_echo_n "(cached) " >&6
else
case $RUN_TEST_FILE in
[\\/]* | ?:[\\/]*)
ac_cv_path_RUN_TEST_FILE="$RUN_TEST_FILE" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_RUN_TEST_FILE="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_RUN_TEST_FILE" && ac_cv_path_RUN_TEST_FILE=""""
;;
esac
fi
RUN_TEST_FILE=$ac_cv_path_RUN_TEST_FILE
if test -n "$RUN_TEST_FILE"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUN_TEST_FILE" >&5
$as_echo "$RUN_TEST_FILE" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
fi
as_ac_File=`$as_echo "ac_cv_file_$ERLANG_LIB_DIR_common_test/priv/bin/ct_run" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ERLANG_LIB_DIR_common_test/priv/bin/ct_run" >&5
$as_echo_n "checking for $ERLANG_LIB_DIR_common_test/priv/bin/ct_run... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$ERLANG_LIB_DIR_common_test/priv/bin/ct_run"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
CT_RUN_FILE=$ERLANG_LIB_DIR_common_test/priv/bin/ct_run
else
as_ac_File=`$as_echo "ac_cv_file_$ac_cv_erlang_root_dir/bin/ct_run" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_cv_erlang_root_dir/bin/ct_run" >&5
$as_echo_n "checking for $ac_cv_erlang_root_dir/bin/ct_run... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$ac_cv_erlang_root_dir/bin/ct_run"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
CT_RUN_FILE=$ac_cv_erlang_root_dir/bin/ct_run
else
# Extract the first word of "ct_run", so it can be a program name with args.
set dummy ct_run; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_CT_RUN_FILE+:} false; then :
$as_echo_n "(cached) " >&6
else
case $CT_RUN_FILE in
[\\/]* | ?:[\\/]*)
ac_cv_path_CT_RUN_FILE="$CT_RUN_FILE" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_CT_RUN_FILE="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_CT_RUN_FILE" && ac_cv_path_CT_RUN_FILE=""""
;;
esac
fi
CT_RUN_FILE=$ac_cv_path_CT_RUN_FILE
if test -n "$CT_RUN_FILE"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CT_RUN_FILE" >&5
$as_echo "$CT_RUN_FILE" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unit-test runner" >&5
$as_echo_n "checking for unit-test runner... " >&6; }
if test -n "$RUN_TEST_FILE"; then
RUN_TEST="$RUN_TEST_FILE"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUN_TEST_FILE" >&5
$as_echo "$RUN_TEST_FILE" >&6; }
elif test -n "$CT_RUN_FILE"; then
RUN_TEST="$CT_RUN_FILE"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CT_RUN_FILE" >&5
$as_echo "$CT_RUN_FILE" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: neither run_test nor ct_run found - on erlang < R14 consider running install.sh in the common_test directory otherwise you won't be able to run the unit tests" >&5
$as_echo "neither run_test nor ct_run found - on erlang < R14 consider running install.sh in the common_test directory otherwise you won't be able to run the unit tests" >&6; }
fi
# toke
ERLANG_TOKE_FLAGS=
if test "x$TOKEPREFIX" != xno; then :
ERLANG_TOKE_MESSAGE=
if test "x$TOKEPREFIX" != x; then :
export ERL_LIBS="$TOKEPREFIX"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'toke' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'toke' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_toke+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("toke") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_toke=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_toke="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_toke" >&5
$as_echo "$ac_cv_erlang_lib_dir_toke" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'toke' library version" >&5
$as_echo_n "checking for Erlang/OTP 'toke' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_toke+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_toke" = "not found"; then :
ac_cv_erlang_lib_ver_toke="not found"
else
ac_cv_erlang_lib_ver_toke=`$as_echo "$ac_cv_erlang_lib_dir_toke" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_toke" >&5
$as_echo "$ac_cv_erlang_lib_ver_toke" >&6; }
ERLANG_LIB_DIR_toke=$ac_cv_erlang_lib_dir_toke
ERLANG_LIB_VER_toke=$ac_cv_erlang_lib_ver_toke
if test "$ac_cv_erlang_lib_dir_toke" = "not found"; then :
ERLANG_TOKE_MESSAGE="toke erlang library not found"
else
as_ac_File=`$as_echo "ac_cv_file_$ERLANG_LIB_DIR_toke/priv/libtoke.so" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ERLANG_LIB_DIR_toke/priv/libtoke.so" >&5
$as_echo_n "checking for $ERLANG_LIB_DIR_toke/priv/libtoke.so... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$ERLANG_LIB_DIR_toke/priv/libtoke.so"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
ERLANG_TOKE_FLAGS="-pa $ERLANG_LIB_DIR_toke/ebin"
else
ERLANG_TOKE_MESSAGE="toke library libtoke.so not found"
fi
fi
if test "x$TOKEPREFIX" != x; then :
export ERL_LIBS=""
fi
if test "x$ERLANG_TOKE_MESSAGE" != x; then :
if test "x$ENABLE_TOKE" != xyes; then :
ERLANG_TOKE_MESSAGE="$ERLANG_TOKE_MESSAGE, disabling toke support..."
{ $as_echo "$as_me:${as_lineno-$LINENO}: $ERLANG_TOKE_MESSAGE" >&5
$as_echo "$as_me: $ERLANG_TOKE_MESSAGE" >&6;}
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "$ERLANG_TOKE_MESSAGE
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
# hanoidb
ERLANG_HANOIDB_FLAGS=
if test "x$HANOIDBPREFIX" != xno; then :
ERLANG_HANOIDB_MESSAGE=
if test "x$HANOIDBPREFIX" != x; then :
export ERL_LIBS="$HANOIDBPREFIX"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'hanoidb' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'hanoidb' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_hanoidb+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("hanoidb") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_hanoidb=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_hanoidb="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_hanoidb" >&5
$as_echo "$ac_cv_erlang_lib_dir_hanoidb" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'hanoidb' library version" >&5
$as_echo_n "checking for Erlang/OTP 'hanoidb' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_hanoidb+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_hanoidb" = "not found"; then :
ac_cv_erlang_lib_ver_hanoidb="not found"
else
ac_cv_erlang_lib_ver_hanoidb=`$as_echo "$ac_cv_erlang_lib_dir_hanoidb" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_hanoidb" >&5
$as_echo "$ac_cv_erlang_lib_ver_hanoidb" >&6; }
ERLANG_LIB_DIR_hanoidb=$ac_cv_erlang_lib_dir_hanoidb
ERLANG_LIB_VER_hanoidb=$ac_cv_erlang_lib_ver_hanoidb
if test "$ac_cv_erlang_lib_dir_hanoidb" = "not found"; then :
ERLANG_HANOIDB_MESSAGE="hanoidb erlang not found"
else
ERLANG_HANOIDB_FLAGS="-pa $ERLANG_LIB_DIR_hanoidb/ebin"
fi
if test "x$HANOIDBPREFIX" != x; then :
export ERL_LIBS=""
fi
if test "x$ERLANG_HANOIDB_MESSAGE" != x; then :
if test "x$ENABLE_HANOIDB" != xyes; then :
ERLANG_HANOIDB_MESSAGE="$ERLANG_HANOIDB_MESSAGE, disabling hanoidb support..."
{ $as_echo "$as_me:${as_lineno-$LINENO}: $ERLANG_HANOIDB_MESSAGE" >&5
$as_echo "$as_me: $ERLANG_HANOIDB_MESSAGE" >&6;}
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "$ERLANG_HANOIDB_MESSAGE
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
# bitcask
ERLANG_BITCASK_FLAGS=
BITCASK_LIBS=
if test "x$BITCASKPREFIX" != xno; then :
ERLANG_BITCASK_MESSAGE=
if test "x$BITCASKPREFIX" != x; then :
export ERL_LIBS="$BITCASKPREFIX"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'bitcask' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'bitcask' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_bitcask+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("bitcask") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_bitcask=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_bitcask="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_bitcask" >&5
$as_echo "$ac_cv_erlang_lib_dir_bitcask" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'bitcask' library version" >&5
$as_echo_n "checking for Erlang/OTP 'bitcask' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_bitcask+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_bitcask" = "not found"; then :
ac_cv_erlang_lib_ver_bitcask="not found"
else
ac_cv_erlang_lib_ver_bitcask=`$as_echo "$ac_cv_erlang_lib_dir_bitcask" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_bitcask" >&5
$as_echo "$ac_cv_erlang_lib_ver_bitcask" >&6; }
ERLANG_LIB_DIR_bitcask=$ac_cv_erlang_lib_dir_bitcask
ERLANG_LIB_VER_bitcask=$ac_cv_erlang_lib_ver_bitcask
if test "$ac_cv_erlang_lib_dir_bitcask" = "not found"; then :
ERLANG_BITCASK_MESSAGE="bitcask erlang not found"
else
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_bitcask}"
EDOCMACROS="${EDOCMACROS}, {have_bitcask, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_bitcask"
ERLANG_BITCASK_FLAGS="-pa $ERLANG_LIB_DIR_bitcask/ebin"
BITCASK_LIBS="$ERLANG_LIB_DIR_bitcask"
fi
if test "x$BITCASKPREFIX" != x; then :
export ERL_LIBS=""
fi
if test "x$ERLANG_BITCASK_MESSAGE" != x; then :
if test "x$ENABLE_BITCASK" != xyes; then :
ERLANG_BITCASK_MESSAGE="$ERLANG_BITCASK_MESSAGE, disabling bitcask support..."
{ $as_echo "$as_me:${as_lineno-$LINENO}: $ERLANG_BITCASK_MESSAGE" >&5
$as_echo "$as_me: $ERLANG_BITCASK_MESSAGE" >&6;}
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "$ERLANG_BITCASK_MESSAGE
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
# erlang_js
ERLANG_ERLANGJS_FLAGS=
if test "x$ERLANGJSPREFIX" != xno; then :
ERLANG_ERLANGJS_MESSAGE=
if test "x$ERLANGJSPREFIX" != x; then :
export ERL_LIBS="$ERLANGJSPREFIX"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'erlang_js' library subdirectory" >&5
$as_echo_n "checking for Erlang/OTP 'erlang_js' library subdirectory... " >&6; }
if ${ac_cv_erlang_lib_dir_erlang_js+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
ReturnValue = case code:lib_dir("erlang_js") of
{error, bad_name} ->
file:write_file("conftest.out", "not found\n"),
1;
LibDir ->
file:write_file("conftest.out", LibDir),
0
end,
halt(ReturnValue)
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
ac_cv_erlang_lib_dir_erlang_js=`cat conftest.out`
rm -f conftest.out
else
if test ! -f conftest.out; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "test Erlang program execution failed
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_erlang_lib_dir_erlang_js="not found"
rm -f conftest.out
fi
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_dir_erlang_js" >&5
$as_echo "$ac_cv_erlang_lib_dir_erlang_js" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Erlang/OTP 'erlang_js' library version" >&5
$as_echo_n "checking for Erlang/OTP 'erlang_js' library version... " >&6; }
if ${ac_cv_erlang_lib_ver_erlang_js+:} false; then :
$as_echo_n "(cached) " >&6
else
if test "$ac_cv_erlang_lib_dir_erlang_js" = "not found"; then :
ac_cv_erlang_lib_ver_erlang_js="not found"
else
ac_cv_erlang_lib_ver_erlang_js=`$as_echo "$ac_cv_erlang_lib_dir_erlang_js" | sed -n -e 's,^.*-\([^/-]*\)$,\1,p'`
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_erlang_lib_ver_erlang_js" >&5
$as_echo "$ac_cv_erlang_lib_ver_erlang_js" >&6; }
ERLANG_LIB_DIR_erlang_js=$ac_cv_erlang_lib_dir_erlang_js
ERLANG_LIB_VER_erlang_js=$ac_cv_erlang_lib_ver_erlang_js
if test "$ac_cv_erlang_lib_dir_erlang_js" = "not found"; then :
ERLANG_ERLANGJS_MESSAGE="erlang_js erlang library not found"
else
as_ac_File=`$as_echo "ac_cv_file_$ERLANG_LIB_DIR_erlang_js/priv/erlang_js_drv.so" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ERLANG_LIB_DIR_erlang_js/priv/erlang_js_drv.so" >&5
$as_echo_n "checking for $ERLANG_LIB_DIR_erlang_js/priv/erlang_js_drv.so... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$ERLANG_LIB_DIR_erlang_js/priv/erlang_js_drv.so"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
ERLANG_ERLANGJS_FLAGS="-pa $ERLANG_LIB_DIR_erlang_js/ebin"
else
ERLANG_ERLANGJS_MESSAGE="erlang_js library erlang_js_drv.so not found"
fi
fi
if test "x$ERLANGJSPREFIX" != x; then :
export ERL_LIBS=""
fi
if test "x$ERLANG_ERLANGJS_MESSAGE" != x; then :
if test "x$ENABLE_ERLANGJS" != xyes; then :
ERLANG_ERLANGJS_MESSAGE="$ERLANG_ERLANGJS_MESSAGE, disabling erlang_js support..."
{ $as_echo "$as_me:${as_lineno-$LINENO}: $ERLANG_ERLANGJS_MESSAGE" >&5
$as_echo "$as_me: $ERLANG_ERLANGJS_MESSAGE" >&6;}
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "$ERLANG_ERLANGJS_MESSAGE
See \`config.log' for more details" "$LINENO" 5; }
fi
fi
fi
crypto_start=`"${ERL}" -noshell -eval 'io:format("~p~n", [crypto:start()]), erlang:halt().' | tail -1`
if test "${crypto_start}" = "ok"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: crypto:start() is available" >&5
$as_echo "$as_me: crypto:start() is available" >&6;}
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot start the crypto subsystem
See \`config.log' for more details" "$LINENO" 5; }
fi
crypto_rand_uniform=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(crypto), io:format("~p~n", [erlang:function_exported(crypto,rand_uniform,2)]), erlang:halt().' | tail -1`
if test "${crypto_rand_uniform}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_crypto_randuniform_support}"
EDOCMACROS="${EDOCMACROS}, {have_crypto_randuniform_support, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_crypto_randuniform_support"
{ $as_echo "$as_me:${as_lineno-$LINENO}: crypto:rand_uniform/2 is available" >&5
$as_echo "$as_me: crypto:rand_uniform/2 is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: crypto:rand_uniform/2 is not available" >&5
$as_echo "$as_me: crypto:rand_uniform/2 is not available" >&6;}
fi
crypto_hash=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(crypto), io:format("~p~n", [erlang:function_exported(crypto,hash,2)]), erlang:halt().' | tail -1`
if test "${crypto_hash}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, with_crypto_hash}"
EDOCMACROS="${EDOCMACROS}, {with_crypto_hash, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dwith_crypto_hash"
{ $as_echo "$as_me:${as_lineno-$LINENO}: crypto:hash/2 is available and usable" >&5
$as_echo "$as_me: crypto:hash/2 is available and usable" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: crypto:hash/2 is not available or not usable, falling back to crypto:md5/1 and crypto:sha1/1" >&5
$as_echo "$as_me: crypto:hash/2 is not available or not usable, falling back to crypto:md5/1 and crypto:sha1/1" >&6;}
fi
crypto_bytes_to_integer=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(crypto), io:format("~p~n", [erlang:function_exported(crypto,bytes_to_integer,1)]), erlang:halt().' | tail -1`
if test "${crypto_bytes_to_integer}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, with_crypto_bytes_to_integer}"
EDOCMACROS="${EDOCMACROS}, {with_crypto_bytes_to_integer, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dwith_crypto_bytes_to_integer"
{ $as_echo "$as_me:${as_lineno-$LINENO}: crypto:bytes_to_integer/1 is available and usable" >&5
$as_echo "$as_me: crypto:bytes_to_integer/1 is available and usable" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: crypto:bytes_to_integer/1 is not available or not usable, falling back to rand:uniform/2" >&5
$as_echo "$as_me: crypto:bytes_to_integer/1 is not available or not usable, falling back to rand:uniform/2" >&6;}
fi
ct_line=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(ct_line), io:format("~p~n", [erlang:function_exported(ct_line,parse_transform,2)]), erlang:halt().' | tail -1`
if test "${ct_line}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_ctline_support}"
EDOCMACROS="${EDOCMACROS}, {have_ctline_support, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_ctline_support"
{ $as_echo "$as_me:${as_lineno-$LINENO}: ct_line is available" >&5
$as_echo "$as_me: ct_line is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: ct_line is not available" >&5
$as_echo "$as_me: ct_line is not available" >&6;}
fi
rand_module=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(rand), io:format("~p~n", [erlang:function_exported(rand,uniform,0)]), erlang:halt().' | tail -1`
if test "${rand_module}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, with_rand}"
EDOCMACROS="${EDOCMACROS}, {with_rand, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dwith_rand"
{ $as_echo "$as_me:${as_lineno-$LINENO}: rand:uniform/0 is available and usable" >&5
$as_echo "$as_me: rand:uniform/0 is available and usable" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: rand:uniform/0 is not available or not usable, falling back to random:uniform/0" >&5
$as_echo "$as_me: rand:uniform/0 is not available or not usable, falling back to random:uniform/0" >&6;}
fi
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
-callback init() -> ok.
start() ->
ok
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_callback_support}"
EDOCMACROS="${EDOCMACROS}, {have_callback_support, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_callback_support"
{ $as_echo "$as_me:${as_lineno-$LINENO}: -callback is available" >&5
$as_echo "$as_me: -callback is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: -callback is not available" >&5
$as_echo "$as_me: -callback is not available" >&6;}
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
maps_module=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(maps), io:format("~p~n", [erlang:function_exported(maps,new,0)]), erlang:halt().' | tail -1`
if test "${maps_module}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, with_maps}"
EDOCMACROS="${EDOCMACROS}, {with_maps, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dwith_maps"
{ $as_echo "$as_me:${as_lineno-$LINENO}: maps are available and seem to be usable" >&5
$as_echo "$as_me: maps are available and seem to be usable" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: maps are not available or not usable, falling back to gb_trees" >&5
$as_echo "$as_me: maps are not available or not usable, falling back to gb_trees" >&6;}
fi
# creates forms specifying a minimal erlang module which spezifies a
# type based on dict:dict() and checks if compilation of this module fails
dict_type=`"${ERL}" -noshell -eval 'X = fun(S) -> element(2,erl_parse:parse_form(element(2,erl_scan:string(S)))) end, io:format("~p~n", [element(1, compile:forms([X("-module(test)."), X("-type test() :: dict:dict().")]))]), erlang:halt().' 2> /dev/null | tail -1`
if test "${dict_type}" = "ok"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, namespaced_dict}"
EDOCMACROS="${EDOCMACROS}, {namespaced_dict, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dnamespaced_dict"
{ $as_echo "$as_me:${as_lineno-$LINENO}: erlang dict type is defined as dict:dict()" >&5
$as_echo "$as_me: erlang dict type is defined as dict:dict()" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: erlang dict type is defined as dict()" >&5
$as_echo "$as_me: erlang dict type is defined as dict()" >&6;}
fi
###########################################################
#
# check for file:send_file/5 for yaws
#
###########################################################
YAWS_OPTIONS=
HAVE_ERLANG_SENDFILE=false
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for file:sendfile/5" >&5
$as_echo_n "checking for file:sendfile/5... " >&6; }
file_sendfile=`"${ERL}" -noshell -eval 'code:ensure_loaded(file), io:format("~p~n",[erlang:function_exported(file,sendfile,5)]), erlang:halt().' | tail -1`
if test "$file_sendfile" = true; then
if test $ERTS_MAJOR -gt 5 -o \
'(' $ERTS_MAJOR -eq 5 -a $ERTS_MINOR -gt 9 ')' -o \
'(' $ERTS_MAJOR -eq 5 -a $ERTS_MINOR -eq 9 -a $ERTS_MAINT -ge 1 ')'; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
HAVE_ERLANG_SENDFILE=true
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "$HAVE_ERLANG_SENDFILE" = true; then :
YAWS_OPTIONS=", {d, 'HAVE_ERLANG_SENDFILE'}"
YAWS_OPTIONS_DIALYZER=" -DHAVE_ERLANG_SENDFILE"
{ $as_echo "$as_me:${as_lineno-$LINENO}: using file:sendfile/5 for yaws" >&5
$as_echo "$as_me: using file:sendfile/5 for yaws" >&6;}
else
YAWS_OPTIONS=""
YAWS_OPTIONS_DIALYZER=""
{ $as_echo "$as_me:${as_lineno-$LINENO}: using fallback gen_tcp:send/2 for yaws" >&5
$as_echo "$as_me: using fallback gen_tcp:send/2 for yaws" >&6;}
fi
if test "${crypto_hash}" = "true"; then :
YAWS_OPTIONS="${YAWS_OPTIONS}, {d, 'HAVE_CRYPTO_HASH'}"
YAWS_OPTIONS_DIALYZER="${YAWS_OPTIONS_DIALYZER} -DHAVE_CRYPTO_HASH"
fi
###########################################################
#
# check for erlang:timestamp/0 for yaws
#
###########################################################
erlang_timestamp=`"${ERL}" -noshell -eval 'io:format("~p~n", [erlang:function_exported(erlang,timestamp,0)]), erlang:halt().' | tail -1`
if test "${erlang_timestamp}" = "true"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: erlang:timestamp() is available" >&5
$as_echo "$as_me: erlang:timestamp() is available" >&6;}
else
YAWS_OPTIONS="${YAWS_OPTIONS}, {d, 'HAVE_ERLANG_NOW'}"
YAWS_OPTIONS_DIALYZER="${YAWS_OPTIONS_DIALYZER} -DHAVE_ERLANG_NOW"
{ $as_echo "$as_me:${as_lineno-$LINENO}: erlang:timestamp() is not available" >&5
$as_echo "$as_me: erlang:timestamp() is not available" >&6;}
fi
###########################################################
#
# check for ssl:getstat/2 for ssl
#
###########################################################
## https://github.com/erlang/otp/commit/84fd2c325c9e38b5ea2307b6133c3d15b33a3241
SSL_GETSTAT=false
ssl_getstat=`"${ERL}" -noshell -eval 'code:ensure_loaded(ssl),io:format("~p~n", [erlang:function_exported(ssl,getstat,2)]), erlang:halt().' | tail -1`
if test "${ssl_getstat}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_ssl_getstat}"
EDOCMACROS="${EDOCMACROS}, {have_ssl_getstat, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_ssl_getstat"
SSL_GETSTAT=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: ssl:getstat() is available" >&5
$as_echo "$as_me: ssl:getstat() is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: ssl:getstat() is not available" >&5
$as_echo "$as_me: ssl:getstat() is not available" >&6;}
fi
###########################################################
#
# check for ssl:handshake/1 for ssl
#
###########################################################
## https://github.com/erlang/otp/commit/8dcfffd4fb8520239b189357e81122d4fdacb42d
SSL_HANDSHAKE=false
ssl_handshake=`"${ERL}" -noshell -eval 'code:ensure_loaded(ssl),io:format("~p~n", [erlang:function_exported(ssl,handshake,1)]), erlang:halt().' | tail -1`
if test "${ssl_handshake}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_ssl_handshake}"
EDOCMACROS="${EDOCMACROS}, {have_ssl_handshake, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_ssl_handshake"
SSL_HANDSHAKE=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: ssl:handshake() is available" >&5
$as_echo "$as_me: ssl:handshake() is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: ssl:handshake() is not available" >&5
$as_echo "$as_me: ssl:handshake() is not available" >&6;}
fi
###########################################################
#
# check for new stacktrace syntax
#
###########################################################
# http://erlang.org/eeps/eep-0047.md
erlang_cv_new_stacktrace=0
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "$cross_compiling" = yes; then :
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "cannot run test program while cross compiling
See \`config.log' for more details" "$LINENO" 5; }
else
cat > conftest.$ac_ext <<_ACEOF
-module(conftest).
-export([start/0]).
start() ->
try
5
catch
C:E:Stk ->
Stk
end
.
_ACEOF
if ac_fn_erl_try_run "$LINENO"; then :
erlang_cv_new_stacktrace=true
else
erlang_cv_new_stacktrace=false
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
if test "${erlang_cv_new_stacktrace}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_new_stacktrace}"
EDOCMACROS="${EDOCMACROS}, {have_new_stacktrace, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_new_stacktrace"
{ $as_echo "$as_me:${as_lineno-$LINENO}: new stacktrace syntax is available" >&5
$as_echo "$as_me: new stacktrace syntax is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: new stacktrace syntax is not available" >&5
$as_echo "$as_me: new stacktrace syntax is not available" >&6;}
fi
###########################################################
#
# check for socket:open/2 since 22.0
#
###########################################################
# https://github.com/erlang/otp/commit/3ca71520bfb664f0ea809ffdf41505936e4d5e90
SOCKET_OPEN=false
socket_open=`"${ERL}" -noshell -eval 'code:ensure_loaded(socket),io:format("~p~n", [erlang:function_exported(socket,open,2)]), erlang:halt().' | tail -1`
if test "${socket_open}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_socket_open}"
EDOCMACROS="${EDOCMACROS}, {have_socket_open, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_socket_open"
SOCKET_OPEN=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: socket:open/2 is available" >&5
$as_echo "$as_me: socket:open/2 is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: socket:open/2 is not available" >&5
$as_echo "$as_me: socket:open/2 is not available" >&6;}
fi
###########################################################
#
# check for persistent_term:get/2 since 21.2.
#
###########################################################
# https://github.com/erlang/otp/commit/805748eb668d5562fe17f3172cdae07a86166c3f
PERSISTENT_TERM_GET=false
persistent_term_get=`"${ERL}" -noshell -eval 'code:ensure_loaded(persistent_term),io:format("~p~n", [erlang:function_exported(persistent_term,get,1)]), erlang:halt().' | tail -1`
if test "${persistent_term_get}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_persistent_term_get}"
EDOCMACROS="${EDOCMACROS}, {have_persistent_term_get, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_persistent_term_get"
PERSISTENT_TERM_GET=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: persistent_term:get/2 is available" >&5
$as_echo "$as_me: persistent_term:get/2 is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: persistent_term:get/2 is not available" >&5
$as_echo "$as_me: persistent_term:get/2 is not available" >&6;}
fi
###########################################################
#
# check for counters:get/2 since 21.2.
#
###########################################################
# https://github.com/erlang/otp/commit/fefb5d039e87ff7137e78b3d5f2eaf01e498ec4d
COUNTERS_GET=false
counters_get=`"${ERL}" -noshell -eval 'code:ensure_loaded(counters),io:format("~p~n", [erlang:function_exported(counters,get,2)]), erlang:halt().' | tail -1`
if test "${counters_get}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_counters_get}"
EDOCMACROS="${EDOCMACROS}, {have_counters_get, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_counters_get"
COUNTERS_GET=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: counters:get/2 is available" >&5
$as_echo "$as_me: counters:get/2 is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: counters:get/2 is not available" >&5
$as_echo "$as_me: counters:get/2 is not available" >&6;}
fi
###########################################################
#
# check for atomics:new/2 since 21.2.
#
###########################################################
# https://github.com/erlang/otp/commit/1315c6457e49595fdd3f91693c0506964416c9f0
ATOMICS_NEW=false
atomics_new=`"${ERL}" -noshell -eval 'code:ensure_loaded(atomics),io:format("~p~n", [erlang:function_exported(atomics,new,2)]), erlang:halt().' | tail -1`
if test "${atomics_new}" = "true"; then :
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_atomics_new}"
EDOCMACROS="${EDOCMACROS}, {have_atomics_new, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_atomics_new"
ATOMICS_NEW=true
{ $as_echo "$as_me:${as_lineno-$LINENO}: atomics:new/2 is available" >&5
$as_echo "$as_me: atomics:new/2 is available" >&6;}
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: atomics:new/2 is not available" >&5
$as_echo "$as_me: atomics:new/2 is not available" >&6;}
fi
###########################################################
#
# all defines together...
#
###########################################################
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}"
EDOCMACROS="${EDOCMACROS#, }"
DIALYZER_FLAGS="${DIALYZER_FLAGS## }${YAWS_OPTIONS_DIALYZER}"
###########################################################
#
# check for routing table type
#
###########################################################
RT=rt_chord
# Check whether --with-rt was given.
if test "${with_rt+set}" = set; then :
withval=$with_rt; if test "$withval"; then
RT="$withval"
fi
fi
###########################################################
#
# check java-functions, build-classpath availability for java-api/scalaris
#
###########################################################
JAVAFUNCTIONS=
# Check whether --with-java-functions was given.
if test "${with_java_functions+set}" = set; then :
withval=$with_java_functions; with_java_functions=$withval
else
with_java_functions=/usr/share/java-utils/java-functions
fi
as_ac_File=`$as_echo "ac_cv_file_$with_java_functions" | $as_tr_sh`
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $with_java_functions" >&5
$as_echo_n "checking for $with_java_functions... " >&6; }
if eval \${$as_ac_File+:} false; then :
$as_echo_n "(cached) " >&6
else
test "$cross_compiling" = yes &&
as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
if test -r "$with_java_functions"; then
eval "$as_ac_File=yes"
else
eval "$as_ac_File=no"
fi
fi
eval ac_res=\$$as_ac_File
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
$as_echo "$ac_res" >&6; }
if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
JAVAFUNCTIONS=$with_java_functions
else
JAVAFUNCTIONS=$with_java_functions
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: java-functions was not found in \"$with_java_functions\" (java-api/scalaris may fail)" >&5
$as_echo "$as_me: WARNING: java-functions was not found in \"$with_java_functions\" (java-api/scalaris may fail)" >&2;}
fi
BUILDCLASSPATH=
# Check whether --with-build-classpath was given.
if test "${with_build_classpath+set}" = set; then :
withval=$with_build_classpath; if test -n "$withval"; then
BUILDCLASSPATH="$withval"
fi
else
# Extract the first word of "build-classpath", so it can be a program name with args.
set dummy build-classpath; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_BUILDCLASSPATH+:} false; then :
$as_echo_n "(cached) " >&6
else
case $BUILDCLASSPATH in
[\\/]* | ?:[\\/]*)
ac_cv_path_BUILDCLASSPATH="$BUILDCLASSPATH" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_BUILDCLASSPATH="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
BUILDCLASSPATH=$ac_cv_path_BUILDCLASSPATH
if test -n "$BUILDCLASSPATH"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILDCLASSPATH" >&5
$as_echo "$BUILDCLASSPATH" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test ! -x "$BUILDCLASSPATH"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: build-classpath was not found in \"$BUILDCLASSPATH\" or is not executable (java-api/scalaris may fail)" >&5
$as_echo "$as_me: WARNING: build-classpath was not found in \"$BUILDCLASSPATH\" or is not executable (java-api/scalaris may fail)" >&2;}
fi
###########################################################
#
# check ruby
#
###########################################################
ENABLERUBYINSTALL=
RUBYSITELIBDIR=
# Check whether --with-ruby-sitelibdir was given.
if test "${with_ruby_sitelibdir+set}" = set; then :
withval=$with_ruby_sitelibdir; if test -n "$withval"; then
RUBYSITELIBDIR="$withval"
ENABLERUBYINSTALL="install-ruby"
fi
fi
###########################################################
#
# check python, python3
#
###########################################################
PYTHON2SITELIBDIR=
ENABLEPYTHON2INSTALL=
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python 2.x >= 2.6" >&5
$as_echo_n "checking for python 2.x >= 2.6... " >&6; }
if ${ac_cv_path_PYTHON2+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$PYTHON2"; then
ac_path_PYTHON2_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_prog in python python2; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_PYTHON2="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_PYTHON2" || continue
$ac_path_PYTHON2 -V 2>&1 | grep "^Python 2.[6789]" > /dev/null && \
PYTHON2SITELIBDIR=`$ac_path_PYTHON2 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib(0,0,prefix="${prefix}"))' 2>/dev/null` && \
ac_cv_path_PYTHON2=$ac_path_PYTHON2 ac_path_PYTHON2_found=:
$ac_path_PYTHON2_found && break 3
done
done
done
IFS=$as_save_IFS
if test -z "$ac_cv_path_PYTHON2"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
fi
else
ac_cv_path_PYTHON2=$PYTHON2
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_PYTHON2" >&5
$as_echo "$ac_cv_path_PYTHON2" >&6; }
if test "$ac_cv_path_PYTHON2" != ""; then :
PYTHON2=$ac_cv_path_PYTHON2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python 2.x sitelibdir" >&5
$as_echo_n "checking for python 2.x sitelibdir... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON2SITELIBDIR" >&5
$as_echo "$PYTHON2SITELIBDIR" >&6; }
ENABLEPYTHON2INSTALL="install-python"
else
PYTHON2=$FALSE
fi
PYTHON3SITELIBDIR=
ENABLEPYTHON3INSTALL=
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python 3.x" >&5
$as_echo_n "checking for python 3.x... " >&6; }
if ${ac_cv_path_PYTHON3+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$PYTHON3"; then
ac_path_PYTHON3_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_prog in python3 python; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_PYTHON3="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_PYTHON3" || continue
$ac_path_PYTHON3 -V 2>&1 | grep "^Python 3." > /dev/null && \
PYTHON3SITELIBDIR=`$ac_path_PYTHON3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib(0,0,prefix="${prefix}"))' 2>/dev/null` && \
ac_cv_path_PYTHON3=$ac_path_PYTHON3 ac_path_PYTHON3_found=:
$ac_path_PYTHON3_found && break 3
done
done
done
IFS=$as_save_IFS
if test -z "$ac_cv_path_PYTHON3"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
$as_echo "not found" >&6; }
fi
else
ac_cv_path_PYTHON3=$PYTHON3
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_PYTHON3" >&5
$as_echo "$ac_cv_path_PYTHON3" >&6; }
PYTHON3=
PYTHON3_2TO3=
ENABLEPYTHON3=python3-not-found
ENABLEPYTHON3INSTALL=
if test "$ac_cv_path_PYTHON3" != ""; then :
PYTHON3=$ac_cv_path_PYTHON3
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python 3.x sitelibdir" >&5
$as_echo_n "checking for python 3.x sitelibdir... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3SITELIBDIR" >&5
$as_echo "$PYTHON3SITELIBDIR" >&6; }
# Extract the first word of "2to3", so it can be a program name with args.
set dummy 2to3; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_PYTHON3_2TO3+:} false; then :
$as_echo_n "(cached) " >&6
else
case $PYTHON3_2TO3 in
[\\/]* | ?:[\\/]*)
ac_cv_path_PYTHON3_2TO3="$PYTHON3_2TO3" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_PYTHON3_2TO3="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_PYTHON3_2TO3" && ac_cv_path_PYTHON3_2TO3=""""
;;
esac
fi
PYTHON3_2TO3=$ac_cv_path_PYTHON3_2TO3
if test -n "$PYTHON3_2TO3"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3_2TO3" >&5
$as_echo "$PYTHON3_2TO3" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test -x "$PYTHON3_2TO3"; then :
ENABLEPYTHON3="python3-compile"
ENABLEPYTHON3INSTALL="install-python3"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 2to3 not found - you won't be able to build the Python3 API" >&5
$as_echo "$as_me: WARNING: 2to3 not found - you won't be able to build the Python3 API" >&2;}
fi
else
PYTHON3=$FALSE
fi
###########################################################
#
# check MACOSX vs. Linux for flexbisonparse driver
#
###########################################################
SAVECFLAGS=$CFLAGS
CFLAGS="-I$ERLANG_ROOT_DIR/erts-$ERLANG_LIB_VER_erts/include $CFLAGS"
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
$as_echo_n "checking how to run the C preprocessor... " >&6; }
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
if ${ac_cv_prog_CPP+:} false; then :
$as_echo_n "(cached) " >&6
else
# Double quotes because CPP needs to be expanded
for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
do
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
# Use a header file that comes with gcc, so configuring glibc
# with a fresh cross-compiler works.
# Prefer to if __STDC__ is defined, since
# exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __STDC__
# include
#else
# include
#endif
Syntax error
_ACEOF
if ac_fn_c_try_cpp "$LINENO"; then :
else
# Broken: fails on valid input.
continue
fi
rm -f conftest.err conftest.i conftest.$ac_ext
# OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
_ACEOF
if ac_fn_c_try_cpp "$LINENO"; then :
# Broken: success on invalid input.
continue
else
# Passes both tests.
ac_preproc_ok=:
break
fi
rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
rm -f conftest.i conftest.err conftest.$ac_ext
if $ac_preproc_ok; then :
break
fi
done
ac_cv_prog_CPP=$CPP
fi
CPP=$ac_cv_prog_CPP
else
ac_cv_prog_CPP=$CPP
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
$as_echo "$CPP" >&6; }
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
# Use a header file that comes with gcc, so configuring glibc
# with a fresh cross-compiler works.
# Prefer to if __STDC__ is defined, since
# exists even on freestanding compilers.
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#ifdef __STDC__
# include
#else
# include
#endif
Syntax error
_ACEOF
if ac_fn_c_try_cpp "$LINENO"; then :
else
# Broken: fails on valid input.
continue
fi
rm -f conftest.err conftest.i conftest.$ac_ext
# OK, works on sane cases. Now check whether nonexistent headers
# can be detected and how.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
_ACEOF
if ac_fn_c_try_cpp "$LINENO"; then :
# Broken: success on invalid input.
continue
else
# Passes both tests.
ac_preproc_ok=:
break
fi
rm -f conftest.err conftest.i conftest.$ac_ext
done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
rm -f conftest.i conftest.err conftest.$ac_ext
if $ac_preproc_ok; then :
else
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
See \`config.log' for more details" "$LINENO" 5; }
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
if ${ac_cv_path_GREP+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -z "$GREP"; then
ac_path_GREP_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_prog in grep ggrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_GREP" || continue
# Check for GNU ac_path_GREP and select it if it is found.
# Check for GNU $ac_path_GREP
case `"$ac_path_GREP" --version 2>&1` in
*GNU*)
ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
*)
ac_count=0
$as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
$as_echo 'GREP' >> "conftest.nl"
"$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
if test $ac_count -gt ${ac_path_GREP_max-0}; then
# Best one so far, save it but keep looking for a better one
ac_cv_path_GREP="$ac_path_GREP"
ac_path_GREP_max=$ac_count
fi
# 10*(2^10) chars as input seems more than enough
test $ac_count -gt 10 && break
done
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
esac
$ac_path_GREP_found && break 3
done
done
done
IFS=$as_save_IFS
if test -z "$ac_cv_path_GREP"; then
as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
fi
else
ac_cv_path_GREP=$GREP
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
$as_echo "$ac_cv_path_GREP" >&6; }
GREP="$ac_cv_path_GREP"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
$as_echo_n "checking for egrep... " >&6; }
if ${ac_cv_path_EGREP+:} false; then :
$as_echo_n "(cached) " >&6
else
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
then ac_cv_path_EGREP="$GREP -E"
else
if test -z "$EGREP"; then
ac_path_EGREP_found=false
# Loop through the user's path and test for each of PROGNAME-LIST
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_prog in egrep; do
for ac_exec_ext in '' $ac_executable_extensions; do
ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
as_fn_executable_p "$ac_path_EGREP" || continue
# Check for GNU ac_path_EGREP and select it if it is found.
# Check for GNU $ac_path_EGREP
case `"$ac_path_EGREP" --version 2>&1` in
*GNU*)
ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
*)
ac_count=0
$as_echo_n 0123456789 >"conftest.in"
while :
do
cat "conftest.in" "conftest.in" >"conftest.tmp"
mv "conftest.tmp" "conftest.in"
cp "conftest.in" "conftest.nl"
$as_echo 'EGREP' >> "conftest.nl"
"$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
as_fn_arith $ac_count + 1 && ac_count=$as_val
if test $ac_count -gt ${ac_path_EGREP_max-0}; then
# Best one so far, save it but keep looking for a better one
ac_cv_path_EGREP="$ac_path_EGREP"
ac_path_EGREP_max=$ac_count
fi
# 10*(2^10) chars as input seems more than enough
test $ac_count -gt 10 && break
done
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
esac
$ac_path_EGREP_found && break 3
done
done
done
IFS=$as_save_IFS
if test -z "$ac_cv_path_EGREP"; then
as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
fi
else
ac_cv_path_EGREP=$EGREP
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
$as_echo "$ac_cv_path_EGREP" >&6; }
EGREP="$ac_cv_path_EGREP"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
$as_echo_n "checking for ANSI C header files... " >&6; }
if ${ac_cv_header_stdc+:} false; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
#include
#include
#include
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_header_stdc=yes
else
ac_cv_header_stdc=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
$EGREP "memchr" >/dev/null 2>&1; then :
else
ac_cv_header_stdc=no
fi
rm -f conftest*
fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
$EGREP "free" >/dev/null 2>&1; then :
else
ac_cv_header_stdc=no
fi
rm -f conftest*
fi
if test $ac_cv_header_stdc = yes; then
# /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
if test "$cross_compiling" = yes; then :
:
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include
#include
#if ((' ' & 0x0FF) == 0x020)
# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
#else
# define ISLOWER(c) \
(('a' <= (c) && (c) <= 'i') \
|| ('j' <= (c) && (c) <= 'r') \
|| ('s' <= (c) && (c) <= 'z'))
# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
#endif
#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
int
main ()
{
int i;
for (i = 0; i < 256; i++)
if (XOR (islower (i), ISLOWER (i))
|| toupper (i) != TOUPPER (i))
return 2;
return 0;
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
else
ac_cv_header_stdc=no
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
$as_echo "$ac_cv_header_stdc" >&6; }
if test $ac_cv_header_stdc = yes; then
$as_echo "#define STDC_HEADERS 1" >>confdefs.h
fi
# On IRIX 5.3, sys/types and inttypes.h are conflicting.
for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
"
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
fi
done
ac_fn_c_check_header_mongrel "$LINENO" "erl_nif.h" "ac_cv_header_erl_nif_h" "$ac_includes_default"
if test "x$ac_cv_header_erl_nif_h" = xyes; then :
fi
ac_ext=erl
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&5 && echo "#!/bin/sh" > conftest$ac_exeext && $as_echo "\"$ERL\" -run conftest start -run init stop -noshell" >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
CFLAGS=$SAVECFLAGS
#http://unix.stackexchange.com/questions/35183/how-do-i-identify-which-linux-distro-is-running
LINUXVERSION="unknown linux"
if test -f /etc/SuSE-release ; then
LINUXVERSION=`cat /etc/SuSE-release`
elif test -f /etc/redhat-release ; then
LINUXVERSION=`cat /etc/redhat-release`
elif test -f /etc/fedora-release ; then
LINUXVERSION=`cat /etc/fedora-release`
elif test -f /etc/debian_release ; then
LINUXVERSION=`cat /etc/debian_release`
elif test -f /etc/debian_version ; then
LINUXVERSION=`cat /etc/debian_version`
elif test -f /etc/gentoo-release ; then
LINUXVERSION=`cat /etc/gentoo-release`
elif test -f /etc/arch-release ; then
LINUXVERSION=`uname -a`
fi
OS=""
case `uname -s` in
linux*)
NIFFLAGS="-shared"
DRIVER_OS=LINUX
OS=$LINUXVERSION
ARCHIVECMD="$ac_cv_path_AR rv"
;;
Linux*)
NIFFLAGS="-shared"
DRIVER_OS=LINUX
OS=$LINUXVERSION
ARCHIVECMD="$ac_cv_path_AR rv"
;;
Darwin*)
NIFFLAGS="-flat_namespace -undefined dynamic_lookup"
DRIVER_OS=MACOSX
OS="OSX `sw_vers -productVersion`"
ARCHIVECMD="$ac_cv_path_LIBTOOL -static -o"
;;
darwin*)
NIFFLAGS="-flat_namespace -undefined dynamic_lookup"
DRIVER_OS=MACOSX
OS="OSX `sw_vers -productVersion`"
ARCHIVECMD="$ac_cv_path_LIBTOOL -static -o"
;;
esac
GIT=`command -v git`
STAT=`command -v stat`
SHA1SUM=`command -v sha1sum`
SRC="download"
CONFIGURESTATUS=""
if test "x$GIT" != "x" -a -d .git; then
SRC=`git log --pretty=format:'%h' -n 1 .`
CONFIGURESTATUS=`git status -s configure | cut -d ' ' -f 2`
elif test "x$GIT" != "x"; then
CONFIGURESTATUS=`git hash-object configure`
elif test "x$DRIVER_OS" = "xMACOSX" ; then
# BSD
SIZE=`/usr/bin/stat -f "%z" configure`
CONFIGURESTATUS=`(/usr/bin/printf "blob $SIZE\0" ; /bin/cat configure) | /usr/bin/openssl sha1`
elif test "x$STAT" != "x" -a "x$SHA1SUM" != "x" ; then
CONFIGURESTATUS=`(stat --printf="blob %s\0" configure; cat configure) | sha1sum -b | cut -d " " -f1`
else
CONFIGURESTATUS=""
fi
echo "detected OS is: '$OS' $SRC $CONFIGURESTATUS"
mkdir -p ~/.yaws 2> /dev/null
mkdir -p python3-api
$SED -e "s|python-api|python3-api|g" \
-e "s|@PYTHONSITELIBDIR@|@PYTHON3SITELIBDIR@|g" \
-e "s|PYTHON2|PYTHON3|g" python-api/scalaris.in > python3-api/scalaris.in
ac_config_files="$ac_config_files Emakefile Makefile bin/scalarisctl bin/jsonclient include/rt.hrl cpp-api/Makefile java-api/scalaris java-api/scalaris-java.conf contrib/init.d/scalaris contrib/init.d/scalaris-monitor python-api/scalaris python3-api/scalaris ruby-api/scalaris"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs, see configure's option --config-cache.
# It is not useful on other systems. If it contains results you don't
# want to keep, you may remove or edit it.
#
# config.status only pays attention to the cache file if you give it
# the --recheck option to rerun configure.
#
# `ac_cv_env_foo' variables (set or unset) will be overridden when
# loading this file, other *unset* `ac_cv_foo' will be assigned the
# following values.
_ACEOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, we kill variables containing newlines.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(
for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
eval ac_val=\$$ac_var
case $ac_val in #(
*${as_nl}*)
case $ac_var in #(
*_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
esac
case $ac_var in #(
_ | IFS | as_nl) ;; #(
BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
*) { eval $ac_var=; unset $ac_var;} ;;
esac ;;
esac
done
(set) 2>&1 |
case $as_nl`(ac_space=' '; set) 2>&1` in #(
*${as_nl}ac_space=\ *)
# `set' does not quote correctly, so add quotes: double-quote
# substitution turns \\\\ into \\, and sed turns \\ into \.
sed -n \
"s/'/'\\\\''/g;
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
;; #(
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
;;
esac |
sort
) |
sed '
/^ac_cv_env_/b end
t clear
:clear
s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
t end
s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
:end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
if test -w "$cache_file"; then
if test "x$cache_file" != "x/dev/null"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
$as_echo "$as_me: updating cache $cache_file" >&6;}
if test ! -f "$cache_file" || test -h "$cache_file"; then
cat confcache >"$cache_file"
else
case $cache_file in #(
*/* | ?:*)
mv -f confcache "$cache_file"$$ &&
mv -f "$cache_file"$$ "$cache_file" ;; #(
*)
mv -f confcache "$cache_file" ;;
esac
fi
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
fi
fi
rm -f confcache
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
#
# If the first sed substitution is executed (which looks for macros that
# take arguments), then branch to the quote section. Otherwise,
# look for a macro that doesn't take arguments.
ac_script='
:mline
/\\$/{
N
s,\\\n,,
b mline
}
t clear
:clear
s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
t quote
s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
t quote
b any
:quote
s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
s/\[/\\&/g
s/\]/\\&/g
s/\$/$$/g
H
:any
${
g
s/^\n//
s/\n/ /g
p
}
'
DEFS=`sed -n "$ac_script" confdefs.h`
ac_libobjs=
ac_ltlibobjs=
U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
$as_echo_n "checking that generated files are newer than configure... " >&6; }
if test -n "$am_sleep_pid"; then
# Hide warnings about reused PIDs.
wait $am_sleep_pid 2>/dev/null
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
$as_echo "done" >&6; }
if test -n "$EXEEXT"; then
am__EXEEXT_TRUE=
am__EXEEXT_FALSE='#'
else
am__EXEEXT_TRUE='#'
am__EXEEXT_FALSE=
fi
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
as_fn_error $? "conditional \"AMDEP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
# Generated by $as_me.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.
debug=false
ac_cs_recheck=false
ac_cs_silent=false
SHELL=\${CONFIG_SHELL-$SHELL}
export SHELL
_ASEOF
cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##
# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
emulate sh
NULLCMD=:
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
case `(set -o) 2>/dev/null` in #(
*posix*) :
set -o posix ;; #(
*) :
;;
esac
fi
as_nl='
'
export as_nl
# Printing a long string crashes Solaris 7 /usr/bin/printf.
as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
# Prefer a ksh shell builtin over an external printf program on Solaris,
# but without wasting forks for bash or zsh.
if test -z "$BASH_VERSION$ZSH_VERSION" \
&& (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='print -r --'
as_echo_n='print -rn --'
elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
as_echo='printf %s\n'
as_echo_n='printf %s'
else
if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
as_echo_n='/usr/ucb/echo -n'
else
as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
as_echo_n_body='eval
arg=$1;
case $arg in #(
*"$as_nl"*)
expr "X$arg" : "X\\(.*\\)$as_nl";
arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
esac;
expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
'
export as_echo_n_body
as_echo_n='sh -c $as_echo_n_body as_echo'
fi
export as_echo_body
as_echo='sh -c $as_echo_body as_echo'
fi
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
(PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
PATH_SEPARATOR=';'
}
fi
# IFS
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
IFS=" "" $as_nl"
# Find who we are. Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
*[\\/]* ) as_myself=$0 ;;
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
done
IFS=$as_save_IFS
;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
as_myself=$0
fi
if test ! -f "$as_myself"; then
$as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
exit 1
fi
# Unset variables that we do not need and which cause bugs (e.g. in
# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
# suppresses any "Segmentation fault" message there. '((' could
# trigger a bug in pdksh 5.2.14.
for as_var in BASH_ENV ENV MAIL MAILPATH
do eval test x\${$as_var+set} = xset \
&& ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '
# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE
# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
as_status=$1; test $as_status -eq 0 && as_status=1
if test "$4"; then
as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
$as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
fi
$as_echo "$as_me: error: $2" >&2
as_fn_exit $as_status
} # as_fn_error
# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
return $1
} # as_fn_set_status
# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
set +e
as_fn_set_status $1
exit $1
} # as_fn_exit
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
{ eval $1=; unset $1;}
}
as_unset=as_fn_unset
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
eval 'as_fn_append ()
{
eval $1+=\$2
}'
else
as_fn_append ()
{
eval $1=\$$1\$2
}
fi # as_fn_append
# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
eval 'as_fn_arith ()
{
as_val=$(( $* ))
}'
else
as_fn_arith ()
{
as_val=`expr "$@" || test $? -eq 1`
}
fi # as_fn_arith
if expr a : '\(a\)' >/dev/null 2>&1 &&
test "X`expr 00001 : '.*\(...\)'`" = X001; then
as_expr=expr
else
as_expr=false
fi
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
as_basename=basename
else
as_basename=false
fi
if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
as_dirname=dirname
else
as_dirname=false
fi
as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
X"$0" : 'X\(//\)$' \| \
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
case `echo 'xy\c'` in
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
xy) ECHO_C='\c';;
*) echo `echo ksh88 bug on AIX 6.1` > /dev/null
ECHO_T=' ';;
esac;;
*)
ECHO_N='-n';;
esac
rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
rm -f conf$$.dir/conf$$.file
else
rm -f conf$$.dir
mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
if ln -s conf$$.file conf$$ 2>/dev/null; then
as_ln_s='ln -s'
# ... but there are two gotchas:
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
# In both cases, we have to default to `cp -pR'.
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
as_ln_s='cp -pR'
elif ln conf$$.file conf$$ 2>/dev/null; then
as_ln_s=ln
else
as_ln_s='cp -pR'
fi
else
as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null
# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{
case $as_dir in #(
-*) as_dir=./$as_dir;;
esac
test -d "$as_dir" || eval $as_mkdir_p || {
as_dirs=
while :; do
case $as_dir in #(
*\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
*) as_qdir=$as_dir;;
esac
as_dirs="'$as_qdir' $as_dirs"
as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$as_dir" : 'X\(//\)[^/]' \| \
X"$as_dir" : 'X\(//\)$' \| \
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
test -d "$as_dir" && break
done
test -z "$as_dirs" || eval "mkdir $as_dirs"
} || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
} # as_fn_mkdir_p
if mkdir -p . 2>/dev/null; then
as_mkdir_p='mkdir -p "$as_dir"'
else
test -d ./-p && rmdir ./-p
as_mkdir_p=false
fi
# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
test -f "$1" && test -x "$1"
} # as_fn_executable_p
as_test_x='test -x'
as_executable_p=as_fn_executable_p
# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
exec 6>&1
## ----------------------------------- ##
## Main body of $CONFIG_STATUS script. ##
## ----------------------------------- ##
_ASEOF
test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# Save the log message, to keep $0 and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by scalaris $as_me 0.9.0+git, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
CONFIG_HEADERS = $CONFIG_HEADERS
CONFIG_LINKS = $CONFIG_LINKS
CONFIG_COMMANDS = $CONFIG_COMMANDS
$ $0 $@
on `(hostname || uname -n) 2>/dev/null | sed 1q`
"
_ACEOF
case $ac_config_files in *"
"*) set x $ac_config_files; shift; ac_config_files=$*;;
esac
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
config_files="$ac_config_files"
config_commands="$ac_config_commands"
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
ac_cs_usage="\
\`$as_me' instantiates files and other configuration actions
from templates according to the current configuration. Unless the files
and actions are specified as TAGs, all are instantiated by default.
Usage: $0 [OPTION]... [TAG]...
-h, --help print this help, then exit
-V, --version print version number and configuration settings, then exit
--config print configuration, then exit
-q, --quiet, --silent
do not print progress messages
-d, --debug don't remove temporary files
--recheck update $as_me by reconfiguring in the same conditions
--file=FILE[:TEMPLATE]
instantiate the configuration file FILE
Configuration files:
$config_files
Configuration commands:
$config_commands
Report bugs to ."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
scalaris config.status 0.9.0+git
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
Copyright (C) 2012 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
ac_pwd='$ac_pwd'
srcdir='$srcdir'
INSTALL='$INSTALL'
MKDIR_P='$MKDIR_P'
AWK='$AWK'
test -n "\$AWK" || AWK=awk
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# The default lists apply if the user does not specify any file.
ac_need_defaults=:
while test $# != 0
do
case $1 in
--*=?*)
ac_option=`expr "X$1" : 'X\([^=]*\)='`
ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
ac_shift=:
;;
--*=)
ac_option=`expr "X$1" : 'X\([^=]*\)='`
ac_optarg=
ac_shift=:
;;
*)
ac_option=$1
ac_optarg=$2
ac_shift=shift
;;
esac
case $ac_option in
# Handling of the options.
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
ac_cs_recheck=: ;;
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
$as_echo "$ac_cs_version"; exit ;;
--config | --confi | --conf | --con | --co | --c )
$as_echo "$ac_cs_config"; exit ;;
--debug | --debu | --deb | --de | --d | -d )
debug=: ;;
--file | --fil | --fi | --f )
$ac_shift
case $ac_optarg in
*\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
'') as_fn_error $? "missing file argument" ;;
esac
as_fn_append CONFIG_FILES " '$ac_optarg'"
ac_need_defaults=false;;
--he | --h | --help | --hel | -h )
$as_echo "$ac_cs_usage"; exit ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil | --si | --s)
ac_cs_silent=: ;;
# This is an error.
-*) as_fn_error $? "unrecognized option: \`$1'
Try \`$0 --help' for more information." ;;
*) as_fn_append ac_config_targets " $1"
ac_need_defaults=false ;;
esac
shift
done
ac_configure_extra_args=
if $ac_cs_silent; then
exec 6>/dev/null
ac_configure_extra_args="$ac_configure_extra_args --silent"
fi
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
shift
\$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
CONFIG_SHELL='$SHELL'
export CONFIG_SHELL
exec "\$@"
fi
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
exec 5>>config.log
{
echo
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
$as_echo "$ac_log"
} >&5
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
#
# INIT-COMMANDS
#
AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# Handling of arguments.
for ac_config_target in $ac_config_targets
do
case $ac_config_target in
"depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"Emakefile") CONFIG_FILES="$CONFIG_FILES Emakefile" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"bin/scalarisctl") CONFIG_FILES="$CONFIG_FILES bin/scalarisctl" ;;
"bin/jsonclient") CONFIG_FILES="$CONFIG_FILES bin/jsonclient" ;;
"include/rt.hrl") CONFIG_FILES="$CONFIG_FILES include/rt.hrl" ;;
"cpp-api/Makefile") CONFIG_FILES="$CONFIG_FILES cpp-api/Makefile" ;;
"java-api/scalaris") CONFIG_FILES="$CONFIG_FILES java-api/scalaris" ;;
"java-api/scalaris-java.conf") CONFIG_FILES="$CONFIG_FILES java-api/scalaris-java.conf" ;;
"contrib/init.d/scalaris") CONFIG_FILES="$CONFIG_FILES contrib/init.d/scalaris" ;;
"contrib/init.d/scalaris-monitor") CONFIG_FILES="$CONFIG_FILES contrib/init.d/scalaris-monitor" ;;
"python-api/scalaris") CONFIG_FILES="$CONFIG_FILES python-api/scalaris" ;;
"python3-api/scalaris") CONFIG_FILES="$CONFIG_FILES python3-api/scalaris" ;;
"ruby-api/scalaris") CONFIG_FILES="$CONFIG_FILES ruby-api/scalaris" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac
done
# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used. Set only those that are not.
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
fi
# Have a temporary directory for convenience. Make it in the build tree
# simply because there is no reason against having it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
# Hook for its removal unless debugging.
# Note that there is a small window in which the directory will not be cleaned:
# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
tmp= ac_tmp=
trap 'exit_status=$?
: "${ac_tmp:=$tmp}"
{ test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
' 0
trap 'as_fn_exit 1' 1 2 13 15
}
# Create a (secure) tmp directory for tmp files.
{
tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
test -d "$tmp"
} ||
{
tmp=./conf$$-$RANDOM
(umask 077 && mkdir "$tmp")
} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
ac_tmp=$tmp
# Set up the scripts for CONFIG_FILES section.
# No need to generate them if there are no CONFIG_FILES.
# This happens for instance with `./config.status config.h'.
if test -n "$CONFIG_FILES"; then
ac_cr=`echo X | tr X '\015'`
# On cygwin, bash can eat \r inside `` if the user requested igncr.
# But we know of no other shell where ac_cr would be empty at this
# point, so we can use a bashism as a fallback.
if test "x$ac_cr" = x; then
eval ac_cr=\$\'\\r\'
fi
ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null`
if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
ac_cs_awk_cr='\\r'
else
ac_cs_awk_cr=$ac_cr
fi
echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
_ACEOF
{
echo "cat >conf$$subs.awk <<_ACEOF" &&
echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
echo "_ACEOF"
} >conf$$subs.sh ||
as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
. ./conf$$subs.sh ||
as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
if test $ac_delim_n = $ac_delim_num; then
break
elif $ac_last_try; then
as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
else
ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
fi
done
rm -f conf$$subs.sh
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
_ACEOF
sed -n '
h
s/^/S["/; s/!.*/"]=/
p
g
s/^[^!]*!//
:repl
t repl
s/'"$ac_delim"'$//
t delim
:nl
h
s/\(.\{148\}\)..*/\1/
t more1
s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
p
n
b repl
:more1
s/["\\]/\\&/g; s/^/"/; s/$/"\\/
p
g
s/.\{148\}//
t nl
:delim
h
s/\(.\{148\}\)..*/\1/
t more2
s/["\\]/\\&/g; s/^/"/; s/$/"/
p
b
:more2
s/["\\]/\\&/g; s/^/"/; s/$/"\\/
p
g
s/.\{148\}//
t delim
' >$CONFIG_STATUS || ac_write_fail=1
rm -f conf$$subs.awk
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_ACAWK
cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
for (key in S) S_is_set[key] = 1
FS = ""
}
{
line = $ 0
nfields = split(line, field, "@")
substed = 0
len = length(field[1])
for (i = 2; i < nfields; i++) {
key = field[i]
keylen = length(key)
if (S_is_set[key]) {
value = S[key]
line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
len += length(value) + length(field[++i])
substed = 1
} else
len += 1 + keylen
}
print line
}
_ACAWK
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
else
cat
fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
|| as_fn_error $? "could not setup config files machinery" "$LINENO" 5
_ACEOF
# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
# trailing colons and then remove the whole line if VPATH becomes empty
# (actually we leave an empty line to preserve line numbers).
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
h
s///
s/^/:/
s/[ ]*$/:/
s/:\$(srcdir):/:/g
s/:\${srcdir}:/:/g
s/:@srcdir@:/:/g
s/^:*//
s/:*$//
x
s/\(=[ ]*\).*/\1/
G
s/\n//
s/^[^=]*=[ ]*$//
}'
fi
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
fi # test -n "$CONFIG_FILES"
eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS"
shift
for ac_tag
do
case $ac_tag in
:[FHLC]) ac_mode=$ac_tag; continue;;
esac
case $ac_mode$ac_tag in
:[FHL]*:*);;
:L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
:[FH]-) ac_tag=-:-;;
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
esac
ac_save_IFS=$IFS
IFS=:
set x $ac_tag
IFS=$ac_save_IFS
shift
ac_file=$1
shift
case $ac_mode in
:L) ac_source=$1;;
:[FH])
ac_file_inputs=
for ac_f
do
case $ac_f in
-) ac_f="$ac_tmp/stdin";;
*) # Look for the file first in the build tree, then in the source tree
# (if the path is not absolute). The absolute path cannot be DOS-style,
# because $ac_f cannot contain `:'.
test -f "$ac_f" ||
case $ac_f in
[\\/$]*) false;;
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
esac ||
as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
esac
case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
as_fn_append ac_file_inputs " '$ac_f'"
done
# Let's still pretend it is `configure' which instantiates (i.e., don't
# use $as_me), people would be surprised to read:
# /* config.h. Generated by config.status. */
configure_input='Generated from '`
$as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
`' by configure.'
if test x"$ac_file" != x-; then
configure_input="$ac_file. $configure_input"
{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
$as_echo "$as_me: creating $ac_file" >&6;}
fi
# Neutralize special characters interpreted by sed in replacement strings.
case $configure_input in #(
*\&* | *\|* | *\\* )
ac_sed_conf_input=`$as_echo "$configure_input" |
sed 's/[\\\\&|]/\\\\&/g'`;; #(
*) ac_sed_conf_input=$configure_input;;
esac
case $ac_tag in
*:-:* | *:-) cat >"$ac_tmp/stdin" \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
esac
;;
esac
ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$ac_file" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
as_dir="$ac_dir"; as_fn_mkdir_p
ac_builddir=.
case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
# A ".." for each directory in $ac_dir_suffix.
ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
case $ac_top_builddir_sub in
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix
case $srcdir in
.) # We are building in place.
ac_srcdir=.
ac_top_srcdir=$ac_top_builddir_sub
ac_abs_top_srcdir=$ac_pwd ;;
[\\/]* | ?:[\\/]* ) # Absolute name.
ac_srcdir=$srcdir$ac_dir_suffix;
ac_top_srcdir=$srcdir
ac_abs_top_srcdir=$srcdir ;;
*) # Relative name.
ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
ac_top_srcdir=$ac_top_build_prefix$srcdir
ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
case $ac_mode in
:F)
#
# CONFIG_FILE
#
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
*) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
esac
ac_MKDIR_P=$MKDIR_P
case $MKDIR_P in
[\\/$]* | ?:[\\/]* ) ;;
*/*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
esac
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# If the template does not know about datarootdir, expand it.
# FIXME: This hack should be removed a few years after 2.60.
ac_datarootdir_hack=; ac_datarootdir_seen=
ac_sed_dataroot='
/datarootdir/ {
p
q
}
/@datadir@/p
/@docdir@/p
/@infodir@/p
/@localedir@/p
/@mandir@/p'
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_datarootdir_hack='
s&@datadir@&$datadir&g
s&@docdir@&$docdir&g
s&@infodir@&$infodir&g
s&@localedir@&$localedir&g
s&@mandir@&$mandir&g
s&\\\${datarootdir}&$datarootdir&g' ;;
esac
_ACEOF
# Neutralize VPATH when `$srcdir' = `.'.
# Shell code in configure.ac might set extrasub.
# FIXME: do we really want to maintain this feature?
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_sed_extra="$ac_vpsub
$extrasub
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
s|@configure_input@|$ac_sed_conf_input|;t t
s&@top_builddir@&$ac_top_builddir_sub&;t t
s&@top_build_prefix@&$ac_top_build_prefix&;t t
s&@srcdir@&$ac_srcdir&;t t
s&@abs_srcdir@&$ac_abs_srcdir&;t t
s&@top_srcdir@&$ac_top_srcdir&;t t
s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
s&@builddir@&$ac_builddir&;t t
s&@abs_builddir@&$ac_abs_builddir&;t t
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
s&@INSTALL@&$ac_INSTALL&;t t
s&@MKDIR_P@&$ac_MKDIR_P&;t t
$ac_datarootdir_hack
"
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
>$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
{ ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
"$ac_tmp/out"`; test -z "$ac_out"; } &&
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&5
$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined. Please make sure it is defined" >&2;}
rm -f "$ac_tmp/stdin"
case $ac_file in
-) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
*) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
esac \
|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
;;
:C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
$as_echo "$as_me: executing $ac_file commands" >&6;}
;;
esac
case $ac_file$ac_mode in
"depfiles":C) test x"$AMDEP_TRUE" != x"" || {
# Older Autoconf quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
# TODO: see whether this extra hack can be removed once we start
# requiring Autoconf 2.70 or later.
case $CONFIG_FILES in #(
*\'*) :
eval set x "$CONFIG_FILES" ;; #(
*) :
set x $CONFIG_FILES ;; #(
*) :
;;
esac
shift
# Used to flag and report bootstrapping failures.
am_rc=0
for am_mf
do
# Strip MF so we end up with the name of the file.
am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile which includes
# dependency-tracking related rules and includes.
# Grep'ing the whole file directly is not great: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
|| continue
am_dirpart=`$as_dirname -- "$am_mf" ||
$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$am_mf" : 'X\(//\)[^/]' \| \
X"$am_mf" : 'X\(//\)$' \| \
X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$am_mf" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
am_filepart=`$as_basename -- "$am_mf" ||
$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
X"$am_mf" : 'X\(//\)$' \| \
X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$am_mf" |
sed '/^.*\/\([^/][^/]*\)\/*$/{
s//\1/
q
}
/^X\/\(\/\/\)$/{
s//\1/
q
}
/^X\/\(\/\).*/{
s//\1/
q
}
s/.*/./; q'`
{ echo "$as_me:$LINENO: cd "$am_dirpart" \
&& sed -e '/# am--include-marker/d' "$am_filepart" \
| $MAKE -f - am--depfiles" >&5
(cd "$am_dirpart" \
&& sed -e '/# am--include-marker/d' "$am_filepart" \
| $MAKE -f - am--depfiles) >&5 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } || am_rc=$?
done
if test $am_rc -ne 0; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "Something went wrong bootstrapping makefile fragments
for automatic dependency tracking. Try re-running configure with the
'--disable-dependency-tracking' option to at least be able to build
the package (albeit without support for automatic dependency tracking).
See \`config.log' for more details" "$LINENO" 5; }
fi
{ am_dirpart=; unset am_dirpart;}
{ am_filepart=; unset am_filepart;}
{ am_mf=; unset am_mf;}
{ am_rc=; unset am_rc;}
rm -f conftest-deps.mk
}
;;
esac
done # for ac_tag
as_fn_exit 0
_ACEOF
ac_clean_files=$ac_clean_files_save
test $ac_write_fail = 0 ||
as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
# by configure, so config.status won't be able to write to it; its
# output is simply discarded. So we exec the FD to /dev/null,
# effectively closing config.log, so it can be properly (re)opened and
# appended to by config.status. When coming back to configure, we
# need to make the FD available again.
if test "$no_create" != yes; then
ac_cs_success=:
ac_config_status_args=
test "$silent" = yes &&
ac_config_status_args="$ac_config_status_args --quiet"
exec 5>/dev/null
$SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
exec 5>>config.log
# Use ||, not &&, to avoid exiting from the if with $? = 1, which
# would make configure fail if this is the last instruction.
$ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
chmod u+x bin/scalarisctl
chmod u+x bin/jsonclient
chmod u+x java-api/scalaris
chmod u+x python-api/scalaris
chmod u+x python3-api/scalaris
chmod u+x ruby-api/scalaris
chmod u+x contrib/init.d/scalaris
chmod u+x contrib/init.d/scalaris-monitor
echo "Erlang"
if test "x$BITCASK_LIBS" = "x" ; then
echo " Bitcask : no"
else
echo " Bitcask : yes"
fi
if test "x$ERLANG_HANOIDB_FLAGS" = "x" ; then
echo " hanoidb : no"
else
echo " hanoidb : yes"
fi
if test "x$ERLANG_TOKE_FLAGS" = "x" ; then
echo " toke : no"
else
echo " toke : yes"
fi
if test "x$SSL_GETSTAT" = "xfalse" ; then
echo " ssl : no"
else
echo " ssl : yes"
fi
if test "x$enabled_cxx" = "x0" ; then
echo "C++ API : no"
else
echo "C++ API : yes"
fi
if test "x$ENABLEPYTHON2INSTALL" = "xinstall-python" ; then
echo "Python API : yes"
else
echo "Python API : no"
fi
if test "x$ENABLEPYTHON3" = "xpython3-compile" ; then
echo "Python3 API : yes"
else
echo "Python3 API : no"
fi
================================================
FILE: configure.ac
================================================
# Copyright 2007-2019 Konrad-Zuse-Zentrum für Informationstechnik Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
AC_PREREQ(2.65)
AC_INIT(scalaris, 0.9.0+git, scalaris@googlegroups.com)
AC_CONFIG_MACRO_DIR([m4])
# we will never do automake, just pull in config.guess, config.sub, ... for boost
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE()
EMAKEFILEDEFINES=
EDOCMACROS=
DIALYZER_FLAGS=
AC_PATH_PROG(FALSE, false)
AC_SUBST(FALSE)
AC_PATH_PROG(TRUE, true)
AC_SUBST(TRUE)
AC_PROG_SED
AC_PATH_PROG(DOXYGEN, doxygen)
AC_SUBST(DOXYGEN)
AC_PATH_PROG(AR, ar)
AC_SUBST(AR)
AC_PATH_PROG(LIBTOOL, libtool)
AC_SUBST(LIBTOOL)
###########################################################
#
# check for C++ and boost
#
###########################################################
ENABLE_CPP=
AC_ARG_ENABLE([cpp],
AS_HELP_STRING([--disable-cpp],
[disable support for the C++ bindings]),
[ENABLE_CPP=$enableval],
[ENABLE_CPP=$enableval])
enabled_cxx=0
if test "x$ENABLE_CPP" != xno ; then
# C++ and boost checks
AX_CXX_COMPILE_STDCXX_14([noext],[optional])
if test "x$HAVE_CXX14" = "x1" ; then
have_boost_147=
AX_BOOST_BASE([1.47], [have_boost_147=yes], [have_boost_147=no])
AX_BOOST_SYSTEM
AX_BOOST_REGEX
AX_BOOST_ASIO
AX_BOOST_PROGRAM_OPTIONS
AX_BOOST_UNIT_TEST_FRAMEWORK
AX_CHECK_OPENSSL([ENABLE_SSL=yes])
if test "x$have_boost_147" = "xyes" -a "x$ax_cv_boost_system" = "xyes" -a "x$ax_cv_boost_regex" = "xyes" -a "x$ax_cv_boost_program_options" = "xyes" -a "x$ax_cv_boost_unit_test_framework" = "xyes" -a "x$ENABLE_SSL" = "xyes" ; then
enabled_cxx=1
fi
fi
fi
if test "x$enabled_cxx" = "x0" ; then
AC_MSG_NOTICE([c++ bindings disabled ('make cpp' will fail)])
fi
AX_CHECK_COMPILE_FLAG(-MJ foo)
JSONFLAGS=""
if test "x$ax_cv_check_cflags___MJ_foo" = "xyes"; then
JSONFLAGS='-MJ $@.json'
fi
CXXSHELL=$SHELL
if test -f /usr/local/bin/bash; then
CXXSHELL=/usr/local/bin/bash
elif test -f /bin/bash; then
CXXSHELL=/bin/bash
elif test -f /bin/zsh; then
CXXSHELL=/bin/zsh
fi
AC_PATH_PROG(CLANGFORMAT, clang-format, $ac_cv_path_TRUE)
AC_PATH_PROG(CLANGTIDY, clang-tidy, $ac_cv_path_TRUE)
AC_SUBST(OPENSSL_INCLUDES)
AC_SUBST(OPENSSL_LDFLAGS)
AC_SUBST(OPENSSL_LIBS)
AC_SUBST(CXX)
AC_SUBST(CXXFLAGS)
AC_SUBST(CXXSHELL)
AC_SUBST(JSONFLAGS)
AC_SUBST(CLANGFORMAT)
AC_SUBST(CLANGTIDY)
###########################################################
#
# check tokyo cabinet and toke
#
###########################################################
ENABLE_TOKE=
TOKEPREFIX=
AC_ARG_ENABLE([toke],
AS_HELP_STRING([--enable-toke@<:@=DIR@:>@],
[enable support for tokyo cabinet through toke]),
[ENABLE_TOKE=yes
TOKEPREFIX=$enableval])
###########################################################
#
# check hanoidb
#
###########################################################
ENABLE_HANOIDB=
HANOIDBPREFIX=
AC_ARG_ENABLE([hanoidb],
AS_HELP_STRING([--enable-hanoidb@<:@=DIR@:>@],
[enable support for hanoidb]),
[ENABLE_HANOIDB=yes
HANOIDBPREFIX=$enableval])
###########################################################
#
# check bitcask
#
###########################################################
ENABLE_BITCASK=
BITCASKPREFIX=
AC_ARG_ENABLE([bitcask],
AS_HELP_STRING([--enable-bitcask@<:@=DIR@:>@],
[enable support for bitcask]),
[ENABLE_BITCASK=yes
BITCASKPREFIX=$enableval])
###########################################################
#
# check erlang_js
#
###########################################################
ENABLE_ERLANGJS=
ERLANGJSPREFIX=
AC_ARG_ENABLE([erlang-js],
AS_HELP_STRING([--enable-erlang-js@<:@=DIR@:>@],
[enable support for erlang_js]),
[ENABLE_ERLANGJS=yes
ERLANGJSPREFIX=$enableval])
###########################################################
#
# check browser for 'make test-vts'
#
###########################################################
BROWSER=
AC_ARG_WITH([browser],
[AS_HELP_STRING([--with-browser=BROWSER],
[absolute path of the browser to use for 'make test-vts'])],
[if test -n "$withval"; then
BROWSER="$withval"
AS_IF([test ! -x "$BROWSER"],
[AC_MSG_WARN(["$BROWSER" was not found or is not executable ('make test-vts' will likely fail)])])
fi],
[AC_PATH_PROG([BROWSER], [xdg-open])])
AC_SUBST(BROWSER)
AS_IF([test "$BROWSER" = ""],
[AC_MSG_WARN([xdg-open was not found ('make test-vts' will likely fail)])])
###########################################################
#
# check screen availability for 'scalarisctl -d --screen'
#
###########################################################
AC_PATH_PROG(SCREEN, screen, [$FALSE])
if test "$ac_cv_path_SCREEN" = "$FALSE" ; then
AC_MSG_NOTICE([screen not found - you won't be able to run scalaris deamonized with screen, i.e. 'scalarisctl -d --screen'])
fi
###########################################################
#
# check sudo, runuser availability for the init.d script
#
###########################################################
AC_PATH_PROG(SUDO, sudo, [$FALSE])
RUNUSER=""
AC_ARG_ENABLE([runuser],
AS_HELP_STRING([--disable-runuser],
[disable support for runuser (use sudo instead)]))
AS_IF([test "$enable_runuser" != "no"],
[AC_PATH_PROG(RUNUSER, runuser, "", [$PATH$PATH_SEPARATOR/usr/sbin])])
if test "$ac_cv_path_SUDO" = "$FALSE" -a "$ac_cv_path_RUNUSER" = ""; then
AC_MSG_NOTICE([sudo or runuser not found - you won't be able to use our init.d script])
fi
###########################################################
#
# check systemd support
#
###########################################################
INSTALL_INIT=install-initd
SYSTEMD_UNITDIR=
AC_ARG_WITH([systemd],
[AS_HELP_STRING([--with-systemd[[=UNITDIR]]],
[use systemd, optionally specify the directory for systemd service files])],
[if test -d "$withval"; then
SYSTEMD_UNITDIR="$withval"
INSTALL_INIT="install-systemd"
else
if test "$withval" = "yes"; then
SYSTEMD_UNITDIR="\${prefix}/lib/systemd/system/"
INSTALL_INIT="install-systemd"
fi
fi],
[])
AC_SUBST(INSTALL_INIT)
AC_SUBST(SYSTEMD_UNITDIR)
###########################################################
#
# check whether to compile to native code using HiPE
#
###########################################################
COMPILE_NATIVE=no
AC_ARG_ENABLE([native],
AS_HELP_STRING([--enable-native],
[enable compilation to native code using HiPE]),
[COMPILE_NATIVE=yes])
###########################################################
#
# check wether to enable debugging, e.g. enable the ASSERT macro
#
###########################################################
AC_ARG_ENABLE([debug],
AS_HELP_STRING([--enable-debug], [enable debugging mode]),
[AS_IF([test "no" != "$enableval"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, enable_debug}"
EDOCMACROS="${EDOCMACROS}, {enable_debug, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Denable_debug"])])
###########################################################
#
# enable new transaction protocol
#
###########################################################
AC_ARG_ENABLE([txnew],
AS_HELP_STRING([--enable-txnew], [enable new transaction protocol]),
[AS_IF([test "no" != "$enableval"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, enable_txnew}"
EDOCMACROS="${EDOCMACROS}, {enable_txnew, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Denable_txnew"])])
###########################################################
#
# check erlang
#
###########################################################
AC_LANG([Erlang])
AC_ERLANG_NEED_ERLC
AC_ERLANG_NEED_ERL
AC_ERLANG_SUBST_ROOT_DIR
AC_ERLANG_SUBST_LIB_DIR
AC_CACHE_CHECK([for Erlang/OTP ERTS version],
[erlang_cv_erts_ver],
[AC_LANG_PUSH([Erlang])[]dnl
AC_RUN_IFELSE(
[AC_LANG_PROGRAM([], [dnl
Version = erlang:system_info(version),
file:write_file("conftest.out", Version),
ReturnValue = 0,
halt(ReturnValue)])],
[erlang_cv_erts_ver=`cat conftest.out`],
[AC_MSG_FAILURE([test Erlang program execution failed])])
AC_LANG_POP([Erlang])[]dnl
])
AC_SUBST([ERLANG_ERTS_VER], [$erlang_cv_erts_ver])
# split erlang erts version:
set `echo $erlang_cv_erts_ver | $SED 's/\./ /g'`
ERTS_MAJOR=$1
ERTS_MINOR=$2
ERTS_MAINT=${3:-0}
# require Erlang >= R14B04, i.e. ERTS >= 5.8.5
AS_IF([test $ERTS_MAJOR -gt 5 -o \
'(' $ERTS_MAJOR -eq 5 -a $ERTS_MINOR -gt 8 ')' -o \
'(' $ERTS_MAJOR -eq 5 -a $ERTS_MINOR -eq 8 -a $ERTS_MAINT -ge 5 ')'],
[],
[AC_MSG_FAILURE([Erlang >= R14B04 required])])
AC_PATH_PROG(EPMD, epmd, [$FALSE], "$PATH:$ERLANG_ROOT_DIR/bin:$ERLANG_ROOT_DIR/erts-$ERLANG_ERTS_VER/bin")
AS_IF([test "x$COMPILE_NATIVE" != xno], [EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, native"])
# required libs:
ERLANG_UNAVAILABLE_LIBS=
AC_ERLANG_CHECK_LIB(erts, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS erts")
AC_ERLANG_CHECK_LIB(kernel, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS kernel")
AC_CHECK_FILE($ERLANG_LIB_DIR_kernel/include/inet.hrl, ,
AC_MSG_FAILURE([kernel/include/inet.hrl not found - you won't be able to compile the erlang sources]))
AC_ERLANG_CHECK_LIB(stdlib, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS stdlib")
AC_ERLANG_CHECK_LIB(compiler, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS compiler")
AC_ERLANG_CHECK_LIB(crypto, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS crypto")
AC_ERLANG_CHECK_LIB(os_mon, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS os_mon")
AC_ERLANG_CHECK_LIB(tools, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS tools")
AC_ERLANG_CHECK_LIB(inets, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS inets")
AC_ERLANG_CHECK_LIB(ssl, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS ssl")
AC_ERLANG_CHECK_LIB(xmerl, , ERLANG_UNAVAILABLE_LIBS="$ERLANG_UNAVAILABLE_LIBS xmerl")
AS_IF([test "x$ERLANG_UNAVAILABLE_LIBS" != x], AC_MSG_FAILURE([$ERLANG_UNAVAILABLE_LIBS not found - you won't be able to compile or run the erlang sources]))
# libs for optional build tasks:
AC_ERLANG_CHECK_LIB(common_test, , AC_MSG_NOTICE([erlang-common_test not found - you won't be able to run the unit tests without common_test]))
AC_ERLANG_CHECK_LIB(edoc, , AC_MSG_NOTICE([erlang-edoc not found - you won't be able to create the documentation or run 'make install']))
AC_CHECK_FILE($ERLANG_LIB_DIR_common_test/priv/bin/run_test,
[RUN_TEST_FILE=$ERLANG_LIB_DIR_common_test/priv/bin/run_test],
[AC_CHECK_FILE($ac_cv_erlang_root_dir/bin/run_test,
[RUN_TEST_FILE=$ac_cv_erlang_root_dir/bin/run_test],
[AC_PATH_PROG([RUN_TEST_FILE],[run_test],"")])])
AC_CHECK_FILE($ERLANG_LIB_DIR_common_test/priv/bin/ct_run,
[CT_RUN_FILE=$ERLANG_LIB_DIR_common_test/priv/bin/ct_run],
[AC_CHECK_FILE($ac_cv_erlang_root_dir/bin/ct_run,
[CT_RUN_FILE=$ac_cv_erlang_root_dir/bin/ct_run],
[AC_PATH_PROG([CT_RUN_FILE],[ct_run],"")])])
AC_MSG_CHECKING([for unit-test runner])
if test -n "$RUN_TEST_FILE"; then
AC_SUBST(RUN_TEST,"$RUN_TEST_FILE")
AC_MSG_RESULT([$RUN_TEST_FILE])
elif test -n "$CT_RUN_FILE"; then
AC_SUBST(RUN_TEST,"$CT_RUN_FILE")
AC_MSG_RESULT([$CT_RUN_FILE])
else
AC_MSG_RESULT([neither run_test nor ct_run found - on erlang < R14 consider running install.sh in the common_test directory otherwise you won't be able to run the unit tests])
fi
# toke
ERLANG_TOKE_FLAGS=
AS_IF([test "x$TOKEPREFIX" != xno],
[
ERLANG_TOKE_MESSAGE=
AS_IF([test "x$TOKEPREFIX" != x], [export ERL_LIBS="$TOKEPREFIX"])
AC_ERLANG_CHECK_LIB(toke,
[AC_CHECK_FILE($ERLANG_LIB_DIR_toke/priv/libtoke.so,
[ERLANG_TOKE_FLAGS="-pa $ERLANG_LIB_DIR_toke/ebin"],
[ERLANG_TOKE_MESSAGE="toke library libtoke.so not found"])
],
[ERLANG_TOKE_MESSAGE="toke erlang library not found"])
AS_IF([test "x$TOKEPREFIX" != x], [export ERL_LIBS=""])
AS_IF([test "x$ERLANG_TOKE_MESSAGE" != x],
[AS_IF([test "x$ENABLE_TOKE" != xyes],
[ERLANG_TOKE_MESSAGE="$ERLANG_TOKE_MESSAGE, disabling toke support..."
AC_MSG_NOTICE($ERLANG_TOKE_MESSAGE)],
AC_MSG_FAILURE($ERLANG_TOKE_MESSAGE))])
])
AC_SUBST([ERLANG_TOKE_FLAGS])
# hanoidb
ERLANG_HANOIDB_FLAGS=
AS_IF([test "x$HANOIDBPREFIX" != xno],
[
ERLANG_HANOIDB_MESSAGE=
AS_IF([test "x$HANOIDBPREFIX" != x], [export ERL_LIBS="$HANOIDBPREFIX"])
AC_ERLANG_CHECK_LIB(hanoidb,
[ERLANG_HANOIDB_FLAGS="-pa $ERLANG_LIB_DIR_hanoidb/ebin"],
[ERLANG_HANOIDB_MESSAGE="hanoidb erlang not found"])
AS_IF([test "x$HANOIDBPREFIX" != x], [export ERL_LIBS=""])
AS_IF([test "x$ERLANG_HANOIDB_MESSAGE" != x],
[AS_IF([test "x$ENABLE_HANOIDB" != xyes],
[ERLANG_HANOIDB_MESSAGE="$ERLANG_HANOIDB_MESSAGE, disabling hanoidb support..."
AC_MSG_NOTICE($ERLANG_HANOIDB_MESSAGE)],
AC_MSG_FAILURE($ERLANG_HANOIDB_MESSAGE))])
])
AC_SUBST([ERLANG_HANOIDB_FLAGS])
# bitcask
ERLANG_BITCASK_FLAGS=
BITCASK_LIBS=
AS_IF([test "x$BITCASKPREFIX" != xno],
[
ERLANG_BITCASK_MESSAGE=
AS_IF([test "x$BITCASKPREFIX" != x], [export ERL_LIBS="$BITCASKPREFIX"])
AC_ERLANG_CHECK_LIB(bitcask,
[
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_bitcask}"
EDOCMACROS="${EDOCMACROS}, {have_bitcask, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_bitcask"
ERLANG_BITCASK_FLAGS="-pa $ERLANG_LIB_DIR_bitcask/ebin"
BITCASK_LIBS="$ERLANG_LIB_DIR_bitcask"
],
[ERLANG_BITCASK_MESSAGE="bitcask erlang not found"])
AS_IF([test "x$BITCASKPREFIX" != x], [export ERL_LIBS=""])
AS_IF([test "x$ERLANG_BITCASK_MESSAGE" != x],
[AS_IF([test "x$ENABLE_BITCASK" != xyes],
[ERLANG_BITCASK_MESSAGE="$ERLANG_BITCASK_MESSAGE, disabling bitcask support..."
AC_MSG_NOTICE($ERLANG_BITCASK_MESSAGE)],
AC_MSG_FAILURE($ERLANG_BITCASK_MESSAGE))])
])
AC_SUBST([ERLANG_BITCASK_FLAGS])
AC_SUBST([BITCASK_LIBS])
# erlang_js
ERLANG_ERLANGJS_FLAGS=
AS_IF([test "x$ERLANGJSPREFIX" != xno],
[
ERLANG_ERLANGJS_MESSAGE=
AS_IF([test "x$ERLANGJSPREFIX" != x], [export ERL_LIBS="$ERLANGJSPREFIX"])
AC_ERLANG_CHECK_LIB(erlang_js,
[AC_CHECK_FILE($ERLANG_LIB_DIR_erlang_js/priv/erlang_js_drv.so,
[ERLANG_ERLANGJS_FLAGS="-pa $ERLANG_LIB_DIR_erlang_js/ebin"],
[ERLANG_ERLANGJS_MESSAGE="erlang_js library erlang_js_drv.so not found"])
],
[ERLANG_ERLANGJS_MESSAGE="erlang_js erlang library not found"])
AS_IF([test "x$ERLANGJSPREFIX" != x], [export ERL_LIBS=""])
AS_IF([test "x$ERLANG_ERLANGJS_MESSAGE" != x],
[AS_IF([test "x$ENABLE_ERLANGJS" != xyes],
[ERLANG_ERLANGJS_MESSAGE="$ERLANG_ERLANGJS_MESSAGE, disabling erlang_js support..."
AC_MSG_NOTICE($ERLANG_ERLANGJS_MESSAGE)],
AC_MSG_FAILURE($ERLANG_ERLANGJS_MESSAGE))])
])
AC_SUBST([ERLANG_ERLANGJS_FLAGS])
crypto_start=`"${ERL}" -noshell -eval 'io:format("~p~n", [[crypto:start()]]), erlang:halt().' | tail -1`
AS_IF([test "${crypto_start}" = "ok"],
[AC_MSG_NOTICE([crypto:start() is available])],
[AC_MSG_FAILURE([cannot start the crypto subsystem])])
crypto_rand_uniform=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(crypto), io:format("~p~n", [[erlang:function_exported(crypto,rand_uniform,2)]]), erlang:halt().' | tail -1`
AS_IF([test "${crypto_rand_uniform}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_crypto_randuniform_support}"
EDOCMACROS="${EDOCMACROS}, {have_crypto_randuniform_support, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_crypto_randuniform_support"
AC_MSG_NOTICE([crypto:rand_uniform/2 is available])],
[AC_MSG_NOTICE([crypto:rand_uniform/2 is not available])])
crypto_hash=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(crypto), io:format("~p~n", [[erlang:function_exported(crypto,hash,2)]]), erlang:halt().' | tail -1`
AS_IF([test "${crypto_hash}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, with_crypto_hash}"
EDOCMACROS="${EDOCMACROS}, {with_crypto_hash, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dwith_crypto_hash"
AC_MSG_NOTICE([crypto:hash/2 is available and usable])],
[AC_MSG_NOTICE([crypto:hash/2 is not available or not usable, falling back to crypto:md5/1 and crypto:sha1/1])])
crypto_bytes_to_integer=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(crypto), io:format("~p~n", [[erlang:function_exported(crypto,bytes_to_integer,1)]]), erlang:halt().' | tail -1`
AS_IF([test "${crypto_bytes_to_integer}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, with_crypto_bytes_to_integer}"
EDOCMACROS="${EDOCMACROS}, {with_crypto_bytes_to_integer, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dwith_crypto_bytes_to_integer"
AC_MSG_NOTICE([crypto:bytes_to_integer/1 is available and usable])],
[AC_MSG_NOTICE([crypto:bytes_to_integer/1 is not available or not usable, falling back to rand:uniform/2])])
ct_line=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(ct_line), io:format("~p~n", [[erlang:function_exported(ct_line,parse_transform,2)]]), erlang:halt().' | tail -1`
AS_IF([test "${ct_line}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_ctline_support}"
EDOCMACROS="${EDOCMACROS}, {have_ctline_support, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_ctline_support"
AC_MSG_NOTICE([ct_line is available])],
[AC_MSG_NOTICE([ct_line is not available])])
rand_module=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(rand), io:format("~p~n", [[erlang:function_exported(rand,uniform,0)]]), erlang:halt().' | tail -1`
AS_IF([test "${rand_module}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, with_rand}"
EDOCMACROS="${EDOCMACROS}, {with_rand, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dwith_rand"
AC_MSG_NOTICE([rand:uniform/0 is available and usable])],
[AC_MSG_NOTICE([rand:uniform/0 is not available or not usable, falling back to random:uniform/0])])
AC_RUN_IFELSE(
[AC_LANG_PROGRAM([-callback init() -> ok.], [ok])],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_callback_support}"
EDOCMACROS="${EDOCMACROS}, {have_callback_support, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_callback_support"
AC_MSG_NOTICE([-callback is available])],
[AC_MSG_NOTICE([-callback is not available])])
maps_module=`"${ERL}" -noshell -eval 'error_logger:tty(false), code:load_file(maps), io:format("~p~n", [[erlang:function_exported(maps,new,0)]]), erlang:halt().' | tail -1`
AS_IF([test "${maps_module}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, with_maps}"
EDOCMACROS="${EDOCMACROS}, {with_maps, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dwith_maps"
AC_MSG_NOTICE([maps are available and seem to be usable])],
[AC_MSG_NOTICE([maps are not available or not usable, falling back to gb_trees])])
# creates forms specifying a minimal erlang module which spezifies a
# type based on dict:dict() and checks if compilation of this module fails
dict_type=`"${ERL}" -noshell -eval 'X = fun(S) -> element(2,erl_parse:parse_form(element(2,erl_scan:string(S)))) end, io:format("~p~n", [[element(1, compile:forms([X("-module(test)."), X("-type test() :: dict:dict().")]))]]), erlang:halt().' 2> /dev/null | tail -1`
AS_IF([test "${dict_type}" = "ok"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, namespaced_dict}"
EDOCMACROS="${EDOCMACROS}, {namespaced_dict, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dnamespaced_dict"
AC_MSG_NOTICE([erlang dict type is defined as dict:dict()])],
[AC_MSG_NOTICE([erlang dict type is defined as dict()])])
###########################################################
#
# check for file:send_file/5 for yaws
#
###########################################################
YAWS_OPTIONS=
HAVE_ERLANG_SENDFILE=false
AC_MSG_CHECKING([for file:sendfile/5])
file_sendfile=`"${ERL}" -noshell -eval 'code:ensure_loaded(file), io:format("~p~n",[[erlang:function_exported(file,sendfile,5)]]), erlang:halt().' | tail -1`
if test "$file_sendfile" = true; then
AS_IF([test $ERTS_MAJOR -gt 5 -o \
'(' $ERTS_MAJOR -eq 5 -a $ERTS_MINOR -gt 9 ')' -o \
'(' $ERTS_MAJOR -eq 5 -a $ERTS_MINOR -eq 9 -a $ERTS_MAINT -ge 1 ')'],
[AC_MSG_RESULT([yes])
HAVE_ERLANG_SENDFILE=true],
[AC_MSG_RESULT([no])])
else
AC_MSG_RESULT([no])
fi
AS_IF([test "$HAVE_ERLANG_SENDFILE" = true],
[YAWS_OPTIONS=", {d, 'HAVE_ERLANG_SENDFILE'}"
YAWS_OPTIONS_DIALYZER=" -DHAVE_ERLANG_SENDFILE"
AC_MSG_NOTICE([using file:sendfile/5 for yaws])],
[YAWS_OPTIONS=""
YAWS_OPTIONS_DIALYZER=""
AC_MSG_NOTICE([using fallback gen_tcp:send/2 for yaws])])
AS_IF([test "${crypto_hash}" = "true"],
[YAWS_OPTIONS="${YAWS_OPTIONS}, {d, 'HAVE_CRYPTO_HASH'}"
YAWS_OPTIONS_DIALYZER="${YAWS_OPTIONS_DIALYZER} -DHAVE_CRYPTO_HASH"])
###########################################################
#
# check for erlang:timestamp/0 for yaws
#
###########################################################
erlang_timestamp=`"${ERL}" -noshell -eval 'io:format("~p~n", [[erlang:function_exported(erlang,timestamp,0)]]), erlang:halt().' | tail -1`
AS_IF([test "${erlang_timestamp}" = "true"],
[AC_MSG_NOTICE([erlang:timestamp() is available])],
[YAWS_OPTIONS="${YAWS_OPTIONS}, {d, 'HAVE_ERLANG_NOW'}"
YAWS_OPTIONS_DIALYZER="${YAWS_OPTIONS_DIALYZER} -DHAVE_ERLANG_NOW"
AC_MSG_NOTICE([erlang:timestamp() is not available])])
###########################################################
#
# check for ssl:getstat/2 for ssl
#
###########################################################
## https://github.com/erlang/otp/commit/84fd2c325c9e38b5ea2307b6133c3d15b33a3241
SSL_GETSTAT=false
ssl_getstat=`"${ERL}" -noshell -eval 'code:ensure_loaded(ssl),io:format("~p~n", [[erlang:function_exported(ssl,getstat,2)]]), erlang:halt().' | tail -1`
AS_IF([test "${ssl_getstat}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_ssl_getstat}"
EDOCMACROS="${EDOCMACROS}, {have_ssl_getstat, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_ssl_getstat"
SSL_GETSTAT=true
AC_MSG_NOTICE([ssl:getstat() is available])],
[AC_MSG_NOTICE([ssl:getstat() is not available])])
###########################################################
#
# check for ssl:handshake/1 for ssl
#
###########################################################
## https://github.com/erlang/otp/commit/8dcfffd4fb8520239b189357e81122d4fdacb42d
SSL_HANDSHAKE=false
ssl_handshake=`"${ERL}" -noshell -eval 'code:ensure_loaded(ssl),io:format("~p~n", [[erlang:function_exported(ssl,handshake,1)]]), erlang:halt().' | tail -1`
AS_IF([test "${ssl_handshake}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_ssl_handshake}"
EDOCMACROS="${EDOCMACROS}, {have_ssl_handshake, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_ssl_handshake"
SSL_HANDSHAKE=true
AC_MSG_NOTICE([ssl:handshake() is available])],
[AC_MSG_NOTICE([ssl:handshake() is not available])])
###########################################################
#
# check for new stacktrace syntax
#
###########################################################
# http://erlang.org/eeps/eep-0047.md
erlang_cv_new_stacktrace=0
AC_LANG_PUSH([Erlang])[]dnl
AC_RUN_IFELSE(
[AC_LANG_PROGRAM([], [dnl
try
5
catch
C:E:Stk ->
Stk
end])],
[erlang_cv_new_stacktrace=true],
[erlang_cv_new_stacktrace=false])
AC_LANG_POP([Erlang])[]dnl
AS_IF([test "${erlang_cv_new_stacktrace}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_new_stacktrace}"
EDOCMACROS="${EDOCMACROS}, {have_new_stacktrace, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_new_stacktrace"
AC_MSG_NOTICE([new stacktrace syntax is available])],
[AC_MSG_NOTICE([new stacktrace syntax is not available])])
###########################################################
#
# check for socket:open/2 since 22.0
#
###########################################################
# https://github.com/erlang/otp/commit/3ca71520bfb664f0ea809ffdf41505936e4d5e90
SOCKET_OPEN=false
socket_open=`"${ERL}" -noshell -eval 'code:ensure_loaded(socket),io:format("~p~n", [[erlang:function_exported(socket,open,2)]]), erlang:halt().' | tail -1`
AS_IF([test "${socket_open}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_socket_open}"
EDOCMACROS="${EDOCMACROS}, {have_socket_open, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_socket_open"
SOCKET_OPEN=true
AC_MSG_NOTICE([socket:open/2 is available])],
[AC_MSG_NOTICE([socket:open/2 is not available])])
###########################################################
#
# check for persistent_term:get/2 since 21.2.
#
###########################################################
# https://github.com/erlang/otp/commit/805748eb668d5562fe17f3172cdae07a86166c3f
PERSISTENT_TERM_GET=false
persistent_term_get=`"${ERL}" -noshell -eval 'code:ensure_loaded(persistent_term),io:format("~p~n", [[erlang:function_exported(persistent_term,get,1)]]), erlang:halt().' | tail -1`
AS_IF([test "${persistent_term_get}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_persistent_term_get}"
EDOCMACROS="${EDOCMACROS}, {have_persistent_term_get, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_persistent_term_get"
PERSISTENT_TERM_GET=true
AC_MSG_NOTICE([persistent_term:get/2 is available])],
[AC_MSG_NOTICE([persistent_term:get/2 is not available])])
###########################################################
#
# check for counters:get/2 since 21.2.
#
###########################################################
# https://github.com/erlang/otp/commit/fefb5d039e87ff7137e78b3d5f2eaf01e498ec4d
COUNTERS_GET=false
counters_get=`"${ERL}" -noshell -eval 'code:ensure_loaded(counters),io:format("~p~n", [[erlang:function_exported(counters,get,2)]]), erlang:halt().' | tail -1`
AS_IF([test "${counters_get}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_counters_get}"
EDOCMACROS="${EDOCMACROS}, {have_counters_get, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_counters_get"
COUNTERS_GET=true
AC_MSG_NOTICE([counters:get/2 is available])],
[AC_MSG_NOTICE([counters:get/2 is not available])])
###########################################################
#
# check for atomics:new/2 since 21.2.
#
###########################################################
# https://github.com/erlang/otp/commit/1315c6457e49595fdd3f91693c0506964416c9f0
ATOMICS_NEW=false
atomics_new=`"${ERL}" -noshell -eval 'code:ensure_loaded(atomics),io:format("~p~n", [[erlang:function_exported(atomics,new,2)]]), erlang:halt().' | tail -1`
AS_IF([test "${atomics_new}" = "true"],
[EMAKEFILEDEFINES="${EMAKEFILEDEFINES}, {d, have_atomics_new}"
EDOCMACROS="${EDOCMACROS}, {have_atomics_new, true}"
DIALYZER_FLAGS="${DIALYZER_FLAGS} -Dhave_atomics_new"
ATOMICS_NEW=true
AC_MSG_NOTICE([atomics:new/2 is available])],
[AC_MSG_NOTICE([atomics:new/2 is not available])])
###########################################################
#
# all defines together...
#
###########################################################
EMAKEFILEDEFINES="${EMAKEFILEDEFINES}"
EDOCMACROS="${EDOCMACROS#, }"
DIALYZER_FLAGS="${DIALYZER_FLAGS## }${YAWS_OPTIONS_DIALYZER}"
AC_SUBST(EMAKEFILEDEFINES)
AC_SUBST(EDOCMACROS)
AC_SUBST(DIALYZER_FLAGS)
AC_SUBST(EMAKEFILECOMPILECOMPAT)
AC_SUBST(YAWS_OPTIONS)
###########################################################
#
# check for routing table type
#
###########################################################
RT=rt_chord
AC_ARG_WITH([rt],
[AS_HELP_STRING([--with-rt[[=RTFILE]]],
[optionally specify the routing table type (default=rt_chord)])],
[if test "$withval"; then
RT="$withval"
fi],
[])
AC_SUBST(RT)
###########################################################
#
# check java-functions, build-classpath availability for java-api/scalaris
#
###########################################################
JAVAFUNCTIONS=
AC_ARG_WITH([java-functions],
[AS_HELP_STRING([--with-java-functions=JAVAFUNCTIONS],
[use the given java-functions script for java-api/scalaris (default is /usr/share/java-utils/java-functions)])],
[with_java_functions=$withval],
[with_java_functions=/usr/share/java-utils/java-functions])
AC_CHECK_FILE($with_java_functions, [JAVAFUNCTIONS=$with_java_functions],
[JAVAFUNCTIONS=$with_java_functions
AC_MSG_WARN([java-functions was not found in "$with_java_functions" (java-api/scalaris may fail)])])
AC_SUBST(JAVAFUNCTIONS)
BUILDCLASSPATH=
AC_ARG_WITH([build-classpath],
[AS_HELP_STRING([--with-build-classpath=BUILDCLASSPATH],
[absolute path of the build-classpath script to use for java-api/scalaris])],
[if test -n "$withval"; then
BUILDCLASSPATH="$withval"
fi],
[AC_PATH_PROG([BUILDCLASSPATH], [build-classpath])])
AC_SUBST(BUILDCLASSPATH)
AS_IF([test ! -x "$BUILDCLASSPATH"],
[AC_MSG_WARN([build-classpath was not found in "$BUILDCLASSPATH" or is not executable (java-api/scalaris may fail)])])
###########################################################
#
# check ruby
#
###########################################################
ENABLERUBYINSTALL=
RUBYSITELIBDIR=
AC_ARG_WITH([ruby-sitelibdir],
[AS_HELP_STRING([--with-ruby-sitelibdir=SITELIBDIR],
[where to install ruby libraries])],
[if test -n "$withval"; then
RUBYSITELIBDIR="$withval"
ENABLERUBYINSTALL="install-ruby"
fi],
[])
AC_SUBST(ENABLERUBYINSTALL)
AC_SUBST(RUBYSITELIBDIR)
###########################################################
#
# check python, python3
#
###########################################################
PYTHON2SITELIBDIR=
ENABLEPYTHON2INSTALL=
AC_CACHE_CHECK([for python 2.x >= 2.6], [ac_cv_path_PYTHON2],
[AC_PATH_PROGS_FEATURE_CHECK([PYTHON2], [python python2],
[[$ac_path_PYTHON2 -V 2>&1 | grep "^Python 2.[6789]" > /dev/null && \
PYTHON2SITELIBDIR=`$ac_path_PYTHON2 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib(0,0,prefix="${prefix}"))' 2>/dev/null` && \
ac_cv_path_PYTHON2=$ac_path_PYTHON2 ac_path_PYTHON2_found=:]],
[AC_MSG_RESULT([not found])])])
AS_IF([test "$ac_cv_path_PYTHON2" != ""],
[PYTHON2=$ac_cv_path_PYTHON2
AC_MSG_CHECKING([for python 2.x sitelibdir])
AC_MSG_RESULT([$PYTHON2SITELIBDIR])
ENABLEPYTHON2INSTALL="install-python"],
[PYTHON2=$FALSE])
AC_SUBST(PYTHON2)
AC_SUBST(PYTHON2SITELIBDIR)
AC_SUBST(ENABLEPYTHON2INSTALL)
PYTHON3SITELIBDIR=
ENABLEPYTHON3INSTALL=
AC_CACHE_CHECK([for python 3.x], [ac_cv_path_PYTHON3],
[AC_PATH_PROGS_FEATURE_CHECK([PYTHON3], [python3 python],
[[$ac_path_PYTHON3 -V 2>&1 | grep "^Python 3." > /dev/null && \
PYTHON3SITELIBDIR=`$ac_path_PYTHON3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib(0,0,prefix="${prefix}"))' 2>/dev/null` && \
ac_cv_path_PYTHON3=$ac_path_PYTHON3 ac_path_PYTHON3_found=:]],
[AC_MSG_RESULT([not found])])])
PYTHON3=
PYTHON3_2TO3=
ENABLEPYTHON3=python3-not-found
ENABLEPYTHON3INSTALL=
AS_IF([test "$ac_cv_path_PYTHON3" != ""],
[PYTHON3=$ac_cv_path_PYTHON3
AC_MSG_CHECKING([for python 3.x sitelibdir])
AC_MSG_RESULT([$PYTHON3SITELIBDIR])
AC_PATH_PROG([PYTHON3_2TO3], [2to3], "")
AS_IF([test -x "$PYTHON3_2TO3"],
[ENABLEPYTHON3="python3-compile"
ENABLEPYTHON3INSTALL="install-python3"],
[AC_MSG_WARN([2to3 not found - you won't be able to build the Python3 API])])],
[PYTHON3=$FALSE])
AC_SUBST(PYTHON3)
AC_SUBST(PYTHON3_2TO3)
AC_SUBST(PYTHON3SITELIBDIR)
AC_SUBST(ENABLEPYTHON3)
AC_SUBST(ENABLEPYTHON3INSTALL)
###########################################################
#
# check MACOSX vs. Linux for flexbisonparse driver
#
###########################################################
SAVECFLAGS=$CFLAGS
CFLAGS="-I$ERLANG_ROOT_DIR/erts-$ERLANG_LIB_VER_erts/include $CFLAGS"
AC_LANG_PUSH([C])
AC_CHECK_HEADER([erl_nif.h], [], [])
AC_LANG_POP([C])
CFLAGS=$SAVECFLAGS
#http://unix.stackexchange.com/questions/35183/how-do-i-identify-which-linux-distro-is-running
LINUXVERSION="unknown linux"
if test -f /etc/SuSE-release ; then
LINUXVERSION=`cat /etc/SuSE-release`
elif test -f /etc/redhat-release ; then
LINUXVERSION=`cat /etc/redhat-release`
elif test -f /etc/fedora-release ; then
LINUXVERSION=`cat /etc/fedora-release`
elif test -f /etc/debian_release ; then
LINUXVERSION=`cat /etc/debian_release`
elif test -f /etc/debian_version ; then
LINUXVERSION=`cat /etc/debian_version`
elif test -f /etc/gentoo-release ; then
LINUXVERSION=`cat /etc/gentoo-release`
elif test -f /etc/arch-release ; then
LINUXVERSION=`uname -a`
fi
OS=""
case `uname -s` in
linux*)
NIFFLAGS="-shared"
DRIVER_OS=LINUX
OS=$LINUXVERSION
ARCHIVECMD="$ac_cv_path_AR rv"
;;
Linux*)
NIFFLAGS="-shared"
DRIVER_OS=LINUX
OS=$LINUXVERSION
ARCHIVECMD="$ac_cv_path_AR rv"
;;
Darwin*)
NIFFLAGS="-flat_namespace -undefined dynamic_lookup"
DRIVER_OS=MACOSX
OS="OSX `sw_vers -productVersion`"
ARCHIVECMD="$ac_cv_path_LIBTOOL -static -o"
;;
darwin*)
NIFFLAGS="-flat_namespace -undefined dynamic_lookup"
DRIVER_OS=MACOSX
OS="OSX `sw_vers -productVersion`"
ARCHIVECMD="$ac_cv_path_LIBTOOL -static -o"
;;
esac
GIT=`command -v git`
STAT=`command -v stat`
SHA1SUM=`command -v sha1sum`
SRC="download"
CONFIGURESTATUS=""
if test "x$GIT" != "x" -a -d .git; then
SRC=`git log --pretty=format:'%h' -n 1 .`
CONFIGURESTATUS=`git status -s configure | cut -d ' ' -f 2`
elif test "x$GIT" != "x"; then
CONFIGURESTATUS=`git hash-object configure`
elif test "x$DRIVER_OS" = "xMACOSX" ; then
# BSD
SIZE=`/usr/bin/stat -f "%z" configure`
CONFIGURESTATUS=`(/usr/bin/printf "blob $SIZE\0" ; /bin/cat configure) | /usr/bin/openssl sha1`
elif test "x$STAT" != "x" -a "x$SHA1SUM" != "x" ; then
CONFIGURESTATUS=`(stat --printf="blob %s\0" configure; cat configure) | sha1sum -b | cut -d " " -f1`
else
CONFIGURESTATUS=""
fi
echo "detected OS is: '$OS' $SRC $CONFIGURESTATUS"
AC_SUBST(DRIVER_OS)
AC_SUBST(NIFFLAGS)
AC_SUBST(ARCHIVECMD)
mkdir -p ~/.yaws 2> /dev/null
mkdir -p python3-api
$SED -e "s|python-api|python3-api|g" \
-e "s|@PYTHONSITELIBDIR@|@PYTHON3SITELIBDIR@|g" \
-e "s|PYTHON2|PYTHON3|g" python-api/scalaris.in > python3-api/scalaris.in
AC_CONFIG_FILES([Emakefile Makefile bin/scalarisctl bin/jsonclient include/rt.hrl cpp-api/Makefile java-api/scalaris java-api/scalaris-java.conf contrib/init.d/scalaris contrib/init.d/scalaris-monitor python-api/scalaris python3-api/scalaris ruby-api/scalaris])
AC_OUTPUT
chmod u+x bin/scalarisctl
chmod u+x bin/jsonclient
chmod u+x java-api/scalaris
chmod u+x python-api/scalaris
chmod u+x python3-api/scalaris
chmod u+x ruby-api/scalaris
chmod u+x contrib/init.d/scalaris
chmod u+x contrib/init.d/scalaris-monitor
echo "Erlang"
if test "x$BITCASK_LIBS" = "x" ; then
echo " Bitcask : no"
else
echo " Bitcask : yes"
fi
if test "x$ERLANG_HANOIDB_FLAGS" = "x" ; then
echo " hanoidb : no"
else
echo " hanoidb : yes"
fi
if test "x$ERLANG_TOKE_FLAGS" = "x" ; then
echo " toke : no"
else
echo " toke : yes"
fi
if test "x$SSL_GETSTAT" = "xfalse" ; then
echo " ssl : no"
else
echo " ssl : yes"
fi
if test "x$enabled_cxx" = "x0" ; then
echo "C++ API : no"
else
echo "C++ API : yes"
fi
if test "x$ENABLEPYTHON2INSTALL" = "xinstall-python" ; then
echo "Python API : yes"
else
echo "Python API : no"
fi
if test "x$ENABLEPYTHON3" = "xpython3-compile" ; then
echo "Python3 API : yes"
else
echo "Python3 API : no"
fi
================================================
FILE: contrib/.gitignore
================================================
/*.pyc
================================================
FILE: contrib/4caast/blueprints/Scalaris-v01.xml
================================================
Scalaris-01-Blueprint
Scalaris-01-Blueprint
Blueprint of Scalaris, a transactional distributed key-value store.
Zuse Institute Berlin
http://www.zib.de
1.1
2012-07-25
true
unresolved
Scalaris-01
Scalaris key-value store
Database
https://code.google.com/p/scalaris/
1
9999
scalaris-01-node-packages
scalaris node binary packages
binaries
http://download.opensuse.org/repositories/home:/scalaris/
================================================
FILE: contrib/4caast/blueprints/Scalaris-v02.xml
================================================
Scalaris-Blueprint
Scalaris-Blueprint
Blueprint of Scalaris, a transactional distributed key-value store.
Zuse Institute Berlin
http://www.zib.de
2
2012-10-22
true
unresolved
metering
de.zib.scalaris.hours_used
Hour
Hours the service is used
de.zib.scalaris.memory_used
MB
MB used
Scalaris
Scalaris key-value store
Database
https://code.google.com/p/scalaris/
1
9999
scalaris-node-packages
scalaris node binary packages
binaries
http://download.opensuse.org/repositories/home:/scalaris/
================================================
FILE: contrib/4caast/blueprints/Scalaris-v03.xml
================================================
Scalaris-Blueprint
Scalaris-Blueprint
Blueprint of Scalaris, a transactional distributed key-value store.
Zuse Institute Berlin
http://www.zib.de
3
2013-07-04
true
unresolved
metering
de.zib.scalaris.hours_used
Hour
Hours the service is used
de.zib.scalaris.memory_used
MB
MB used
monitoring
ScalarisNode_CurLatencyAvg
Load average for the last minute
Millisecond
Average latency of transactions at the node
ScalarisService_CurLatencyAvg
Load average for the last minute
Millisecond
Average latency of transactions aggregated over the whole system
ScalarisService_LoadEstimate
Physical memory
Count
Number of overall stored items (estimate)
Scalaris
Scalaris key-value store
Database
https://code.google.com/p/scalaris/
1
9999
scalaris-node-packages
scalaris node binary packages
binaries
http://download.opensuse.org/repositories/home:/scalaris/
================================================
FILE: contrib/4caast/blueprints/WikiOnScalaris-v01.xml
================================================
WikiOnScalaris-01-Blueprint
WikiOnScalaris-01-Blueprint
Blueprint for the "Wiki on Scalaris" application.
Zuse Institute Berlin
http://www.zib.de
1.1
2012-07-25
true
unresolved
WikiOnScalaris-01
Wiki on Scalaris
PaaS
http://localhost:8080/scalaris-wiki/
1
9999
WikiOnScalaris-01-war
scalaris-wiki.war
war-file
https://svn.forge.morfeo-project.org/4caast/trunk/WP6/datastore/demo/scalaris-wiki.war
WikiOnScalaris-01-ServletContainer
servlet container v2.5
Servlet Container v2.5
1
9999
ServletContainer.constraints
WikiOnScalaris-01-Scalaris
Running Scalaris node
Scalaris node
1
9999
WikiOnScalaris-01-war
WikiOnScalaris-01-ServletContainer
WikiOnScalaris-01-war
WikiOnScalaris-01-Scalaris
================================================
FILE: contrib/4caast/blueprints/WikiOnScalaris-v02.xml
================================================
WikiOnScalaris-Blueprint
WikiOnScalaris-Blueprint
Blueprint for the "Wiki on Scalaris" application.
Zuse Institute Berlin
http://www.zib.de
2
2012-10-22
true
unresolved
metering
de.zib.scalaris.examples.wikipedia.pages_viewed
Invocation
Pages viewed
WikiOnScalaris
Wiki on Scalaris
PaaS
http://localhost:8080/scalaris-wiki/
1
9999
WikiOnScalaris-war
scalaris-wiki.war
war-file
https://svn.forge.morfeo-project.org/4caast/trunk/WP6/datastore/demo/scalaris-wiki.war
WikiOnScalaris-ServletContainer
servlet container v2.5
Servlet Container v2.5
1
9999
ServletContainer.constraints
WikiOnScalaris-Scalaris
Running Scalaris node
Scalaris node
1
9999
WikiOnScalaris-war
WikiOnScalaris-ServletContainer
WikiOnScalaris-war
WikiOnScalaris-Scalaris
================================================
FILE: contrib/4caast/blueprints/WikiOnScalaris-v03.xml
================================================
WikiOnScalaris-Blueprint
WikiOnScalaris-Blueprint
Blueprint for the "Wiki on Scalaris" application.
Zuse Institute Berlin
http://www.zib.de
3
2013-07-04
true
unresolved
metering
de.zib.scalaris.examples.wikipedia.pages_viewed
Invocation
Pages viewed
monitoring
WikiOnScalaris_CurDbTime
Load average for the last minute
Millisecond
Time spent in DB while serving the last request
WikiOnScalaris_CurRenderTime
Load average for the last minute
Millisecond
Time spent for rendering the page to HTML while serving the last request (without DB time)
WikiOnScalaris_CurServerTime
Load average for the last minute
Millisecond
Time spent in server code while serving the last request (total time for the request on server side)
WikiOnScalaris
Wiki on Scalaris
PaaS
http://localhost:8080/scalaris-wiki/
1
9999
WikiOnScalaris-war
scalaris-wiki.war
war-file
https://svn.forge.morfeo-project.org/4caast/trunk/WP6/datastore/demo/scalaris-wiki.war
WikiOnScalaris-ServletContainer
servlet container v2.5
Servlet Container v2.5
1
9999
ServletContainer.constraints
WikiOnScalaris-Scalaris
Running Scalaris node
Scalaris node
1
9999
WikiOnScalaris-war
WikiOnScalaris-ServletContainer
WikiOnScalaris-war
WikiOnScalaris-Scalaris
================================================
FILE: contrib/4caast/monitoring/README
================================================
=== How to use JASMINe monitoring probes with Scalaris ===
1) configure, build, run Scalaris
cd
./configure && make && ./bin/firstnode.sh
2) start the JMX wrapper (reads monitoring values from Scalaris and exposes these via JMX):
cd java-api
./scalaris --jvmopts "-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=14193 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" -jmx firstnode@localhost
=== How to use JASMINe monitoring probes with "Wiki on Scalaris" ===
1) build Wiki on Scalaris
cd /contrib/wikipedia/
ant
2) start the Tomcat server with specific JMX port:
ant run -Dscalaris.node="node1@localhost" -Dscalaris.cookie="chocolate chip cookie" -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=14192 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
=== Setup JASMINe monitoring probes ===
3) download, extract, configure JASMINe probe standalone
wget http://download.forge.objectweb.org/jasmine/jasmine-probe-standalone-1.1.1.zip
unzip jasmine-probe-standalone-1.1.1.zip
3a)
cp /contrib/4caast/probe-config.xml jasmine-probe-standalone-1.1.1/conf/probe-config.xml
3b)
cp /contrib/4caast/probe-config.wiki.xml jasmine-probe-standalone-1.1.1/conf/probe-config.xml
4) run JASMINe probe standalone
cd jasmine-probe-standalone-1.1.1
export JPROBE_ROOT=$PWD
./jasmine-probe.sh start
5) stop JASMINe probe standalone when finished
./jasmine-probe.sh stop
================================================
FILE: contrib/4caast/monitoring/probe-config.wiki.xml
================================================
stdio
log1
WikiOnScalaris_CurDbTime
WikiOnScalaris_CurRenderTime
WikiOnScalaris_CurServerTime
================================================
FILE: contrib/4caast/monitoring/probe-config.xml
================================================
stdio
log1
ScalarisNode_CurLatencyAvg
ScalarisNode_CurLatencyStddev
ScalarisService_CurLatencyAvg
ScalarisService_CurLatencyStddev
ScalarisService_LoadEstimate
================================================
FILE: contrib/benchmark/bench_tt
================================================
#!/bin/bash
#######################################
#PBS -N [% name %]_[% server %]_4_de
#PBS -l nodes=[% server %]:ppn=4
#PBS -l walltime=8:00:00
#PBS -q gbe
#PBS -M hennig@zib.de
#init
source /etc/profile
source $HOME/.bashrc
#echo "running on $HOSTNAME"
UUID=`uuidgen`
SERVER=[% server %]
RESULT_DIR=[% resdir %]
ITERATIONS_PER_SERVER=20000
START_TIME=`date +%m%d%y%H%M%S`
cp -r [% scalaris %] ~/$START_TIME-$SERVER-$UUID
WORKING_DIR=~/$START_TIME-$SERVER-$UUID/bin
cd $WORKING_DIR
LOG_FILE="bench_log_de-$SERVER-$START_TIME"
LOG_FILE_CLEAN="bench_sum_de-$SERVER-$START_TIME"
#HOSTS="localhost"
HOSTS=`cat $PBS_NODEFILE | sort -u`
for host in $HOSTS
do
ssh $host "killall -9 bench_master.sh"
ssh $host "killall -9 bench_slave.sh"
ssh $host "killall -9 beam.smp "
done
VMS_PER_SERVER_LIST="1 2 4"
CLIENTS_PER_SERVER_LIST="1 2 5 10 50 100 200"
CSNODES_PER_SERVER_LIST="4 16 32"
date
for CLIENTS_PER_SERVER in $CLIENTS_PER_SERVER_LIST
do
for VMS_PER_SERVER in $VMS_PER_SERVER_LIST
do
for CSNODES_PER_SERVER in $CSNODES_PER_SERVER_LIST
do
NODES_VM=$((CSNODES_PER_SERVER/VMS_PER_SERVER))
CLIENTS_PER_VM=$((CLIENTS_PER_SERVER/VMS_PER_SERVER))
ITERATIONS_PER_CLIENT=$((ITERATIONS_PER_SERVER/(CLIENTS_PER_SERVER)))
#ITERATION=$((ITERATIONS/(VMS_PER_SERVER*SERVER)))
if [ $NODES_VM -gt 0 ]; then
if [ $CLIENTS_PER_VM -gt 0 ]; then
i=0
RING_SIZE=$((SERVER*VMS_PER_SERVER*NODES_VM))
echo "######################"
echo "RS $RING_SIZE VPS $VMS_PER_SERVER NPS $CSNODES_PER_SERVER NPV $NODES_VM C: $CLIENTS_PER_SERVER IT: $ITERATIONS_PER_CLIENT"
for host in $HOSTS
do
for vm in `seq 1 $VMS_PER_SERVER`
do
i=$((i+1))
case "$i" in
1 ) BOOTIP=`/sbin/ifconfig eth1 | grep inet\ | awk '{ print $2 }' | cut -c 6- | sed 's/\./,/g'`
cd $WORKING_DIR
[% IF cl == 'tcp' %]
echo "{boot_host,{{$BOOTIP},14195,boot}}." > scalaris.local.cfg
echo "{log_host,{{$BOOTIP},14195,boot_logger}}." >> scalaris.local.cfg
[% ELSE %]
echo "{boot_host, {boot,'boot@$host.1001.zib.de'}}." > scalaris.local.cfg
echo "{log_host,{boot_logger,'boot@$host.1001.zib.de'}}." >> scalaris.local.cfg
[% END %]
echo "####################################################################################" >> $LOG_FILE
echo "SV: $SERVER RS $RING_SIZE VPS $VMS_PER_SERVER NPS $CSNODES_PER_SERVER NPV $NODES_VM C: $CLIENTS_PER_SERVER IT: $ITERATIONS_PER_CLIENT" >> $LOG_FILE
ssh $host " cd ~/$START_TIME-$SERVER-$UUID/bin ; ./bench_master.sh $NODES_VM $CLIENTS_PER_VM $ITERATIONS_PER_CLIENT $RING_SIZE >> $LOG_FILE" &
BOOTPID=$!
;;
* ) ssh $host "cd ~/$START_TIME-$SERVER-$UUID/bin ; ./bench_slave.sh $NODES_VM $i >> log_$host-$i" & ;;
esac
done
done
eval "sleep 1000 ; kill $BOOTPID " &
wait $BOOTPID
if [ $? -eq 143 ]; then
echo "WARNING bench_master.sh reached timeout of 1000 secs "
fi
killall sleep
sleep 1
for host in $HOSTS
do
ssh $host "killall -9 bench_master.sh"
ssh $host "killall -9 bench_slave.sh "
ssh $host "killall beam.smp "
ssh $host "killall epmd"
done
sleep 5
fi
fi
done
done
done
cat $LOG_FILE | egrep 1\/s\|NPV | awk '{ if($1 == "SV:") { b = $0; x=1} if($1 == "1/s:") { b = b " " $0; x++}if($1 == "1/s:") { b = b " " $0; x++}if(x==3) print b}' | sort -r -n -k 16 > $LOG_FILE_CLEAN
echo "Best config for your System:"
head -n1 $LOG_FILE_CLEAN
cp $LOG_FILE $RESULT_DIR
cp $LOG_FILE_CLEAN $RESULT_DIR
rm -rf ~/$START_TIME-$SERVER-$UUID
date
#XPBS -o testjob.out
================================================
FILE: contrib/benchmark/clean.sh
================================================
LOG_FILE=$1
LOG_FILE_CLEAN=`echo $1 | sed 's/log/sum/g'`
cat $LOG_FILE | egrep 1\/s\|NPV | xargs -n 18 | sort -r -n -k 16 > $LOG_FILE_CLEAN
================================================
FILE: contrib/benchmark/cluster_run.pl
================================================
#!/usr/bin/perl
if(@ARGV < 3) {
print "usage: $0 [revision|HEAD] [tcp] Projectname \n";
exit;
}
$rev = $ARGV[0];
$cl = $ARGV[1];
$name = $ARGV[2]."-".$cl."-".$rev."-".`date +%m%d%y%H%M%S`;
chomp($name);
use Template;
my @Servers = (1,2,5,10,20);
my $resdir = `pwd`;
chomp($resdir);
$resdir.="/$name";
system "mkdir $resdir";
system "git clone https://github.com/scalaris-team/scalaris.git $resdir/scalaris-read-only && cd $resdir/scalaris-read-only/ && git checkout $rev";
#build scalairs
system "cd $resdir/scalaris-read-only/ ; ./configure";
system "cd $resdir/scalaris-read-only/ ; make";
system "cd $resdir/scalaris-read-only/bin ; chmod u+x bench_master.sh ; chmod u+x bench_slave.sh " ;
my $runfile= $resdir."/qsub.sh";
open(RUNFILE,">$runfile");
$resdir =~ s/NFS3/NFS4/g ;
foreach my $s (@Servers) {
my $tt = Template->new;
$tt->process('bench_tt', { server => $s , resdir => $resdir, cl => $cl , scalaris => $resdir."/scalaris-read-only/" , name => $ARGV[2]."-".$cl."-".$rev }, $name."/bench_".$s."_run")
|| die $tt->error;
print(RUNFILE "qsub bench_".$s."_run\n");
}
================================================
FILE: contrib/benchmark/latex.rb
================================================
#!/usr/bin/ruby
require 'erb'
require 'set'
class Run
attr_reader :servers
attr_reader :vms_per_server
attr_reader :nodes_per_server
attr_reader :clients_per_server
attr_reader :iterations_per_server
attr_reader :reads
attr_reader :increments
def initialize(servers, vms_per_server, nodes_per_server, clients_per_server,
iterations_per_server, reads, increments)
@servers = servers
@vms_per_server = vms_per_server
@nodes_per_server = nodes_per_server
@clients_per_server = clients_per_server
@iterations_per_server = iterations_per_server
@reads = reads
@increments = increments
end
def to_gnuplot
"#{servers} #{vms_per_server} #{nodes_per_server} #{clients_per_server} #{iterations_per_server} #{reads} #{increments}"
end
end
class ServerGroup
attr_reader :servers
attr_reader :runs
def initialize(servers)
@servers = servers.to_i
@runs = Set.new
end
def add(run)
@runs.add(run)
end
def top_read(count)
sorted_runs = @runs.sort {|x,y| y.reads <=> x.reads}
sorted_runs[0, count]
end
def top_increment(count)
sorted_runs = @runs.sort {|x,y| y.increments <=> x.increments}
sorted_runs[0, count]
end
def <=>(other)
@servers <=> other.servers
end
end
if ARGV.length != 1
puts "latex.rb "
exit
end
fn = ARGV[0]
servers = Set.new
runs = Set.new
IO.foreach(fn) {|line|
elements = line.split(' ')
server_count = elements[1].to_i
clients_per_server = elements[11].to_i
iterations_per_server = elements[13].to_f * clients_per_server
reads = elements[17].to_f
increments = elements[15].to_f
if server_count > 100
puts "#{elements[1]} #{elements[11]}"
puts line
end
servers.add(server_count)
runs.add(Run.new(server_count, elements[5].to_i, elements[7].to_i, clients_per_server,
iterations_per_server, reads, increments))
}
servergroups = Hash.new
servers.each {|server_count|
servergroups[server_count] = ServerGroup.new(server_count)
}
min_server = servers.min
max_server = servers.max
# create groups per server_count
f = File.new("all.data", "w+")
runs.each {|run|
servergroups[run.servers].add(run)
f.puts(run.to_gnuplot)
}
f.close
#top 1
r = File.new("top1read.data", "w+")
w = File.new("top1write.data", "w+")
servers.to_a.sort.each {|server_count|
servergroups[server_count].top_read(1).each {|run|
r.puts(run.to_gnuplot)
}
servergroups[server_count].top_increment(1).each {|run|
w.puts(run.to_gnuplot)
}
}
r.close
w.close
template = File.read('plotall.gnuplot.erb')
eruby = ERB.new(template)
f = File.new("plotall.gnuplot", "w+")
f.puts eruby.result(binding())
f.close
system "gnuplot plotall.gnuplot"
# create gnuplot files
servers.each {|server_count|
f = File.new("#{server_count}.data", "w+")
servergroups[server_count].runs.each {|run|
f.puts(run.to_gnuplot)
}
f.close
template = File.read('plot.gnuplot.erb')
eruby = ERB.new(template)
f = File.new("plot.gnuplot", "w+")
f.puts eruby.result(binding())
f.close
system "gnuplot plot.gnuplot"
}
fn =~ %r{sum-test.run-(\d+)-\d+}
#gitinfo = `git log --pretty=format:'%h' -n 1`
gitinfo = $1
template = File.read('main.tex.erb')
eruby = ERB.new(template)
f = File.new("main.tex", "w+")
f.puts eruby.result(binding())
f.close
system "rm main.toc main.aux main.log"
system "pdflatex main.tex > texlog.txt"
system "pdflatex main.tex >> texlog.txt"
system "mv main.pdf #{fn + '.pdf'}"
puts "wrote results to #{fn + '.pdf'}"
================================================
FILE: contrib/benchmark/main.tex.erb
================================================
\documentclass[11pt]{article}
\usepackage{color,graphicx}
\usepackage{keyval}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usepackage{listings}
\usepackage[pdftex,
colorlinks=true,
%urlcolor=rltblue, % \href{...}{...} external (URL)
citecolor=green,
filecolor=rltgreen, % \href{...} local file
linkcolor=black, % \ref{...} and \pageref{...}
% pagebackref=true,
bookmarksopen=true]{hyperref}
\title{Scalaris Benchmark Report for <%= gitinfo %>}
\begin{document}
\maketitle
\setcounter{tocdepth}{1}
\tableofcontents
\section{All}
\begin{tabular}{cc}
\includegraphics[scale=0.5]{gnuplot/all_reads.pdf} &
\includegraphics[scale=0.5]{gnuplot/all_increments.pdf} \\
\end{tabular}
\begin{tabular}{cc}
\includegraphics[scale=0.5]{gnuplot/top1_reads.pdf} &
\includegraphics[scale=0.5]{gnuplot/top1_increments.pdf} \\
\end{tabular}
<% servergroups.values.sort.each do |servergroup| %>
\section{Servers: <%= servergroup.servers %>}
\subsection{Top 5}
Read
\begin{tabular}{|l|l|l|l|l|l|}
\hline
VMs/ & Nodes/ & Clients/ & Iterations/ & Read/s & Increments/s\\
Server & Server & Server & Server & & \\
\hline
<% servergroup.top_read(5).each {|run| %>
<%= run.vms_per_server %> & <%= run.nodes_per_server %> & <%= run.clients_per_server %> & <%= run.iterations_per_server %> & <%= run.reads %> & <%= run.increments %>\\
\hline
<% } %>
\end{tabular}
Increment
\begin{tabular}{|l|l|l|l|l|l|}
\hline
VMs/ & Nodes/ & Clients/ & Iterations/ & Reads/s & Increments/s\\
Server & Server & Server & Server & & \\
\hline
<% servergroup.top_increment(5).each {|run| %>
<%= run.vms_per_server %> & <%= run.nodes_per_server %> & <%= run.clients_per_server %> & <%= run.iterations_per_server %> & <%= run.reads %> & <%= run.increments %>\\
\hline
<% } %>
\end{tabular}
\subsection{Graphs: Read}
\begin{tabular}{cc}
\includegraphics[scale=0.5]{gnuplot/<%= servergroup.servers %>_over_clients_reads.pdf} &
\includegraphics[scale=0.5]{gnuplot/<%= servergroup.servers %>_over_iterations_reads.pdf} \\
\includegraphics[scale=0.5]{gnuplot/<%= servergroup.servers %>_over_nodes_reads.pdf} &
\includegraphics[scale=0.5]{gnuplot/<%= servergroup.servers %>_over_vms_reads.pdf} \\
\end{tabular}
\subsection{Graphs: Increments}
\begin{tabular}{cc}
\includegraphics[scale=0.5]{gnuplot/<%= servergroup.servers %>_over_clients_increments.pdf} &
\includegraphics[scale=0.5]{gnuplot/<%= servergroup.servers %>_over_iterations_increments.pdf} \\
\includegraphics[scale=0.5]{gnuplot/<%= servergroup.servers %>_over_nodes_increments.pdf} &
\includegraphics[scale=0.5]{gnuplot/<%= servergroup.servers %>_over_vms_increments.pdf} \\
\end{tabular}
<% end%>
\end{document}
================================================
FILE: contrib/benchmark/plot.gnuplot.erb
================================================
set terminal pdf
set output "gnuplot/<%= server_count %>_over_vms_reads.pdf"
set xlabel "VMs/server"
set ylabel "reads/s"
plot "<%= server_count %>.data" using 2:6
set output "gnuplot/<%= server_count %>_over_nodes_reads.pdf"
set xlabel "Nodes/server"
set ylabel "reads/s"
plot "<%= server_count %>.data" using 3:6
set output "gnuplot/<%= server_count %>_over_clients_reads.pdf"
set xlabel "Clients/server"
set ylabel "reads/s"
plot "<%= server_count %>.data" using 4:6
set output "gnuplot/<%= server_count %>_over_iterations_reads.pdf"
set xlabel "iterations/server"
set ylabel "reads/s"
plot "<%= server_count %>.data" using 5:6
set output "gnuplot/<%= server_count %>_over_vms_increments.pdf"
set xlabel "VMs/server"
set ylabel "increments/s"
plot "<%= server_count %>.data" using 2:7
set output "gnuplot/<%= server_count %>_over_nodes_increments.pdf"
set xlabel "Nodes/server"
set ylabel "increments/s"
plot "<%= server_count %>.data" using 3:7
set output "gnuplot/<%= server_count %>_over_clients_increments.pdf"
set xlabel "Clients/server"
set ylabel "increments/s"
plot "<%= server_count %>.data" using 4:7
set output "gnuplot/<%= server_count %>_over_iterations_increments.pdf"
set xlabel "iterations/server"
set ylabel "increments/s"
plot "<%= server_count %>.data" using 5:7
================================================
FILE: contrib/benchmark/plotall.gnuplot.erb
================================================
set terminal pdf
set xrange [<%= min_server - 1%>:<%= max_server + 1%>]
set yrange [0:]
set output "gnuplot/all_reads.pdf"
set xlabel "server"
set ylabel "reads/s"
plot "all.data" using 1:6 title "Reads/s"
set output "gnuplot/all_increments.pdf"
set xlabel "server"
set ylabel "increments/s"
plot "all.data" using 1:7 title "Increments/s"
set output "gnuplot/top1_reads.pdf"
set xlabel "server"
set ylabel "reads/s"
plot "top1read.data" using 1:6 title "Reads/s" with lines
set output "gnuplot/top1_increments.pdf"
set xlabel "server"
set ylabel "increments/s"
plot "top1write.data" using 1:7 title "Increments/s" with lines
================================================
FILE: contrib/benchmark/run_local_bench.sh
================================================
#!/bin/bash
RUN=$1
source $RUN
cd ../../bin/
SERVER=1
START_TIME=`date +%m%d%y%H%m%S`
REV=`git log --pretty=format:'%h' -n 1`
LOG_FILE="../contrib/benchmark/log-$RUN-$REV-$START_TIME"
LOG_FILE_CLEAN="../contrib/benchmark/sum-$RUN-$REV-$START_TIME"
HOSTS="localhost"
date
for CLIENTS_PER_SERVER in $CLIENTS_PER_SERVER_LIST
do
for VMS_PER_SERVER in $VMS_PER_SERVER_LIST
do
for CSNODES_PER_SERVER in $CSNODES_PER_SERVER_LIST
do
NODES_VM=$((CSNODES_PER_SERVER/VMS_PER_SERVER))
CLIENTS_PER_VM=$((CLIENTS_PER_SERVER/VMS_PER_SERVER))
ITERATIONS_PER_CLIENT=$((ITERATIONS_PER_SERVER/(CLIENTS_PER_SERVER)))
#ITERATION=$((ITERATIONS/(VMS_PER_SERVER*SERVER)))
if [ $NODES_VM -gt 0 ]; then
if [ $CLIENTS_PER_VM -gt 0 ]; then
i=0
RING_SIZE=$((SERVER*VMS_PER_SERVER*NODES_VM))
echo "######################"
echo "RS $RING_SIZE VPS $VMS_PER_SERVER NPS $CSNODES_PER_SERVER NPV $NODES_VM C: $CLIENTS_PER_SERVER IT: $ITERATIONS_PER_CLIENT"
for host in $HOSTS
do
for vm in `seq 1 $VMS_PER_SERVER`
do
i=$((i+1))
case "$i" in
1 ) BOOTIP=`/sbin/ifconfig eth0 | grep inet\ | awk '{ print $2 }' | cut -c 6- | sed 's/\./,/g'`
echo "{boot_host, {{$BOOTIP},14195,boot}}." > scalaris.local.cfg
echo "{log_host,{{$BOOTIP},14195,boot_logger}}." >> scalaris.local.cfg
echo "####################################################################################" >> $LOG_FILE
echo "SV: $SERVER RS $RING_SIZE VPS $VMS_PER_SERVER NPS $CSNODES_PER_SERVER NPV $NODES_VM C: $CLIENTS_PER_SERVER IT: $ITERATIONS_PER_CLIENT" >> $LOG_FILE
./bench_master.sh $NODES_VM $CLIENTS_PER_VM $ITERATIONS_PER_CLIENT $RING_SIZE >> $LOG_FILE &
BOOTPID=$!
;;
* ) ./bench_slave.sh $NODES_VM $i >> log_$host-$i & ;;
esac
done
done
wait $BOOTPID
killall -9 bench_slave.sh
killall -9 beam.smp
sleep 1
fi
fi
done
done
done
cat $LOG_FILE | egrep 1\/s\|NPV | awk '{ if($1 == "SV:") { b = $0; x=1} if($1 == "1/s:") { b = b " " $0; x++}if($1 == "1/s:") { b = b " " $0; x++}if(x==3) print b}' | sort -r -n -k 16 > $LOG_FILE_CLEAN
echo "Best config for your System:"
head -n1 $LOG_FILE_CLEAN
date
================================================
FILE: contrib/benchmark/simple.run
================================================
ITERATIONS_PER_SERVER=5000
VMS_PER_SERVER_LIST="1 2"
CLIENTS_PER_SERVER_LIST="1 4 8 16 32 64"
CSNODES_PER_SERVER_LIST="1 2 3 5 8 10 32"
================================================
FILE: contrib/chef/apt/README.md
================================================
Description
===========
Configures various APT components on Debian-like systems. Also includes a LWRP.
Recipes
=======
default
-------
The default recipe runs apt-get update during the Compile Phase of the Chef run to ensure that the system's package cache is updated with the latest. It is recommended that this recipe appear first in a node's run list (directly or through a role) to ensure that when installing packages, Chef will be able to download the latest version available on the remote APT repository.
This recipe also sets up a local cache directory for preseeding packages.
cacher
------
Installs the apt-cacher package and service so the system can provide APT caching. You can check the usage report at http://{hostname}:3142/report. The cacher recipe includes the `cacher-client` recipe, so it helps seed itself.
cacher-client
-------------
Configures the node to use the apt-cacher server as a client.
Resources/Providers
===================
This LWRP provides an easy way to manage additional APT repositories.
# Actions
- :add: creates a repository file and builds the repository listing
- :remove: removes the repository file
# Attribute Parameters
- repo_name: name attribute. The name of the channel to discover
- uri: the base of the Debian distribution
- distribution: this is usually your release's codename...ie something like `karmic`, `lucid` or `maverick`
- components: package groupings..when it doubt use `main`
- deb_src: whether or not to add the repository as a source repo as well
- key_server: the GPG keyserver where the key for the repo should be retrieved
- key: if a `key_server` is provided, this is assumed to be the fingerprint, otherwise it is the URI to the GPG key for the repo
# Example
# add the Zenoss repo
apt_repository "zenoss" do
uri "http://dev.zenoss.org/deb"
components ["main","stable"]
action :add
end
# add the Nginx PPA; grab key from keyserver
apt_repository "nginx-php" do
uri "http://ppa.launchpad.net/nginx/php5/ubuntu"
distribution node['lsb']['codename']
components ["main"]
keyserver "keyserver.ubuntu.com"
key "C300EE8C"
action :add
end
# add the Cloudkick Repo
apt_repository "cloudkick" do
uri "http://packages.cloudkick.com/ubuntu"
distribution node['lsb']['codename']
components ["main"]
key "http://packages.cloudkick.com/cloudkick.packages.key"
action :add
end
# remove Zenoss repo
apt_repository "zenoss" do
action :remove
end
Usage
=====
Put `recipe[apt]` first in the run list. If you have other recipes that you want to use to configure how apt behaves, like new sources, notify the execute resource to run, e.g.:
template "/etc/apt/sources.list.d/my_apt_sources.list" do
notifies :run, resources(:execute => "apt-get update"), :immediately
end
The above will run during execution phase since it is a normal template resource, and should appear before other package resources that need the sources in the template.
Put `recipe[apt::cacher]` in the run_list for a server to provide APT caching and add `recipe[apt::cacher-client]` on the rest of the Debian-based nodes to take advantage of the caching server.
License and Author
==================
Author:: Joshua Timberman ()
Author:: Matt Ray ()
Author:: Seth Chisamore ()
Copyright 2009-2011 Opscode, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: contrib/chef/apt/TODO.org
================================================
* remove proxy from /etc/apt/apt.conf if it's listed (from preseed install)
* check contents of /etc/apt/apt.conf.d/01proxy
* investigate apt-cacher-ng
================================================
FILE: contrib/chef/apt/files/default/apt-cacher
================================================
# apt-cacher startup configuration file
# IMPORTANT: check the apt-cacher.conf file before using apt-cacher as daemon.
# set to 1 to start the daemon at boot time
AUTOSTART=1
# extra settings to override the ones in apt-cacher.conf
# EXTRAOPT=" daemon_port=3142 limit=30 "
================================================
FILE: contrib/chef/apt/files/default/apt-cacher.conf
================================================
# This file has been modified by ./apt-proxy-to-apt-cacher
# Some lines may have been appended at the bottom of this file
# This file has been modified by /usr/share/apt-cacher/apt-proxy-to-apt-cacher
# Some lines may have been appended at the bottom of this file
#################################################################
# This is the config file for apt-cacher. On most Debian systems
# you can safely leave the defaults alone.
#################################################################
# cache_dir is used to set the location of the local cache. This can
# become quite large, so make sure it is somewhere with plenty of space.
cache_dir=/var/cache/apt-cacher
# The email address of the administrator is displayed in the info page
# and traffic reports.
admin_email=root@localhost
# For the daemon startup settings please edit the file /etc/default/apt-cacher.
# Daemon port setting, only useful in stand-alone mode. You need to run the
# daemon as root to use privileged ports (<1024).
daemon_port = 3142
# optional settings, user and group to run the daemon as. Make sure they have
# sufficient permissions on the cache and log directories. Comment the settings
# to run apt-cacher as the native user.
group=www-data
user=www-data
# optional setting, binds the listening daemon to one specified IP. Use IP
# ranges for more advanced configuration, see below.
# daemon_addr=localhost
# If your apt-cacher machine is directly exposed to the Internet and you are
# worried about unauthorised machines fetching packages through it, you can
# specify a list of IPv4 addresses which are allowed to use it and another
# list of IPv4 addresses which aren't.
# Localhost (127.0.0.1) is always allowed. Other addresses must be matched
# by allowed_hosts and not by denied_hosts to be permitted to use the cache.
# Setting allowed_hosts to "*" means "allow all".
# Otherwise the format is a comma-separated list containing addresses,
# optionally with masks (like 10.0.0.0/22), or ranges of addresses (two
# addresses separated by a hyphen, no masks, like '192.168.0.3-192.168.0.56').
allowed_hosts=*
denied_hosts=
# And similiarly for IPv6 with allowed_hosts_6 and denied_hosts_6.
# Note that IPv4-mapped IPv6 addresses (::ffff:w.x.y.z) are truncated to
# w.x.y.z and are handled as IPv4.
allowed_hosts_6=fec0::/16
denied_hosts_6=
# This thing can be done by Apache but is much simplier here - limit access to
# Debian mirrors based on server names in the URLs
#allowed_locations=ftp.uni-kl.de,ftp.nerim.net,debian.tu-bs.de
# Apt-cacher can generate usage reports every 24 hours if you set this
# directive to 1. You can view the reports in a web browser by pointing
# to your cache machine with '/apt-cacher/report' on the end, like this:
# http://yourcache.example.com/apt-cacher/report
# Generating reports is very fast even with many thousands of logfile
# lines, so you can safely turn this on without creating much
# additional system load.
generate_reports=1
# Apt-cacher can clean up its cache directory every 24 hours if you set
# this directive to 1. Cleaning the cache can take some time to run
# (generally in the order of a few minutes) and removes all package
# files that are not mentioned in any existing 'Packages' lists. This
# has the effect of deleting packages that have been superseded by an
# updated 'Packages' list.
clean_cache=1
# The directory to use for apt-cacher access and error logs.
# The access log records every request in the format:
# date-time|client ip address|HIT/MISS/EXPIRED|object size|object name
# The error log is slightly more free-form, and is also used for debug
# messages if debug mode is turned on.
# Note that the old 'logfile' and 'errorfile' directives are
# deprecated: if you set them explicitly they will be honoured, but it's
# better to just get rid of them from old config files.
logdir=/var/log/apt-cacher
# apt-cacher can use different methods to decide whether package lists need to
# be updated,
# A) looking at the age of the cached files
# B) getting HTTP header from server and comparing that with cached data. This
# method is more reliable and avoids desynchronisation of data and index files
# but needs to transfer few bytes from the server every time somebody requests
# the files ("apt-get update")
# Set the following value to the maximum age (in hours) for method A or to 0
# for method B
expire_hours=0
# Apt-cacher can pass all its requests to an external http proxy like
# Squid, which could be very useful if you are using an ISP that blocks
# port 80 and requires all web traffic to go through its proxy. The
# format is 'hostname:port', eg: 'proxy.example.com:8080'.
http_proxy=proxy.example.com:8080
# Use of an external proxy can be turned on or off with this flag.
# Value should be either 0 (off) or 1 (on).
use_proxy=0
# External http proxy sometimes need authentication to get full access. The
# format is 'username:password'.
http_proxy_auth=proxyuser:proxypass
# Use of external proxy authentication can be turned on or off with this flag.
# Value should be either 0 (off) or 1 (on).
use_proxy_auth=0
# Rate limiting sets the maximum bandwidth in bytes per second to use
# for fetching packages. Syntax is fully defined in 'man wget'.
# Use 'k' or 'm' to use kilobits or megabits / second: eg, 'limit=25k'.
# Use 0 or a negative value for no rate limiting.
limit=0
# Debug mode makes apt-cacher spew a lot of extra debug junk to the
# error log (whose location is defined with the 'logdir' directive).
# Leave this off unless you need it, or your error log will get very
# big. Acceptable values are 0 or 1.
debug=0
# Adapt the line in the usage info web page to match your server configuration
# example_sources_line=deb http://my.cacher.server:3142/ ftp.au.debian.org/debian unstable main contrib non-free
# Print a 410 (Gone) HTTP message with the specified text when accessed via
# CGI. Useful to tell users to adapt their sources.list files when the
# apt-cacher server is beeing relocated (via apt-get's error messages while
# running "update")
#cgi_advise_to_use = Please use http://cacheserver:3142/ as apt-cacher access URL
#cgi_advise_to_use = Server relocated. To change sources.list, run perl -pe "s,/apt-cacher\??,:3142," -i /etc/apt/sources.list
# Server mapping - this allows to hide real server names behind virtual paths
# that appear in the access URL. This method is known from apt-proxy. This is
# also the only method to use FTP access to the target hosts. The syntax is simple, the part of the beginning to replace, followed by a list of mirror urls, all space separated. Multiple profile are separated by semicolons
# path_map = debian ftp.uni-kl.de/pub/linux/debian ftp2.de.debian.org/debian ; ubuntu archive.ubuntu.com/ubuntu ; security security.debian.org/debian-security ftp2.de.debian.org/debian-security
# Note that you need to specify all target servers in the allowed_locations
# options if you make use of it. Also note that the paths should not overlap
# each other. FTP access method not supported yet, maybe in the future.
# extra setting from apt-proxy configuration
path_map = ubuntu us.archive.ubuntu.com/ubuntu ; ubuntu-security security.ubuntu.com/ubuntu ; debian debian.osuosl.org/debian/ ; security security.debian.org/debian-security
================================================
FILE: contrib/chef/apt/files/default/apt-proxy-v2.conf
================================================
[DEFAULT]
;; All times are in seconds, but you can add a suffix
;; for minutes(m), hours(h) or days(d)
;; commented out address so apt-proxy will listen on all IPs
;; address = 127.0.0.1
port = 9999
cache_dir = /var/cache/apt-proxy
;; Control files (Packages/Sources/Contents) refresh rate
min_refresh_delay = 1s
complete_clientless_downloads = 1
;; Debugging settings.
debug = all:4 db:0
time = 30
passive_ftp = on
;;--------------------------------------------------------------
;; Cache housekeeping
cleanup_freq = 1d
max_age = 120d
max_versions = 3
;;---------------------------------------------------------------
;; Backend servers
;;
;; Place each server in its own [section]
[ubuntu]
; Ubuntu archive
backends =
http://us.archive.ubuntu.com/ubuntu
[ubuntu-security]
; Ubuntu security updates
backends = http://security.ubuntu.com/ubuntu
[debian]
;; Backend servers, in order of preference
backends =
http://debian.osuosl.org/debian/
[security]
;; Debian security archive
backends =
http://security.debian.org/debian-security
http://ftp2.de.debian.org/debian-security
================================================
FILE: contrib/chef/apt/metadata.json
================================================
{
"dependencies": {
},
"name": "apt",
"maintainer_email": "cookbooks@opscode.com",
"attributes": {
},
"license": "Apache 2.0",
"suggestions": {
},
"platforms": {
"debian": ">= 0.0.0",
"ubuntu": ">= 0.0.0"
},
"maintainer": "Opscode, Inc.",
"long_description": "Description\n===========\n\nConfigures various APT components on Debian-like systems. Also includes a LWRP.\n\nRecipes\n=======\n\ndefault\n-------\nThe default recipe runs apt-get update during the Compile Phase of the Chef run to ensure that the system's package cache is updated with the latest. It is recommended that this recipe appear first in a node's run list (directly or through a role) to ensure that when installing packages, Chef will be able to download the latest version available on the remote APT repository.\n\nThis recipe also sets up a local cache directory for preseeding packages.\n\ncacher\n------\nInstalls the apt-cacher package and service so the system can provide APT caching. You can check the usage report at http://{hostname}:3142/report. The cacher recipe includes the `cacher-client` recipe, so it helps seed itself.\n\ncacher-client\n-------------\nConfigures the node to use the apt-cacher server as a client.\n\nResources/Providers\n===================\n\nThis LWRP provides an easy way to manage additional APT repositories.\n\n# Actions\n\n- :add: creates a repository file and builds the repository listing\n- :remove: removes the repository file\n\n# Attribute Parameters\n\n- repo_name: name attribute. The name of the channel to discover\n- uri: the base of the Debian distribution\n- distribution: this is usually your release's codename...ie something like `karmic`, `lucid` or `maverick`\n- components: package groupings..when it doubt use `main`\n- deb_src: whether or not to add the repository as a source repo as well\n- key_server: the GPG keyserver where the key for the repo should be retrieved\n- key: if a `key_server` is provided, this is assumed to be the fingerprint, otherwise it is the URI to the GPG key for the repo\n\n# Example\n\n # add the Zenoss repo\n apt_repository \"zenoss\" do\n uri \"http://dev.zenoss.org/deb\"\n components [\"main\",\"stable\"]\n action :add\n end\n \n # add the Nginx PPA; grab key from keyserver\n apt_repository \"nginx-php\" do\n uri \"http://ppa.launchpad.net/nginx/php5/ubuntu\"\n distribution node['lsb']['codename']\n components [\"main\"]\n keyserver \"keyserver.ubuntu.com\"\n key \"C300EE8C\"\n action :add\n end\n \n # add the Cloudkick Repo\n apt_repository \"cloudkick\" do\n uri \"http://packages.cloudkick.com/ubuntu\"\n distribution node['lsb']['codename']\n components [\"main\"]\n key \"http://packages.cloudkick.com/cloudkick.packages.key\"\n action :add\n end\n \n # remove Zenoss repo\n apt_repository \"zenoss\" do\n action :remove\n end\n \nUsage\n=====\n\nPut `recipe[apt]` first in the run list. If you have other recipes that you want to use to configure how apt behaves, like new sources, notify the execute resource to run, e.g.:\n\n template \"/etc/apt/sources.list.d/my_apt_sources.list\" do\n notifies :run, resources(:execute => \"apt-get update\"), :immediately\n end\n\nThe above will run during execution phase since it is a normal template resource, and should appear before other package resources that need the sources in the template.\n\nPut `recipe[apt::cacher]` in the run_list for a server to provide APT caching and add `recipe[apt::cacher-client]` on the rest of the Debian-based nodes to take advantage of the caching server.\n\nLicense and Author\n==================\n\nAuthor:: Joshua Timberman ()\nAuthor:: Matt Ray ()\nAuthor:: Seth Chisamore ()\n\nCopyright 2009-2011 Opscode, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n",
"version": "1.1.2",
"recommendations": {
},
"recipes": {
"apt": "Runs apt-get update during compile phase and sets up preseed directories",
"apt::cacher-client": "Client for the apt::cacher server",
"apt::cacher": "Set up an APT cache"
},
"groupings": {
},
"conflicting": {
},
"replacing": {
},
"description": "Configures apt and apt services and an LWRP for managing apt repositories",
"providing": {
}
}
================================================
FILE: contrib/chef/apt/metadata.rb
================================================
maintainer "Opscode, Inc."
maintainer_email "cookbooks@opscode.com"
license "Apache 2.0"
description "Configures apt and apt services and an LWRP for managing apt repositories"
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version "1.1.2"
recipe "apt", "Runs apt-get update during compile phase and sets up preseed directories"
recipe "apt::cacher", "Set up an APT cache"
recipe "apt::cacher-client", "Client for the apt::cacher server"
%w{ ubuntu debian }.each do |os|
supports os
end
================================================
FILE: contrib/chef/apt/providers/repository.rb
================================================
#
# Cookbook Name:: apt
# Provider:: repository
#
# Copyright 2010-2011, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
action :add do
unless ::File.exists?("/etc/apt/sources.list.d/#{new_resource.repo_name}-source.list")
Chef::Log.info "Adding #{new_resource.repo_name} repository to /etc/apt/sources.list.d/#{new_resource.repo_name}-source.list"
# add key
if new_resource.keyserver && new_resource.key
execute "install-key #{new_resource.key}" do
command "apt-key adv --keyserver #{new_resource.keyserver} --recv #{new_resource.key}"
action :nothing
end.run_action(:run)
elsif new_resource.key && (new_resource.key =~ /http/)
key_name = new_resource.key.split(/\//).last
remote_file "#{Chef::Config[:file_cache_path]}/#{key_name}" do
source new_resource.key
mode "0644"
action :nothing
end.run_action(:create_if_missing)
execute "install-key #{key_name}" do
command "apt-key add #{Chef::Config[:file_cache_path]}/#{key_name}"
action :nothing
end.run_action(:run)
end
# build our listing
repository = "deb"
repository = "deb-src" if new_resource.deb_src
repository = "# Created by the Chef apt_repository LWRP\n" + repository
repository += " #{new_resource.uri}"
repository += " #{new_resource.distribution}"
new_resource.components.each {|component| repository += " #{component}"}
# write out the file, replace it if it already exists
file "/etc/apt/sources.list.d/#{new_resource.repo_name}-source.list" do
owner "root"
group "root"
mode 0644
content repository + "\n"
action :nothing
end.run_action(:create)
execute "update package index" do
command "apt-get update"
action :nothing
end.run_action(:run)
new_resource.updated_by_last_action(true)
end
end
action :remove do
if ::File.exists?("/etc/apt/sources.list.d/#{new_resource.repo_name}-source.list")
Chef::Log.info "Removing #{new_resource.repo_name} repository from /etc/apt/sources.list.d/"
file "/etc/apt/sources.list.d/#{new_resource.repo_name}-source.list" do
action :delete
end
new_resource.updated_by_last_action(true)
end
end
================================================
FILE: contrib/chef/apt/recipes/cacher-client.rb
================================================
#
# Cookbook Name:: apt
# Recipe:: cacher-client
#
# Copyright 2011, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#remove Acquire::http::Proxy lines from /etc/apt/apt.conf since we use 01proxy
#these are leftover from preseed installs
execute "Remove proxy from /etc/apt/apt.conf" do
command "sed --in-place '/^Acquire::http::Proxy/d' /etc/apt/apt.conf"
only_if "grep Acquire::http::Proxy /etc/apt/apt.conf"
end
servers = search(:node, 'recipes:apt\:\:cacher') || []
if servers.length > 0
Chef::Log.info("apt-cacher server found on #{servers[0]}.")
proxy = "Acquire::http::Proxy \"http://#{servers[0].ipaddress}:3142\";\n"
file "/etc/apt/apt.conf.d/01proxy" do
owner "root"
group "root"
mode "0644"
content proxy
action :create
end
else
Chef::Log.info("No apt-cacher server found.")
file "/etc/apt/apt.conf.d/01proxy" do
action :delete
only_if {File.exists?("/etc/apt/apt.conf.d/01proxy")}
end
end
================================================
FILE: contrib/chef/apt/recipes/cacher.rb
================================================
#
# Cookbook Name:: apt
# Recipe:: cacher
#
# Copyright 2008-2011, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package "apt-cacher" do
action :install
end
service "apt-cacher" do
supports :restart => true, :status => false
action [ :enable, :start ]
end
cookbook_file "/etc/apt-cacher/apt-cacher.conf" do
source "apt-cacher.conf"
owner "root"
group "root"
mode 0644
notifies :restart, resources(:service => "apt-cacher")
end
cookbook_file "/etc/default/apt-cacher" do
source "apt-cacher"
owner "root"
group "root"
mode 0644
notifies :restart, resources(:service => "apt-cacher")
end
#this will help seed the proxy
include_recipe "apt::cacher-client"
================================================
FILE: contrib/chef/apt/recipes/default.rb
================================================
#
# Cookbook Name:: apt
# Recipe:: default
#
# Copyright 2008-2009, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
e = execute "apt-get update" do
action :nothing
end
e.run_action(:run)
%w{/var/cache/local /var/cache/local/preseeding}.each do |dirname|
directory dirname do
owner "root"
group "root"
mode 0755
action :create
end
end
================================================
FILE: contrib/chef/apt/resources/repository.rb
================================================
#
# Cookbook Name:: apt
# Resource:: repository
#
# Copyright 2010-2011, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
actions :add, :remove
#name of the repo, used for source.list filename
attribute :repo_name, :kind_of => String, :name_attribute => true
attribute :uri, :kind_of => String
attribute :distribution, :kind_of => String
attribute :components, :kind_of => Array, :default => []
#whether or not to add the repository as a source repo as well
attribute :deb_src, :default => false
attribute :keyserver, :kind_of => String, :default => nil
attribute :key, :kind_of => String, :default => nil
================================================
FILE: contrib/chef/scalaris_PIC/attributes/default.rb
================================================
#
# Cookbook Name:: scalaris_PIC
# Attributes:: default
#
# Copyright 2012-2013, Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
default[:REC][:PICs][:scalaris_PIC] = [
{:attributes => {
:scalaris_port => 14195,
:scalaris_port_web => 8000,
:scalaris_node => "node@#{node['ipaddress']}",
:scalaris_start_first => true,
:scalaris_start_mgmt_server => true,
:scalaris_mgmt_server => {"ip4" => "#{node['ipaddress']}", "port" => 14195},
:scalaris_known_hosts => [{"ip4" => "#{node['ipaddress']}", "port" => 14195}], # update on deployment to known IP of another node
:scalaris_nodes_per_vm => 1,
:scalaris_max_json_req_size => 1024*1024,
:scalaris_users => [] # [{"user" => "User", "password" => "Password"}], if empty => no restrictions
}
}]
normal[:scalaris_PIC][:kpis] = {
:jmx_url => "service:jmx:rmi:///jndi/rmi://localhost:14193/jmxrmi",
:kpis => {"ScalarisNode_CurLatencyAvg" =>
{:on => "de.zib.scalaris:type=MonitorNode",
:att => "CurLatencyAvg",
:period => 1},
"ScalarisNode_CurLatencyStddev" =>
{:on => "de.zib.scalaris:type=MonitorNode",
:att => "CurLatencyStddev",
:period => 1},
"ScalarisService_CurLatencyAvg" =>
{:on => "de.zib.scalaris:type=MonitorService",
:att => "CurLatencyAvg",
:period => 1},
"ScalarisService_CurLatencyStddev" =>
{:on => "de.zib.scalaris:type=MonitorService",
:att => "CurLatencyStddev",
:period => 1},
"ScalarisService_LoadEstimate" =>
{:on => "de.zib.scalaris:type=MonitorService",
:att => "TotalLoad",
:period => 1}
}
}
default[:REC][:PICs][:JASMINe_Probe][:ACs] = [
{:kpis_name => [
"ScalarisNode_CurLatencyAvg",
"ScalarisNode_CurLatencyStddev",
"ScalarisService_CurLatencyAvg",
"ScalarisService_CurLatencyStddev",
"ScalarisService_LoadEstimate"
],
:pic_cookbook_name => "scalaris_PIC"
}]
#puts "Printing scalaris attributes from attributes file: #{node[:REC][:PICs][:scalaris_PIC][0][:attributes]} "
================================================
FILE: contrib/chef/scalaris_PIC/metadata.rb
================================================
maintainer "Zuse Institute Berlin"
maintainer_email "kruber@zib.de"
license "Apache 2.0"
description "Installs/Configures Scalaris for the 4CaaSt platform"
#long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version "0.0.1"
depends "apt", "= 1.1.2"
%w{ debian ubuntu centos redhat fedora suse }.each do |os|
supports os
end
recipe "scalaris_PIC::Deploy_PIC", "Installs and configures Scalaris"
recipe "scalaris_PIC::Start_PIC", "Starts Scalaris"
recipe "scalaris_PIC::Stop_PIC", "Stops Scalaris"
recipe "scalaris_PIC::Undeploy_PIC", "Undeploys Scalaris"
================================================
FILE: contrib/chef/scalaris_PIC/recipes/Deploy_PIC.rb
================================================
#
# Cookbook Name:: scalaris_PIC
# Recipe:: Deploy_PIC
#
# Copyright 2012, Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
include_recipe "apt"
scalaris_pkgs = ["scalaris", "scalaris-java"]
scalaris_repo_base = "http://download.opensuse.org/repositories/home:/scalaris:/svn/"
# debian ubuntu centos redhat fedora suse
scalaris_repo = value_for_platform(
"debian" => {:default => scalaris_repo_base + "Debian_" + node[:platform_version]},
"ubuntu" => {:default => scalaris_repo_base + "xUbuntu_" + node[:platform_version]},
"centos" => {:default => scalaris_repo_base + "CentOS_" + node[:platform_version]},
"redhat" => {:default => scalaris_repo_base + "RHEL_" + node[:platform_version]},
"fedora" => {:default => scalaris_repo_base + "Fedora_" + node[:platform_version]},
"suse" => {:default => scalaris_repo_base + "openSUSE_" + node[:platform_version]}
)
case node[:platform]
when "debian", "ubuntu"
apt_repository "scalaris-svn" do
action :add
uri scalaris_repo + " ./"
key "http://download.opensuse.org/repositories/home:/scalaris:/svn/openSUSE_Factory/repodata/repomd.xml.key"
end
when "centos", "redhat", "fedora"
execute "create-yum-cache" do
command "yum -q makecache"
action :nothing
end
ruby_block "reload-internal-yum-cache" do
block do
Chef::Provider::Package::Yum::YumCache.instance.reload
end
action :nothing
end
remote_file "/etc/yum.repos.d/home:scalaris:svn.repo" do
source scalaris_repo + "/home:scalaris:svn.repo"
mode "0644"
notifies :run, resources(:execute => "create-yum-cache"), :immediately
notifies :create, resources(:ruby_block => "reload-internal-yum-cache"), :immediately
end
when "suse"
execute "create-zypper-repo" do
command "zypper --gpg-auto-import-keys addrepo --refresh \"" + scalaris_repo + "\" scalaris-svn"
action :run
end
end
scalaris_pkgs.each do |pkg|
package pkg do
action :install
end
end
template "/etc/scalaris/initd.conf" do
source "initd.conf.erb"
owner "scalaris"
group "scalaris"
mode "0644"
variables(
:scalaris_node => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_node]
)
# notifies :restart, resources(:service => "scalaris")
end
template "/etc/scalaris/scalaris.local.cfg" do
source "scalaris.local.cfg.erb"
owner "scalaris"
group "scalaris"
mode "0644"
variables(
:scalaris_port => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_port],
:scalaris_port_web => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_port_web],
:scalaris_start_first => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_start_first],
:scalaris_start_mgmt_server => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_start_mgmt_server],
:scalaris_mgmt_server => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_mgmt_server],
:scalaris_known_hosts => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_known_hosts],
:scalaris_nodes_per_vm => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_nodes_per_vm],
:scalaris_max_json_req_size => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_max_json_req_size],
:scalaris_users => node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_users]
)
# notifies :restart, resources(:service => "scalaris")
end
================================================
FILE: contrib/chef/scalaris_PIC/recipes/Start_PIC.rb
================================================
#
# Cookbook Name:: scalaris_PIC
# Recipe:: Start_PIC
# Note: Start_PIC assumes that Deploy_PIC ahas been executed already...
#
# Copyright 2012, Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
service "scalaris" do
service_name "scalaris"
supports :status => true, :start => true, :stop => true, :restart => true
# TODO: if last node, we have to kill (not stop) the node! - the following check is not really checking that
if node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_start_first] then
stop_command "/etc/init.d/scalaris kill"
end
action [ :enable, :start ]
case node[:platform]
when "ubuntu", "debian"
provider Chef::Provider::Service::Init::Debian
else
provider Chef::Provider::Service::Init
end
end
service "scalaris-monitor" do
service_name "scalaris-monitor"
supports :status => true, :start => true, :stop => true, :restart => true
action [ :enable, :start ]
case node[:platform]
when "ubuntu", "debian"
provider Chef::Provider::Service::Init::Debian
else
provider Chef::Provider::Service::Init
end
end
================================================
FILE: contrib/chef/scalaris_PIC/recipes/Stop_PIC.rb
================================================
#
# Cookbook Name:: scalaris_PIC
# Recipe:: Stop_PIC
#
# Copyright 2012, Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
service "scalaris" do
service_name "scalaris"
supports :status => true, :start => true, :stop => true, :restart => true
# TODO: if last node, we have to kill (not stop) the node! - the following check is not really checking that
if node[:REC][:PICs][:scalaris_PIC][0][:attributes][:scalaris_start_first] then
stop_command "/etc/init.d/scalaris kill"
end
action [ :disable, :stop ]
case node[:platform]
when "ubuntu", "debian"
provider Chef::Provider::Service::Init::Debian
else
provider Chef::Provider::Service::Init
end
end
================================================
FILE: contrib/chef/scalaris_PIC/recipes/Undeploy_PIC.rb
================================================
#
# Cookbook Name:: scalaris_PIC
# Recipe:: Undeploy_PIC
# Note: Undeploy_PIC assumes that Stop_PIC has been executed already...
#
# Copyright 2012, Zuse Institute Berlin
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
include_recipe "apt"
[ "/etc/scalaris/initd.conf", "/etc/scalaris/scalaris.local.cfg"].each do |conffile|
file conffile do
action :delete
end
end
scalaris_pkgs = ["scalaris"]
scalaris_pkgs.each do |pkg|
package pkg do
action [ :purge, :remove ]
end
end
case node[:platform]
when "debian", "ubuntu"
apt_repository "scalaris-svn" do
action :remove
end
when "centos", "redhat", "fedora"
execute "clean-yum-cache" do
command "yum clean all"
action :nothing
end
file "/etc/yum.repos.d/home:scalaris:svn.repo" do
action :delete
notifies :run, resources(:execute => "clean-yum-cache"), :immediately
notifies :create, resources(:ruby_block => "reload-internal-yum-cache"), :immediately
end
when "suse"
execute "remove-zypper-repo" do
command "zypper removerepo scalaris-svn"
action :run
end
end
================================================
FILE: contrib/chef/scalaris_PIC/templates/default/initd.conf.erb
================================================
#!/bin/bash
SCALARIS_NODE="<%=@scalaris_node%>"
SCALARIS_ADDITIONAL_PARAMETERS=""
================================================
FILE: contrib/chef/scalaris_PIC/templates/default/scalaris.local.cfg.erb
================================================
% port(s) for incoming communications, try one in this range
{port, <%=@scalaris_port%>}.
% http web server port for debug interface, JSON interface
{yaws_port, <%=@scalaris_port_web%>}.
{first, <%=@scalaris_start_first%>}.
{start_mgmt_server, <%=@scalaris_start_mgmt_server%>}.
% Insert the appropriate IP-addresses for your setup
% as comma separated integers:
% IP Address, Port, and label of the boot server
{mgmt_server, {{<%=@scalaris_mgmt_server["ip4"].gsub('.', ',')%>},<%=@scalaris_mgmt_server["port"]%>,mgmt_server}}.
% IP Address, Port, and label of a node which is already in the system
{known_hosts, [<%=@scalaris_known_hosts.map {|host| "{{" + host["ip4"].gsub('.', ',') + "}," + host["port"].to_s + ",service_per_vm}"}.join(", ")%>]}.
% how many scalaris nodes per vm
{nodes_per_vm, <%=@scalaris_nodes_per_vm%>}.
% the maximum size of a post request for the JSON-RPC
% (either a number of bytes, or nolimit)
{yaws_max_post_data, <%=@scalaris_max_json_req_size%>}.
% Allows to restrict access to the web debug interface (including the JSON-RPC!).
% Expects a list of {"User", "Password"} tuples.
% Note: This will effectively disable the JSON-RPC including the Python and Ruby
% APIs as they are not prepared to handle authentication yet.
{yaws_auth, [ <% @scalaris_users.each do |usr_pwd| puts "{ \"" + usr_pwd["user"] + "\", \"" + usr_pwd["password"] + "\" }" end -%> ]}.
================================================
FILE: contrib/datanucleus/.gitignore
================================================
*.class
datanucleus.log
*.jar
/bin
# maven
target/
release.properties
# eclipse
*.project
*.metadata
*.tmp
local.properties
.loadpath
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/.classpath
================================================
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/.settings/org.eclipse.core.resources.prefs
================================================
eclipse.preferences.version=1
encoding//src/java=UTF-8
encoding/=UTF-8
encoding/META-INF=UTF-8
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/.settings/org.eclipse.jdt.core.prefs
================================================
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
org.eclipse.jdt.core.formatter.comment.format_header=false
org.eclipse.jdt.core.formatter.comment.format_html=true
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
org.eclipse.jdt.core.formatter.comment.format_line_comments=true
org.eclipse.jdt.core.formatter.comment.format_source_code=true
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
org.eclipse.jdt.core.formatter.comment.line_length=80
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
org.eclipse.jdt.core.formatter.compact_else_if=true
org.eclipse.jdt.core.formatter.continuation_indentation=2
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_empty_lines=false
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
org.eclipse.jdt.core.formatter.indentation.size=4
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.jdt.core.formatter.join_lines_in_comments=true
org.eclipse.jdt.core.formatter.join_wrapped_lines=true
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.jdt.core.formatter.lineSplit=80
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.jdt.core.formatter.tabulation.char=space
org.eclipse.jdt.core.formatter.tabulation.size=4
org.eclipse.jdt.core.formatter.use_on_off_tags=false
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/.settings/org.eclipse.jdt.ui.prefs
================================================
eclipse.preferences.version=1
formatter_profile=_Eclipse [built-in] (Whitspace only)
formatter_settings_version=12
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/.settings/org.eclipse.m2e.core.prefs
================================================
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/License.txt
================================================
/**********************************************************************
Copyright (c) 2013 Orange. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Contributors:
...
**********************************************************************/
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/META-INF/LICENSE.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
Copyright 2008-2008 DataNucleus
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/META-INF/MANIFEST.MF
================================================
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: JSON Plug-in
Bundle-SymbolicName: org.datanucleus.store.scalaris;singleton:=true
Bundle-Version: 3.2.0.release
Bundle-Vendor: com.orange.DataNucleus
Require-Bundle: org.datanucleus;bundle-version="3.2.0.m3"
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/META-INF/NOTICE.txt
================================================
=========================================================================
== NOTICE file corresponding to section 4(d) of the Apache License, ==
== Version 2.0, in this case for the DataNucleus distribution. ==
=========================================================================
===================================================================
This product includes software developed by many individuals,
including the following:
===================================================================
Erik Bengtson
Andy Jefferson
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/maven_git_hook.sh
================================================
#!/bin/bash
# Deploy hook functions to glue maven and svn together
# This should be called by the command "maven deploy".
# scalaris maven repo
url="git@github.com:scalaris-team/scalaris.git"
# maven repo checkout folder
folder="../../../.maven"
checkout () {
# check out if maven folder doesn't exist
# otherwise update
if [ ! -d ${folder} ]; then
echo "checkout ${url} -> ${folder} ..."
git clone --branch gh-pages --single-branch "${url}" "${folder}"
result=$?
else
echo "update ${url} -> ${folder} ..."
cd "${folder}"
git pull
result=$?
cd - >/dev/null
fi
if [ ${result} -eq 0 ]; then
echo "Maven repository has been updated locally."
else
echo "Maven repository couldn't be updated."
exit 1
fi
}
commit () {
# update the remote maven repository
echo -n "Do you want to update the remote maven repository? [y/N] "
read -e answer
if [[ ${answer} == "y" ]]; then
cd "${folder}"
git add maven
git commit
git push
cd - >/dev/null
fi
}
if [[ $1 == "checkout" ]]; then
checkout
elif [[ $1 == "commit" ]]; then
commit
else
echo "Missing an argument."
exit 1
fi
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/mkThirdPartyLicenseFile.sh
================================================
#!/bin/bash -e
mvn license:aggregate-add-third-party -PlicenseReport
cp target/generated-sources/license/THIRD-PARTY.txt Licences-Third-Party.txt
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/plugin.xml
================================================
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/pom.xml
================================================
4.0.0
de.zib.scalaris
0.9.1-SNAPSHOT
datanucleus-store
datanucleus.store.scalaris
"Scalaris" data store plugin for Datanucleus deriving from Datanucleus-json plugin.
The research leading to these results has received funding from the European Union’s Seventh Framework Programme (FP7/2007-2013) under grant agreement n° 258862.
http://www.datanucleus.org
UTF-8
The Apache Software License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0.txt
2012
Orange
scalaris-repo
https://scalaris-team.github.io/scalaris/maven
scalaris
file:../../../.maven/maven
org.datanucleus
datanucleus-core
4.1.0-release
provided
de.zib.scalaris
java-api
[0.7.2,)
org.json
json
20231013
org.erlang.otp
jinterface
[1.5.6-custom,)
src/java
true
src/java
**/plugin.xml
**/*.properties
${basedir}
plugin.xml
${basedir}/META-INF
META-INF
MANIFEST.MF
LICENSE.txt
NOTICE.txt
maven-compiler-plugin
3.1
1.6
1.6
maven-jar-plugin
2.3.2
META-INF/MANIFEST.MF
org.apache.maven.plugins
maven-source-plugin
2.2.1
attach-sources
jar
exec-maven-plugin
org.codehaus.mojo
1.4.0
Check out maven repository from git
install
exec
${skipGit}
maven_git_hook.sh
checkout
Update the scalaris maven repository
deploy
exec
${skipGit}
maven_git_hook.sh
commit
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/src/java/org/datanucleus/store/scalaris/ConnectionFactoryImpl.java
================================================
/**********************************************************************
Copyright (c) 2008 Erik Bengtson and others. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Contributors:
2013 Orange - port to Scalaris key/value store
...
**********************************************************************/
package org.datanucleus.store.scalaris;
import java.util.Map;
import java.util.Properties;
import javax.transaction.xa.XAResource;
import org.datanucleus.ExecutionContext;
import org.datanucleus.exceptions.NucleusDataStoreException;
import org.datanucleus.store.StoreManager;
import org.datanucleus.store.connection.AbstractConnectionFactory;
import org.datanucleus.store.connection.AbstractManagedConnection;
import org.datanucleus.store.connection.ManagedConnection;
import de.zib.scalaris.ConnectionException;
import de.zib.scalaris.ConnectionFactory;
import de.zib.scalaris.ConnectionPool;
/**
* Implementation of a ConnectionFactory for Scalaris.
*/
@SuppressWarnings("rawtypes")
public class ConnectionFactoryImpl extends AbstractConnectionFactory {
/**
* Maximum number of open connections at the same time.
*/
private static final int DEFAULT_MAX_CONNECTIONS = 50;
public static final String PROPERTY_MAX_CONNECTIONS = "scalaris.connection.max";
/**
* Period of time (in ms) which will be waited for a connection
* to get released if maximum number of connections is reached.
*/
private static final int DEFAULT_CONNECTION_TIMEOUT = 200;
public static final String PROPERTY_CONNECTION_TIMEOUT = "scalaris.connection.timeout";
private static int newConnectionTimeout;
/**
* Symbolic Name of property used in persistence-unit configuration file.
* Property value Cookie used for connecting to Scalaris node.
*/
public final static String PROPERTY_SCALARIS_COOKIE = "scalaris.cookie";
/**
* Symbolic Name of property used in persistence-unit configuration file.
* Should be the same as defined in Scalaris server
*/
public final static String PROPERTY_SCALARIS_DEBUG = "scalaris.debug";
/**
* Symbolic Name of property used in persistence-unit configuration file
*
*/
public final static String PROPERTY_SCALARIS_NODE = "scalaris.node";
/**
* Symbolic Name of property used in persistence-unit configuration file
*
*/
public final static String PROPERTY_SCALARIS_CLIENT_NAME = "scalaris.client.name";
/**
* Symbolic Name of property used in persistence-unit configuration file
*
*/
public final static String PROPERTY_SCALARIS_CLIENT_APPENDUUID = "scalaris.client.appendUUID";
private static volatile ConnectionPool connPool = null;
/**
* Constructor.
*
* @param storeMgr
* Store Manager
* @param resourceType
* Type of resource (tx, nontx)
*/
public ConnectionFactoryImpl(final StoreManager storeMgr,
final String resourceType) {
super(storeMgr, resourceType);
initConnectionPool();
}
private void initConnectionPool() {
synchronized(ConnectionFactoryImpl.class) {
if (connPool == null) {
Properties properties = new Properties();
copyProperty(PROPERTY_SCALARIS_NODE, properties, "scalaris.node",
(String) null);
copyProperty(PROPERTY_SCALARIS_COOKIE, properties,
"scalaris.cookie", (String) null);
copyProperty(PROPERTY_SCALARIS_CLIENT_APPENDUUID, properties,
"scalaris.client.appendUUID", true);
ConnectionFactory connectionFactory = new ConnectionFactory(properties);
int maxConnectionNum = getIntProperty(PROPERTY_MAX_CONNECTIONS, DEFAULT_MAX_CONNECTIONS);
newConnectionTimeout = getIntProperty(PROPERTY_CONNECTION_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT);
connPool = new ConnectionPool(connectionFactory, maxConnectionNum);
}
}
}
/**
* Helper for reading a integer property with default value
* @return
*/
int getIntProperty(String propertyName, int defaultValue) {
String stringVal = storeMgr.getStringProperty(propertyName);
return stringVal == null ? defaultValue : Integer.parseInt(stringVal);
}
/**
* Helper for copying setting from Datanucleus to Scalaris
*
* @return
* */
String copyProperty(final String propertyNameFrom,
final Properties propertiesTo, final String propertyNameTo,
final String defaultIfNotSet) {
final String v = storeMgr.getStringProperty(propertyNameFrom);
if (defaultIfNotSet == null && v == null) {
throw new NucleusDataStoreException("Property "
+ propertyNameFrom + " is mandatory");
}
final String ret = v == null ? defaultIfNotSet : v;
propertiesTo.put(propertyNameTo, ret);
return ret;
}
/**
* Helper for copying setting from Datanucleus to Scalaris
*
* @return
* */
boolean copyProperty(final String propertyNameFrom,
final Properties propertiesTo, final String propertyNameTo,
final boolean defaultIfNotSet) {
final boolean ret = storeMgr.getBooleanProperty(propertyNameFrom,
defaultIfNotSet);
if (propertyNameTo != null)
propertiesTo.put(propertyNameTo, ret);
return ret;
}
/**
* Obtain a connection from the Factory. The connection will be enlisted
* within the transaction associated to the ExecutionContext
*
* @param ec
* the pool that is bound the connection during its lifecycle (or
* null)
* @param txnOptions
* Any options for creating the connection
* @return the {@link org.datanucleus.store.connection.ManagedConnection}
*/
public ManagedConnection createManagedConnection(final ExecutionContext ec,
final Map txnOptions) {
return new ManagedConnectionImpl(txnOptions);
}
/**
* Implementation of a ManagedConnection for Scalaris database.
*/
public static class ManagedConnectionImpl extends AbstractManagedConnection {
public ManagedConnectionImpl(final Map optionsl) {
// TODO: handle options?
}
public synchronized Object getConnection() {
try {
if (conn == null) {
conn = connPool.getConnection(newConnectionTimeout);
if (conn == null) {
throw new ConnectionException("Timeout when waiting for a new connection ");
}
}
} catch (ConnectionException e) {
throw new NucleusDataStoreException("Could not create a connection", e);
}
return conn;
}
public XAResource getXAResource() {
return null;
}
public synchronized void close() {
if (conn != null) {
connPool.releaseConnection((de.zib.scalaris.Connection) conn);
conn = null;
}
}
@Override
public boolean closeAfterTransactionEnd() {
// Do NOT close immediately after datanucleus transaction ends,
// since the corresponding scalaris transaction can be still
// active for a short period of time, causing the connection pool
// to release the connection a little bit to early - early enough
// so that this connection could be reused in rare cases in a
// different thread. This causes potentially UnknownExceptions
// since Connection objects are not thread safe.
return false;
}
@Override
public void setCloseOnRelease(boolean closeOnRelease) {
// Because of the override of closeAfterTransactionEnd
// Datanucleus tries to set this to false. But this value
// needs to be true, otherwise close() won't be called and
// the connection pool will never release any connections.
this.closeOnRelease = true;
}
}
}
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/src/java/org/datanucleus/store/scalaris/Localisation.properties
================================================
################################################################################
# Copyright (c) 2009 Erik Bengtson and others. All rights reserved.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Contributions :
# 2011 Andy Jefferson - all but the first two lines
# ...
################################################################################
Scalaris.DatastoreID=Datastore ID not supported for this datastore, but class "{0}" uses it.
Scalaris.Insert.Start=Object "{0}" being inserted into Scalaris with all reachable objects
Scalaris.Insert.ObjectWithIdAlreadyExists=Object "{0}" being inserted has id "{1}" yet an object with this id already exists in the datastore!
Scalaris.Insert.ObjectPersistedWithVersion=Object "{0}" (id="{1}) persisted to Scalaris with version "{2}"
Scalaris.Update.Start=Object "{0}" (id="{1}") being updated in Scalaris (for fields "{2}") with all reachable objects
Scalaris.Delete.Start=Object "{0}" (id="{1}") being deleted from Scalaris with all dependent objects
Scalaris.Delete.ObjectDeleted=Object "{0}" (id="{1}") has been deleted
Scalaris.Fetch.Start=Object "{0}" (id="{1}") being retrieved from Scalaris
Scalaris.ExecutionTime=Execution Time = {0} ms
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/src/java/org/datanucleus/store/scalaris/ScalarisPersistenceHandler.java
================================================
/**********************************************************************
Copyright (c) 2008 Erik Bengtson and others. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Contributors:
2013 Orange - port to Scalaris key/value store
...
**********************************************************************/
package org.datanucleus.store.scalaris;
import java.util.ArrayList;
import java.util.List;
import org.datanucleus.ExecutionContext;
import org.datanucleus.exceptions.NucleusDataStoreException;
import org.datanucleus.exceptions.NucleusException;
import org.datanucleus.exceptions.NucleusObjectNotFoundException;
import org.datanucleus.identity.IdentityUtils;
import org.datanucleus.metadata.AbstractClassMetaData;
import org.datanucleus.state.ObjectProvider;
import org.datanucleus.store.AbstractPersistenceHandler;
import org.datanucleus.store.StoreManager;
import org.datanucleus.store.connection.ManagedConnection;
import org.datanucleus.store.scalaris.fieldmanager.FetchFieldManager;
import org.datanucleus.store.scalaris.fieldmanager.StoreFieldManager;
import org.datanucleus.util.Localiser;
import org.datanucleus.util.NucleusLogger;
import org.json.JSONObject;
import de.zib.scalaris.AbortException;
import de.zib.scalaris.ConnectionException;
import de.zib.scalaris.NotFoundException;
import de.zib.scalaris.Transaction;
import de.zib.scalaris.TransactionSingleOp;
import de.zib.scalaris.UnknownException;
@SuppressWarnings("rawtypes")
public class ScalarisPersistenceHandler extends AbstractPersistenceHandler {
/** Setup localizer for messages. */
static {
Localiser.registerBundle("org.datanucleus.store.scalaris.Localisation",
ScalarisStoreManager.class.getClassLoader());
}
ScalarisPersistenceHandler(StoreManager storeMgr) {
super(storeMgr);
}
public void close() {
// nothing to do
}
/**
* Populates JSONObject with information of the object provider
*
* @param jsonobj
* updated with data from op
* @param op
* data source
* @return primary key as string
*/
private void populateJsonObj(JSONObject jsonobj, ObjectProvider op) {
AbstractClassMetaData acmd = op.getClassMetaData();
int[] fieldNumbers = acmd.getAllMemberPositions();
op.provideFields(fieldNumbers, new StoreFieldManager(op, jsonobj, true));
}
public void insertObject(ObjectProvider op) {
// Check if read-only so update not permitted
assertReadOnlyForUpdateOfObject(op);
ExecutionContext ec = op.getExecutionContext();
Transaction scalarisTransaction = ((ScalarisStoreManager) storeMgr)
.getScalarisTransaction(ec);
boolean dnTransactionStarted = scalarisTransaction != null;
ManagedConnection mConn = null;
try {
if (!dnTransactionStarted) {
mConn = storeMgr.getConnection(ec);
de.zib.scalaris.Connection scalarisConnection =
(de.zib.scalaris.Connection) mConn.getConnection();
scalarisTransaction = new Transaction(scalarisConnection);
}
long startTime = System.currentTimeMillis();
if (NucleusLogger.DATASTORE_PERSIST.isDebugEnabled()) {
NucleusLogger.DATASTORE_PERSIST.debug(Localiser.msg(
"Scalaris.Insert.Start", op.getObjectAsPrintable(),
op.getInternalObjectId()));
}
// prepare object
ScalarisUtils.generatePersistableIdentity(op);
JSONObject jsonobj = new JSONObject();
populateJsonObj(jsonobj, op);
if (NucleusLogger.DATASTORE_NATIVE.isDebugEnabled()) {
NucleusLogger.DATASTORE_NATIVE.debug("POST "
+ jsonobj.toString());
}
// insert object
ScalarisUtils.performScalarisObjectInsert(op, jsonobj, scalarisTransaction);
if (!dnTransactionStarted) {
scalarisTransaction.commit();
}
if (ec.getStatistics() != null) {
// Add to statistics
ec.getStatistics().incrementNumWrites();
ec.getStatistics().incrementInsertCount();
}
if (NucleusLogger.DATASTORE_PERSIST.isDebugEnabled()) {
NucleusLogger.DATASTORE_PERSIST.debug(Localiser.msg(
"Scalaris.ExecutionTime",
(System.currentTimeMillis() - startTime)));
}
} catch (UnknownException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
} catch (ConnectionException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
} catch (AbortException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
} finally {
if (mConn != null) {
mConn.release();
}
}
}
public void updateObject(ObjectProvider op, int[] updatedFieldNumbers) {
// Check if read-only so update not permitted
assertReadOnlyForUpdateOfObject(op);
ExecutionContext ec = op.getExecutionContext();
Transaction scalarisTransaction = ((ScalarisStoreManager) storeMgr)
.getScalarisTransaction(ec);
boolean dnTransactionStarted = scalarisTransaction != null;
ManagedConnection mConn = null;
try {
if (!dnTransactionStarted) {
mConn = storeMgr.getConnection(ec);
de.zib.scalaris.Connection scalarisConnection =
(de.zib.scalaris.Connection) mConn.getConnection();
scalarisTransaction = new Transaction(scalarisConnection);
}
AbstractClassMetaData cmd = op.getClassMetaData();
long startTime = System.currentTimeMillis();
if (NucleusLogger.DATASTORE_PERSIST.isDebugEnabled()) {
StringBuffer fieldStr = new StringBuffer();
for (int i = 0; i < updatedFieldNumbers.length; i++) {
if (i > 0) {
fieldStr.append(",");
}
fieldStr.append(cmd
.getMetaDataForManagedMemberAtAbsolutePosition(
updatedFieldNumbers[i]).getName());
}
NucleusLogger.DATASTORE_PERSIST.debug(Localiser.msg(
"Scalaris.Update.Start", op.getObjectAsPrintable(),
op.getInternalObjectId(), fieldStr.toString()));
}
ScalarisUtils.performScalarisObjectUpdate(op, updatedFieldNumbers, scalarisTransaction);
if (!dnTransactionStarted) {
scalarisTransaction.commit();
}
if (ec.getStatistics() != null) {
// Add to statistics
ec.getStatistics().incrementNumWrites();
ec.getStatistics().incrementUpdateCount();
}
if (NucleusLogger.DATASTORE_PERSIST.isDebugEnabled()) {
NucleusLogger.DATASTORE_PERSIST.debug(Localiser.msg(
"Scalaris.ExecutionTime",
(System.currentTimeMillis() - startTime)));
}
} catch (ConnectionException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
}catch (NotFoundException e) {
// if we have an update we should already have this object stored
throw new NucleusObjectNotFoundException("Could not update object since its original value was not found", e);
} catch (AbortException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
} finally {
if (mConn != null) {
mConn.release();
}
}
}
/**
* Deletes a persistent object from the database. The delete can take place
* in several steps, one delete per table that it is stored in. e.g When
* deleting an object that uses "new-table" inheritance for each level of
* the inheritance tree then will get an DELETE for each table. When
* deleting an object that uses "complete-table" inheritance then will get a
* single DELETE for its table.
*
* @param op
* The ObjectProvider of the object to be deleted.
*
* @throws NucleusDataStoreException
* when an error occurs in the datastore communication
*/
public void deleteObject(ObjectProvider op) {
// Check if read-only so update not permitted
assertReadOnlyForUpdateOfObject(op);
ExecutionContext ec = op.getExecutionContext();
Transaction scalarisTransaction = ((ScalarisStoreManager) storeMgr)
.getScalarisTransaction(ec);
boolean dnTransactionStarted = scalarisTransaction != null;
ManagedConnection mConn = null;
try {
if (!dnTransactionStarted) {
mConn = storeMgr.getConnection(ec);
de.zib.scalaris.Connection scalarisConnection =
(de.zib.scalaris.Connection) mConn.getConnection();
scalarisTransaction = new Transaction(scalarisConnection);
}
long startTime = System.currentTimeMillis();
if (NucleusLogger.DATASTORE_PERSIST.isDebugEnabled()) {
NucleusLogger.DATASTORE_PERSIST.debug(Localiser.msg(
"Scalaris.Delete.Start", op.getObjectAsPrintable(),
op.getInternalObjectId()));
}
ScalarisUtils.performScalarisObjectDelete(op, scalarisTransaction);
if (!dnTransactionStarted) {
scalarisTransaction.commit();
}
if (ec.getStatistics() != null) {
ec.getStatistics().incrementNumWrites();
ec.getStatistics().incrementDeleteCount();
}
if (NucleusLogger.DATASTORE_PERSIST.isDebugEnabled()) {
NucleusLogger.DATASTORE_PERSIST.debug(Localiser.msg(
"Scalaris.ExecutionTime",
(System.currentTimeMillis() - startTime)));
}
} catch (ConnectionException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
} catch (NotFoundException e) {
throw new NucleusObjectNotFoundException(e.getMessage(), e);
} catch (AbortException e) {
throw new NucleusObjectNotFoundException(e.getMessage(), e);
} finally {
if (mConn != null) {
mConn.release();
}
}
}
/**
* Fetches (fields of) a persistent object from the database. This does a
* single SELECT on the candidate of the class in question. Will join to
* inherited tables as appropriate to get values persisted into other
* tables. Can also join to the tables of related objects (1-1, N-1) as
* neccessary to retrieve those objects.
*
* @param op
* Object Provider of the object to be fetched.
* @param memberNumbers
* The numbers of the members to be fetched.
* @throws NucleusObjectNotFoundException
* if the object doesn't exist
* @throws NucleusDataStoreException
* when an error occurs in the datastore communication
*/
public void fetchObject(ObjectProvider op, int[] fieldNumbers) {
ExecutionContext ec = op.getExecutionContext();
Transaction scalarisTransaction = ((ScalarisStoreManager) storeMgr)
.getScalarisTransaction(ec);
final long startTime = System.currentTimeMillis();
try {
JSONObject result;
if (scalarisTransaction != null) {
result = ScalarisUtils.performScalarisObjectFetch(op, scalarisTransaction);
} else {
// non transactional read
ManagedConnection mConn = storeMgr.getConnection(ec);
try {
de.zib.scalaris.Connection scalarisConnection =
(de.zib.scalaris.Connection) mConn.getConnection();
result = ScalarisUtils.performScalarisObjectFetch(op, scalarisConnection);
} finally {
mConn.release();
}
}
if (ScalarisUtils.isDeletedRecord(result)) {
throw new NucleusObjectNotFoundException(
"Record has been deleted");
}
final String declaredClassQName = result.getString("class");
final Class declaredClass = op.getExecutionContext()
.getClassLoaderResolver()
.classForName(declaredClassQName);
final Class> objectClass = op.getObject().getClass();
if (!objectClass.isAssignableFrom(declaredClass)) {
System.out.println("Type found in db not compatible with requested type");
throw new NucleusObjectNotFoundException(
"Type found in db not compatible with requested type");
}
op.replaceFields(fieldNumbers, new FetchFieldManager(op, result));
if (NucleusLogger.DATASTORE_NATIVE.isDebugEnabled()) {
NucleusLogger.DATASTORE_NATIVE
.debug("GET " + result.toString());
}
} catch (NotFoundException e) {
// throwing the NeucleusExpection directly would cause the StateManagerImpl
// to print a warning. This is annoying because all that happened was that
// we couldn't find an object in the store
NucleusException ne = new NucleusObjectNotFoundException(e.getMessage(), e);
throw storeMgr.getApiAdapter().getApiExceptionForNucleusException(ne);
} catch (ConnectionException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
}
if (ec.getStatistics() != null) {
// Add to statistics
ec.getStatistics().incrementNumReads();
ec.getStatistics().incrementFetchCount();
}
if (NucleusLogger.DATASTORE_RETRIEVE.isDebugEnabled()) {
NucleusLogger.DATASTORE_RETRIEVE.debug(Localiser.msg(
"Scalaris.ExecutionTime",
(System.currentTimeMillis() - startTime)));
}
}
/**
* Method to return a persistable object with the specified id. Optional
* operation for StoreManagers. Should return a (at least) hollow
* PersistenceCapable object if the store manager supports the operation. If
* the StoreManager is managing the in-memory object instantiation (as part
* of co-managing the object lifecycle in general), then the StoreManager
* has to create the object during this call (if it is not already created).
* Most relational databases leave the in-memory object instantion to Core,
* but some object databases may manage the in-memory object instantion,
* effectively preventing Core of doing this.
*
* StoreManager implementations may simply return null, indicating that they
* leave the object instantiate to us. Other implementations may instantiate
* the object in question (whether the implementation may trust that the
* object is not already instantiated has still to be determined). If an
* implementation believes that an object with the given ID should exist,
* but in fact does not exist, then the implementation should throw a
* RuntimeException. It should not silently return null in this case.
*
*
* @param ec
* execution context
* @param id
* the id of the object in question.
* @return a persistable object with a valid object state (for example:
* hollow) or null, indicating that the implementation leaves the
* instantiation work to us.
*/
public Object findObject(ExecutionContext ec, Object id) {
return null;
}
/**
* Locates this object in the datastore.
*
* @param op
* ObjectProvider for the object to be found
* @throws NucleusObjectNotFoundException
* if the object doesnt exist
* @throws NucleusDataStoreException
* when an error occurs in the datastore communication
*/
public void locateObject(ObjectProvider op) {
// The implementation of this method did not server an apparent purpose,
// since removing all code here did not result in a test failure.
// But removing it greatly improved (read: doubled in some cases) the speed
// of read operations.
// TODO: What does this method do?
}
/**
* Convenience method to get all objects of the candidate type from the
* specified connection. Objects of subclasses are ignored.
*
* @param ec
* @param mconn
* @param candidateClass
*/
public List getObjectsOfCandidateType(ExecutionContext ec,
Class> candidateClass,AbstractClassMetaData cmd) {
List results = new ArrayList();
String idIndexKey = ScalarisSchemaHandler.getIDIndexKeyName(candidateClass);
ManagedConnection mconn = ec.getStoreManager().getConnection(ec);
de.zib.scalaris.Connection conn = (de.zib.scalaris.Connection) mconn
.getConnection();
Transaction scalarisTransaction = ((ScalarisStoreManager) storeMgr)
.getScalarisTransaction(ec);
boolean dnTransactionStarted = scalarisTransaction != null;
try {
// read the management key
List idIndex;
if (dnTransactionStarted) {
idIndex = scalarisTransaction.read(idIndexKey).stringListValue();
} else {
TransactionSingleOp t = new TransactionSingleOp(conn);
idIndex = t.read(idIndexKey).stringListValue();
}
// retrieve all values from the management key
for (String id : idIndex) {
results.add(IdentityUtils.getObjectFromPersistableIdentity(id, cmd, ec));
}
} catch (NotFoundException e) {
// the management key does not exist which means there
// are no instances of this class stored.
} catch (ConnectionException e) {
throw new NucleusException(e.getMessage(), e);
} catch (UnknownException e) {
throw new NucleusException(e.getMessage(), e);
} finally {
if (mconn != null) {
mconn.release();
}
}
return results;
}
/**
* Returns an object persisted in the store by an unique member value.
* If there is no such object, null is returned
* @param ec
* @param mconn Connection used to connect to the store.
* @param objectClass Class of the object
* @param memberName The (simple) name of the unique member which is used to retrieve
* the object. The object is only correctly returned if the member has an
* '@Unique' annotation.
* @param memberValue Value of the unique member
* @return The persisted object, or null if there is no such object.
*/
public Object getObjectByUniqueMember(ExecutionContext ec,
Class> objectClass, String memberName, String memberValue) {
AbstractClassMetaData cmd = ec.getMetaDataManager()
.getMetaDataForClass(objectClass,
ec.getClassLoaderResolver());
ManagedConnection mconn = ec.getStoreManager().getConnection(ec);
de.zib.scalaris.Connection conn = (de.zib.scalaris.Connection) mconn
.getConnection();
Transaction scalarisTransaction = ((ScalarisStoreManager) storeMgr)
.getScalarisTransaction(ec);
boolean dnTransactionStarted = scalarisTransaction != null;
String uniqueMemberValueKey = ScalarisSchemaHandler.getUniqueMemberKey(
objectClass.getCanonicalName(), memberName, memberValue);
try {
String uniqueObjectId;
if (dnTransactionStarted) {
uniqueObjectId = scalarisTransaction.read(uniqueMemberValueKey).stringValue();
} else {
TransactionSingleOp t = new TransactionSingleOp(conn);
uniqueObjectId = t.read(uniqueMemberValueKey).stringValue();
}
if (!ScalarisUtils.isDeletedRecord(uniqueObjectId)) {
return IdentityUtils.getObjectFromPersistableIdentity(uniqueObjectId, cmd, ec);
}
} catch (ConnectionException e) {
throw new NucleusException(e.getMessage(), e);
} catch (NotFoundException e) {
// there does not exist an object with the unique member value
} catch (UnknownException e) {
throw new NucleusException(e.getMessage(), e);
} finally {
if (mconn != null) {
mconn.release();
}
}
return null;
}
}
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/src/java/org/datanucleus/store/scalaris/ScalarisSchemaHandler.java
================================================
package org.datanucleus.store.scalaris;
import org.datanucleus.store.StoreManager;
import org.datanucleus.store.schema.AbstractStoreSchemaHandler;
public class ScalarisSchemaHandler extends AbstractStoreSchemaHandler {
/**
* Used to signal a key at which all foreign key actions for an object are stored.
*/
private static final String FKA_KEY_SUFFIX = "FKA";
/**
* Used to signal a key at which the IDs of all persisted objects of the same
* class are stored.
*/
private static final String ALL_ID_SUFFIX = "ALL_IDS";
/**
* Key prefix used to signal a key which is used for identity generation.
*/
private static final String ID_GEN_SUFFIX = "ID_GEN";
/**
* Used to signal a key at which the persisted object ID is stored which
* belongs to a given unique member value.
*/
private static final String UNIQUE_MEMBER_SUFFIX = "UNIQUE";
public ScalarisSchemaHandler(StoreManager storeMgr) {
super(storeMgr);
}
/**
* Returns the Scalaris key used to store object with full class name
* objClassName and ID objectId.
* @param objClassName
* The full class name of the object
* @param objectId
* The ID of the object
* @return The Scalaris key
*/
public static String getObjectStorageKey(String objClassName, String objectId) {
if (objectId.startsWith(objClassName)) {
return objectId;
}
return String.format("%s:%s", objClassName, objectId);
}
/**
* Returns the Scalaris key at which the IDs of all persisted
* objects of a given class are stored.
* @param clazz
* The objects class
* @return The Scalaris key
*/
static String getIDIndexKeyName(Class> clazz) {
return getIDIndexKeyName(clazz.getCanonicalName());
}
/**
* Returns the Scalaris key at which the IDs of all persisted
* objects of a given class are stored.
* @param clazz
* The objects class
* @return The Scalaris key
*/
static String getIDIndexKeyName(String className) {
return String.format("%s_%s", className, ALL_ID_SUFFIX);
}
/**
* Returns the Scalaris key used for generating IDs for new object instances
* persisted in the data store.
* @param className
* The full class name of the object the ID will be generated for.
* @return The Scalaris key
*/
static String getIDGeneratorKeyName(String className) {
return String.format("%s_%s", className, ID_GEN_SUFFIX);
}
/**
* Returns the Scalaris key used to store which persisted object
* has stored the given unique value.
* @param className
* Class of the object with the unique member annotation
* @param memberName
* Simple member name which has an 'unique' annotation
* @param memberValue
* The unique value of the member
* @return The Scalaris key
*/
static String getUniqueMemberKey(String className, String memberName, String memberValue) {
return String.format("%s_%s_%s_%s", className, memberName, memberValue, UNIQUE_MEMBER_SUFFIX);
}
/**
* Returns the Scalaris key used to store all foreign key actions
* of the given object.
* @param foreignObjectClass
* Class of the object
* @param foreignObjectId
* ID of the object
* @return The Scalaris key
*/
static String getForeignKeyActionKey(String foreignObjectClass, String foreignObjectId) {
String storageKey = getObjectStorageKey(foreignObjectClass, foreignObjectId);
return String.format("%s_%s", storageKey, FKA_KEY_SUFFIX);
}
}
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/src/java/org/datanucleus/store/scalaris/ScalarisStoreManager.java
================================================
/**********************************************************************
Copyright (c) 2008 Erik Bengtson and others. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Contributors:
2008 Andy Jefferson - abstracted methods up to AbstractStoreManager
2013 Orange - port to Scalaris key/value store
...
**********************************************************************/
package org.datanucleus.store.scalaris;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.datanucleus.ClassLoaderResolver;
import org.datanucleus.ExecutionContext;
import org.datanucleus.PersistenceNucleusContext;
import org.datanucleus.TransactionEventListener;
import org.datanucleus.exceptions.NucleusDataStoreException;
import org.datanucleus.metadata.AbstractClassMetaData;
import org.datanucleus.store.AbstractStoreManager;
import org.datanucleus.store.NucleusConnection;
import org.datanucleus.store.connection.ManagedConnection;
import de.zib.scalaris.AbortException;
import de.zib.scalaris.ConnectionException;
import de.zib.scalaris.Transaction;
public class ScalarisStoreManager extends AbstractStoreManager {
private Map transactionMap;
public ScalarisStoreManager(ClassLoaderResolver clr,
PersistenceNucleusContext ctx, Map props) {
super("scalaris", clr, ctx, props);
transactionMap = Collections.synchronizedMap(
new HashMap());
// Handler for persistence process
persistenceHandler = new ScalarisPersistenceHandler(this);
schemaHandler = new ScalarisSchemaHandler(this);
logConfiguration();
}
public NucleusConnection getNucleusConnection(ExecutionContext om) {
throw new UnsupportedOperationException();
}
@Override
public void transactionStarted(final ExecutionContext ec) {
final org.datanucleus.Transaction dnTransaction = ec.getTransaction();
final ManagedConnection mConn = getConnection(ec);
de.zib.scalaris.Connection conn = (de.zib.scalaris.Connection) mConn
.getConnection();
final Transaction scalarisTransaction = new Transaction(conn);
if (transactionMap.containsKey(dnTransaction)) {
throw new NucleusDataStoreException("Cannot start the same transaction multiple times");
}
transactionMap.put(dnTransaction, scalarisTransaction);
dnTransaction.addTransactionEventListener(new TransactionEventListener() {
/**
* Signal if managed connection was released in pre-commit, preventing
* multiple releases which can lead to undefined behavior.
*/
private boolean connectionIsReleased = false;
public void transactionPreCommit() {
try {
// ensure that all updates operations are executed before commit
ec.flushInternal(true);
scalarisTransaction.commit();
} catch (ConnectionException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
} catch (AbortException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
} finally {
transactionMap.remove(dnTransaction);
if (mConn != null && !connectionIsReleased) {
connectionIsReleased = true;
mConn.release();
}
}
}
public void transactionPreRollBack() {
scalarisTransaction.abort();
transactionMap.remove(dnTransaction);
if (mConn != null && !connectionIsReleased) {
connectionIsReleased = true;
mConn.release();
}
}
// Not implemented because not needed
public void transactionStarted() {}
public void transactionEnded() {}
public void transactionPreFlush() {}
public void transactionFlushed() {}
public void transactionCommitted() {}
public void transactionRolledBack() {}
public void transactionSetSavepoint(String name) {}
public void transactionReleaseSavepoint(String name) {}
public void transactionRollbackToSavepoint(String name) {}
});
}
/**
* Returns the Scalaris transaction which belongs to the
* transaction of the passed ExecutionContext. If its transaction
* is not active, no Scalaris transaction exists, thus returning null
*
* @param ec
* ExecutionContext
* @return The Scalaris transaction or null if ec has no active
* transaction.
*/
public Transaction getScalarisTransaction(ExecutionContext ec) {
return transactionMap.get(ec.getTransaction());
}
/**
* Method defining which value strategy to use when the user specified native strategy
* or no strategy.
*/
@Override
public String getStrategyForNative(AbstractClassMetaData cmd, int absFiledNumber) {
return "uuid-hex";
}
}
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/src/java/org/datanucleus/store/scalaris/ScalarisUtils.java
================================================
package org.datanucleus.store.scalaris;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import org.datanucleus.ExecutionContext;
import org.datanucleus.exceptions.NucleusDataStoreException;
import org.datanucleus.exceptions.NucleusException;
import org.datanucleus.exceptions.NucleusObjectNotFoundException;
import org.datanucleus.exceptions.NucleusUserException;
import org.datanucleus.identity.IdentityUtils;
import org.datanucleus.metadata.AbstractClassMetaData;
import org.datanucleus.metadata.AbstractMemberMetaData;
import org.datanucleus.metadata.ForeignKeyAction;
import org.datanucleus.metadata.ForeignKeyMetaData;
import org.datanucleus.metadata.UniqueMetaData;
import org.datanucleus.state.ObjectProvider;
import org.datanucleus.store.StoreManager;
import org.datanucleus.store.connection.ManagedConnection;
import org.datanucleus.store.scalaris.fieldmanager.StoreFieldManager;
import org.datanucleus.transaction.NucleusTransactionException;
import org.datanucleus.util.NucleusLogger;
import com.ericsson.otp.erlang.OtpErlangLong;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import de.zib.scalaris.AbortException;
import de.zib.scalaris.Connection;
import de.zib.scalaris.ConnectionException;
import de.zib.scalaris.ErlangValue;
import de.zib.scalaris.NotAListException;
import de.zib.scalaris.NotANumberException;
import de.zib.scalaris.NotFoundException;
import de.zib.scalaris.Transaction;
import de.zib.scalaris.TransactionSingleOp;
import de.zib.scalaris.UnknownException;
/**
* This class contains convenience methods to provide functionalities that are not natively supported by
* Scalaris. For example generating identities, managing all primary keys of a class to "iterate" over all stored
* instances, or ensuring uniqueness.
*/
public class ScalarisUtils {
/**
* Placeholder to signal a foreign key action deleting the whole object,
* instead of an element of a collection.
*/
private static final String FKA_DELETE_OBJ = "_DEL_OBJECT";
/**
* Value which will be used to signal a deleted key.
*/
public static final String DELETED_RECORD_VALUE = new JSONObject().toString();
/* **********************************************************************
* ID GENERATION
* **********************************************************************/
/**
* Generate a new ID which can be used to store a value at an unique key.
* Every time this function is called the value stored at key ID_GEN_KEY is
* incremented by one. The value stored there is the value which is returned by
* this function. Every object class has its own ID generator key
*
* @param op
* ObjectProvider of the object this ID is generated for.
* @return A new ID.
*/
private synchronized static long generateNextIdentity(ObjectProvider> op) {
StoreManager storeMgr = op.getExecutionContext().getStoreManager();
ExecutionContext ec = op.getExecutionContext();
String keyName = ScalarisSchemaHandler.getIDGeneratorKeyName(op.getClassMetaData().getFullClassName());
ManagedConnection mConn = storeMgr.getConnection(ec);
de.zib.scalaris.Connection conn = (de.zib.scalaris.Connection) mConn
.getConnection();
long newID = 0l;
Transaction t = new Transaction(conn);
try {
try {
ErlangValue storedVal = t.read(keyName);
newID = storedVal.longValue() + 1l;
t.addOnNr(keyName, new OtpErlangLong(1l));
} catch (NotFoundException e) {
// No ID was generated yet
newID = 1l;
t.write(keyName, newID);
}
t.commit();
} catch (ConnectionException e) {
throw new NucleusTransactionException(
"Could not generate a new ID because of transaction failure",
e);
} catch (AbortException e) {
throw new NucleusTransactionException(
"Could not generate a new ID becasue of transaction failure",
e);
} catch (NotANumberException e) {
throw new NucleusTransactionException(
"The value of the ID generator key was altered to an invalid value",
e);
} finally {
mConn.release();
}
return newID;
}
/**
* Generates the ID of an object which will be persisted, but is not persisted yet,
* in the data store.
* ATTENTION: If the data store is (partially) responsible to generate an ID (e.g.
* because of IdGeneratorStrategy.IDENTITY). This method may change primary key
* attribute values. This method should be used only when inserting a new object
* in the data store, otherwise consider using getPersitableIdentity.
*
* @param op
* data source.
* @return Identity of object provided by op or null if at least one primary
* key field is not loaded.
*/
static String generatePersistableIdentity(ObjectProvider> op) {
StoreManager storeMgr = op.getExecutionContext().getStoreManager();
AbstractClassMetaData cmd = op.getClassMetaData();
if (cmd.pkIsDatastoreAttributed(storeMgr)) {
// The primary key must be (partially) calculated by the data store.
// There is no distinction between APPLICATION and DATASTORE
// IdentityType (yet)
int[] pkFieldNumbers = cmd.getPKMemberPositions();
long idKey = 0;
for (int i = 0; i < pkFieldNumbers.length; i++) {
AbstractMemberMetaData mmd = cmd
.getMetaDataForManagedMemberAtAbsolutePosition(pkFieldNumbers[i]);
if (storeMgr.isStrategyDatastoreAttributed(cmd,
pkFieldNumbers[i])) {
Class> mType = mmd.getType();
if (!(mType.equals(Long.class) || mType.equals(long.class)
|| mType.equals(Integer.class) || mType
.equals(int.class))) {
// Field type must be long/Long or int/Integer since
// this is the only IDENTITY value that is currently
// supported
throw new NucleusUserException(
"Any field using IDENTITY value generation with Scalaris should be of type long/Long or int/Integer");
}
idKey = generateNextIdentity(op);
if (mType.equals(Integer.class) || mType.equals(int.class)) {
if (idKey > Integer.MAX_VALUE) {
throw new NucleusException("We ran out of integer IDs!");
}
op.replaceField(mmd.getAbsoluteFieldNumber(), (int) idKey);
} else {
op.replaceField(mmd.getAbsoluteFieldNumber(), idKey);
}
if (NucleusLogger.DATASTORE_PERSIST.isDebugEnabled()) {
NucleusLogger.DATASTORE_PERSIST.debug("Generated ID " + idKey + " for object " +
"of class " + cmd.getFullClassName());
}
}
}
}
return getPersistableIdentity(op);
}
/**
* Returns the object identity as string. If this ObjectProvider has not yet
* set its external object id, it is set to the returned ID.
*
* @param op
* @return Identity of object provided by op or null if at least one primary
* key field is not loaded.
*/
public static String getPersistableIdentity(ObjectProvider> op) {
AbstractClassMetaData cmd = op.getClassMetaData();
String keySeparator = ":";
if (op.getExternalObjectId() == null) {
// The primary key must be (partially) calculated by the data store.
// There is no distinction between APPLICATION and DATASTORE
// IdentityType (yet)
StringBuilder keyBuilder = new StringBuilder();
int[] pkFieldNumbers = cmd.getPKMemberPositions();
for (int i = 0; i < pkFieldNumbers.length; i++) {
AbstractMemberMetaData mmd = cmd
.getMetaDataForManagedMemberAtAbsolutePosition(pkFieldNumbers[i]);
Object keyVal = op.provideField(mmd.getAbsoluteFieldNumber());
if (i > 0) {
keyBuilder.append(keySeparator);
}
keyBuilder.append(keyVal);
}
op.setPostStoreNewObjectId(keyBuilder.toString());
}
String id = IdentityUtils.getPersistableIdentityForId(op.getExternalObjectId());
return id;
}
/* **********************************************************************
* HOOKS FOR ScalarisStoreManager
* **********************************************************************/
/**
* Retrieves an object from Scalaris based on the ObjectProviders ID and class.
* @param op
* ObjectProvider representing the stored object in DataNucleus
* @param conn
* Connection used for the operation
* @return The stored object
*/
static JSONObject performScalarisObjectFetch(ObjectProvider> op, Transaction scalarisTransaction)
throws ConnectionException, NotFoundException {
final String objId = ScalarisUtils.getPersistableIdentity(op);
final String objClassName = op.getClassMetaData().getFullClassName();
final String objKey = ScalarisSchemaHandler.getObjectStorageKey(objClassName, objId);
return new JSONObject(scalarisTransaction.read(objKey).stringValue());
}
static JSONObject performScalarisObjectFetch(ObjectProvider> op, Connection scalarisConnection)
throws ConnectionException, NotFoundException {
final String objId = ScalarisUtils.getPersistableIdentity(op);
final String objClassName = op.getClassMetaData().getFullClassName();
final String objKey = ScalarisSchemaHandler.getObjectStorageKey(objClassName, objId);
TransactionSingleOp scalarisTransaction = new TransactionSingleOp(scalarisConnection);
return new JSONObject(scalarisTransaction.read(objKey).stringValue());
}
/**
* Inserts an object into Scalaris and performs all necessary management operations (updating indices etc.)
* ScalarisUtils.WRITE_LOCK is used to ensure thread safety.
* @param op
* ObjectPrevider representing the object to be inserted
* @param json
* The JSON representation of the object
* @param conn
* Connection used for the operation
*/
static void performScalarisObjectInsert(ObjectProvider> op, JSONObject json, Transaction scalarisTransaction)
throws ConnectionException {
try {
String objectId = ScalarisUtils.getPersistableIdentity(op);
insertObjectToIDIndex(op, scalarisTransaction);
updateUniqueMemberKey(op, json, null, scalarisTransaction);
insertToForeignKeyAction(op, json, scalarisTransaction);
String className = op.getClassMetaData().getFullClassName();
String storageKey = ScalarisSchemaHandler.getObjectStorageKey(className, objectId);
scalarisTransaction.write(storageKey, json.toString());
} catch (NotAListException e) {
throw new NucleusDataStoreException("Keys used internally have values of unexpected structure", e);
}
}
/**
* Updates a stored object and performs all necessary management operations (updating indices etc.)
* ScalarisUtils.WRITE_LOCK is used to ensure thread safety.
* @param op
* ObjectProvider representing the updated state of the object
* @param updatedFieldNumbers
* The ObjectProviders fields which shall be updated
* @param conn
* Connection used for the operation
*/
static void performScalarisObjectUpdate(ObjectProvider> op, int[] updatedFieldNumbers, Transaction scalarisTransaction)
throws ConnectionException, NotFoundException {
String objectId = ScalarisUtils.getPersistableIdentity(op);
// get old value
String className = op.getClassMetaData().getFullClassName();
String objectKey = ScalarisSchemaHandler.getObjectStorageKey(className, objectId);
JSONObject stored = new JSONObject(scalarisTransaction.read(objectKey).stringValue());
JSONObject changedVals = new JSONObject();
op.provideFields(updatedFieldNumbers, new StoreFieldManager(op,
changedVals, true));
// update stored object values
JSONObject changedValsOld = new JSONObject();
Iterator> keyIter = changedVals.keys();
while (keyIter.hasNext()) {
String key = (String) keyIter.next();
if (stored.has(key)) {
changedValsOld.put(key, stored.get(key));
}
stored.put(key, changedVals.get(key));
}
try {
updateUniqueMemberKey(op, changedVals, changedValsOld, scalarisTransaction);
updateForeignKeyAction(op, changedVals, changedValsOld, scalarisTransaction);
scalarisTransaction.write(objectKey, stored.toString());
} catch (NotAListException e) {
throw new NucleusDataStoreException("Keys used internally have values of unexpected structure", e);
}
}
/**
* Deletes a stored object and performs all necessary management operations (updating indices etc.)
* ScalarisUtils.WRITE_LOCK is used to ensure thread safety.
* @param op
* ObjectProvider representing the object to be deleted
* @param conn
* Connection used for the operation
*/
static void performScalarisObjectDelete(ObjectProvider> op, Transaction scalarisTransaction)
throws ConnectionException, NotFoundException {
String objectId = ScalarisUtils.getPersistableIdentity(op);
String className = op.getClassMetaData().getFullClassName();
String objectKey = ScalarisSchemaHandler.getObjectStorageKey(className, objectId);
JSONObject oldJson = new JSONObject(scalarisTransaction.read(objectKey).stringValue());
try {
removeObjectFromIDIndex(op, scalarisTransaction);
removeObjectFromUniqueMemberKey(op, oldJson, scalarisTransaction);
performForeignKeyActionDelete(op, scalarisTransaction);
scalarisTransaction.write(objectKey, DELETED_RECORD_VALUE);
} catch (NotAListException e) {
throw new NucleusDataStoreException("Keys used internally have values of unexpected structure", e);
}
}
/* **********************************************************************
* INDICIES OF ALL OBJECTS OF ONE TYPE (used for queries)
* **********************************************************************/
/**
* To support queries it is necessary to have the possibility to iterate
* over all stored objects of a specific type. Since Scalaris stores only
* key-value pairs without structured tables, this is not "natively"
* supported. Therefore an extra key is added to the store containing all
* keys of available objects of a type.
*
* This methods adds another entry to such a key based on the passed
* ObjectProvider. If no such key-value pair exists, it is created.
*
* @param op
* The data source
* @throws ConnectionException
* @throws NotAListExceptionn
*/
private static void insertObjectToIDIndex(ObjectProvider> op, Transaction t)
throws ConnectionException, NotAListException {
AbstractClassMetaData cmd = op.getClassMetaData();
String key = ScalarisSchemaHandler.getIDIndexKeyName(cmd.getFullClassName());
String objectStringIdentity = getPersistableIdentity(op);
List toAdd = new ArrayList();
toAdd.add(new ErlangValue(objectStringIdentity));
t.addDelOnList(key, toAdd, new ArrayList());
}
/**
* To support queries it is necessary to have the possibility to iterate
* over all stored objects of a specific type. Since Scalaris stores only
* key-value pairs without structured tables, this is not "natively"
* supported. Therefore an extra key is added to the store containing all
* keys of available objects of a type.
*
* This methods removes an entry of such a key based on the passed
* ObjectProvider. If no such key-value pair exists, nothing happens.
*
* @param op
* The data source
* @throws NotAListException
* @throws ConnectionException
*/
private static void removeObjectFromIDIndex(ObjectProvider> op, Transaction t)
throws ConnectionException, NotAListException {
AbstractClassMetaData cmd = op.getClassMetaData();
String key = ScalarisSchemaHandler.getIDIndexKeyName(cmd.getFullClassName());
String objectStringIdentity = getPersistableIdentity(op);
List toRemove = new ArrayList();
toRemove.add(new ErlangValue(objectStringIdentity));
t.addDelOnList(key, new ArrayList(), toRemove);
}
/* **********************************************************************
* ACTIONS TO GUARANTEE UNIQUENESS
* **********************************************************************/
/**
* To support unique member values (@Unique annotation) an extra key is
* inserted to signal the object ID whose object has stored the given value.
* Removed the keys belonging to the old state of the object and inserts new
* keys according to the new state.
* If this method is called and it turns out that the updated member value is
* stored by a different object a NucleusDataStoreException is thrown.
* @param op
* The data source representing the object
* @param newJson
* The new state of the object in JSON form
* @param oldJson
* The old state of the object in JSON form. If this is null it is assumed
* that this object is inserted for the first time and thus no old value will
* be deleted
* @param t
* The transaction used for the performed operations.
* @throws ConnectionException
* @throws UnknownException
*/
private static void updateUniqueMemberKey(ObjectProvider> op, JSONObject newJson, JSONObject oldJson, Transaction t)
throws ConnectionException, UnknownException {
AbstractClassMetaData cmd = op.getClassMetaData();
String objectStringIdentity = getPersistableIdentity(op);
String className = cmd.getFullClassName();
for (int field : cmd.getAllMemberPositions()) {
AbstractMemberMetaData mmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(field);
UniqueMetaData umd = mmd.getUniqueMetaData();
if (umd != null) {
// this member has @Unique annotation -> lookup all stored values for this member
String fieldName = mmd.getName();
String oldFieldValue = null, newFieldValue = null;
try {
newFieldValue = (newJson != null && newJson.has(fieldName)) ? newJson.getString(fieldName) : null;
oldFieldValue = (oldJson != null && oldJson.has(fieldName)) ? oldJson.getString(fieldName) : null;
} catch (JSONException e) {
// unique members can be null which means they are not found in the JSON
}
if (newFieldValue != null && newFieldValue.equals(oldFieldValue)) {
// this field has not changed -> skip update
continue;
}
if (oldFieldValue != null) {
// mark the old key as removed
String oldValueKey = ScalarisSchemaHandler.getUniqueMemberKey(className, fieldName, oldFieldValue);
t.write(oldValueKey, DELETED_RECORD_VALUE);
}
if (newFieldValue != null) {
// check if this value already exists
// if it does -> exception; if not -> store
String newValueKey = ScalarisSchemaHandler.getUniqueMemberKey(className, fieldName, newFieldValue);
String idStoringThisValue = null;
try {
idStoringThisValue = t.read(newValueKey).stringValue();
} catch (NotFoundException e) {} // this value does not exist yet, therefore there is no conflict
if (idStoringThisValue != null && !isDeletedRecord(idStoringThisValue)
&& !idStoringThisValue.equals(objectStringIdentity)) {
// another object has stored this value -> violation of uniqueness
throw new NucleusDataStoreException("The value '" + newFieldValue + "' of unique member '" +
fieldName + "' of class '" + className + "' already exists");
} else {
t.write(newValueKey, objectStringIdentity);
}
}
}
}
}
/**
* To support unique member values (@Unique annotation) an extra key is
* inserted to signal the object ID whose object has stored the given value.
* Deletes the keys belonging to the object represented by the ObjectProvider
* @param op
* The data source representing the object
* @param oldJson
* The current state of the object in JSON form.
* @param t
* The transaction used for the performed operations.
* @throws ConnectionException
* @throws UnknownException
*/
private static void removeObjectFromUniqueMemberKey(ObjectProvider> op, JSONObject oldJson, Transaction t)
throws ConnectionException, UnknownException {
AbstractClassMetaData cmd = op.getClassMetaData();
String className = cmd.getFullClassName();
for (int field : cmd.getAllMemberPositions()) {
AbstractMemberMetaData mmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(field);
UniqueMetaData umd = mmd.getUniqueMetaData();
if (umd != null) {
// this member has @Unique annotation -> lookup all stored values for this member
String fieldName = mmd.getName();
String oldFieldValue = null;
try {
oldFieldValue = oldJson.has(fieldName) ? oldJson.getString(fieldName) : null;
} catch (JSONException e) {} // can not happen since it is checked before
if (oldFieldValue != null) {
String oldValueKey = ScalarisSchemaHandler.getUniqueMemberKey(className, fieldName, oldFieldValue);
t.write(oldValueKey, DELETED_RECORD_VALUE);
}
}
}
}
/* **********************************************************************
* FOREIGN KEY ACTIONS
* **********************************************************************/
/**
* All foreign key action of an object are stored at a separate key.
* If (persisted) object A has a ForeignKeyAction.CASCADE annotation at a member
* whose value is (persisted) object B, An entry is added to B's FKA-index.
* If an persisted object is deleted, all entries of its FKA-index will be processed.
*
* Checks a newly inserted object for foreign key actions.
*
* @param op
* The data source of the object
* @param objToInsert
* The JSON representation of the object.
* @param t
* The transaction used to perform the operations
* @throws ConnectionException
* @throws NotAListException
*/
private static void insertToForeignKeyAction(ObjectProvider> op, JSONObject objToInsert, Transaction t)
throws ConnectionException, NotAListException {
updateForeignKeyAction(op, objToInsert, null, t);
}
/**
* All foreign key action of an object are stored at a separate key.
* If (persisted) object A has a ForeignKeyAction.CASCADE annotation at a member
* whose value is (persisted) object B, An entry is added to B's FKA-index.
* If an persisted object is deleted, all entries of its FKA-index will be processed.
*
* Deletes the FKAs of the old objects state and adds new FKAs according to its new state.
*
* @param op
* The data source of the object
* @param changedFiledsNewVal
* The JSON representation of the objects new state. It is sufficient if the JSON
* only contains the changed fields value.
* @param changedFiledsOldVal
* The JSON representation of the objects old state. It is sufficient if the JSON
* only contains the changed fields value. If this is null this operation is treated
* as an insert of new object, thus not deleting any old FKAs
* @param t
* The transaction used to perform the operations
* @throws ConnectionException
* @throws NotAListException
*/
@SuppressWarnings("unchecked")
private static void updateForeignKeyAction(ObjectProvider> op, JSONObject changedFieldsNewVal,
JSONObject changedFieldsOldVal, Transaction t)
throws ConnectionException, NotAListException {
AbstractClassMetaData cmd = op.getClassMetaData();
String objectStringIdentity = getPersistableIdentity(op);
// the map will store all elements which must be added/removed from which key
HashMap> toAddToKey = new HashMap>();
HashMap> toRemoveFromKey = new HashMap>();
for (int field : cmd.getAllMemberPositions()) {
AbstractMemberMetaData mmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(field);
// do nothing if this field has not changed
if (mmd == null || !changedFieldsNewVal.has(mmd.getName())) continue;
ForeignKeyMetaData fmd = mmd.getForeignKeyMetaData();
boolean isJoin = false;
if (mmd.getJoinMetaData() != null) {
// The member is a collection with an ForeignKeyAction attached
fmd = mmd.getJoinMetaData().getForeignKeyMetaData();
isJoin = true;
}
// add to actions keys if it is a cascading delete
if (fmd != null && fmd.getDeleteAction() == ForeignKeyAction.CASCADE) {
String fieldName = mmd.getName();
// parse JSON entries
ArrayList foreignObjectIdsNew = new ArrayList();
ArrayList foreignObjectIdsOld = new ArrayList();
try {
if (isJoin) {
String elementClassName = mmd.getCollection().getElementType();
JSONArray arrNew = changedFieldsNewVal.getJSONArray(fieldName);
JSONArray arrOld = new JSONArray();
if (changedFieldsOldVal != null) {
arrOld = changedFieldsOldVal.getJSONArray(fieldName);
}
for (int i = 0; i < arrNew.length(); i++) {
foreignObjectIdsNew.add(
ScalarisSchemaHandler.getForeignKeyActionKey(
elementClassName, arrNew.getString(i)));
}
for (int i = 0; i < arrOld.length(); i++) {
foreignObjectIdsOld.add(
ScalarisSchemaHandler.getForeignKeyActionKey(
elementClassName, arrOld.getString(i)));
}
} else {
String className = mmd.getType().getCanonicalName();
if (className == null) {
className = mmd.getType().getName();
}
foreignObjectIdsNew.add(
ScalarisSchemaHandler.getForeignKeyActionKey(
className, changedFieldsNewVal.getString(fieldName)));
}
} catch (JSONException e) {
// not found -> this action will be skipped
}
// ignore the objects in both the new and old list
for (int i = foreignObjectIdsNew.size() - 1; i >= 0; i--) {
String s = foreignObjectIdsNew.get(i);
if (foreignObjectIdsOld.remove(s)) {
foreignObjectIdsNew.remove(s);
}
}
// construct the FKA key for every foreign object id
ArrayList[] bothNewAndOld = new ArrayList[]{foreignObjectIdsOld, foreignObjectIdsNew};
for (ArrayList changeList : bothNewAndOld) {
for (String fkaKey : changeList) {
if (fkaKey == null) continue;
List newFka = new ArrayList(2);
newFka.add(objectStringIdentity);
newFka.add(cmd.getFullClassName());
if (isJoin) {
newFka.add(fieldName);
} else {
newFka.add(FKA_DELETE_OBJ);
}
// check in which list we are currently in to choose the
// HashMap to which the action must be added to
HashMap> toChangeMap = (foreignObjectIdsNew == changeList) ?
toAddToKey : toRemoveFromKey;
List toChange = toChangeMap.get(fkaKey);
if (toChange == null) {
toChange = new ArrayList();
}
toChange.add(new ErlangValue(newFka));
toChangeMap.put(fkaKey, toChange);
}
}
}
}
// update all keys where new entries are added
for (Entry> entry : toAddToKey.entrySet()) {
List toAdd = entry.getValue();
List toRemove = new ArrayList(0);
if (toRemoveFromKey.containsKey(entry.getKey())) {
toRemove = toRemoveFromKey.get(entry.getKey());
}
t.addDelOnList(entry.getKey(), toAdd, toRemove);
}
// update the remaining keys (only deletions)
for (Entry> entry : toRemoveFromKey.entrySet()) {
if (toAddToKey.containsKey(entry.getKey())) {
List toRemove = entry.getValue();
t.addDelOnList(entry.getKey(), new ArrayList(0), toRemove);
}
}
}
/**
* All foreign key action of an object are stored at a separate key.
* If (persisted) object A has a ForeignKeyAction.CASCADE annotation at a member
* whose value is (persisted) object B, An entry is added to B's FKA-index.
* If an persisted object is deleted, all entries of its FKA-index will be processed.
*
* This method will perform all foreign key actions of the object represented by the
* passed ObjectProvider.
*
* @param op
* The data source of the object
* @param t
* The transaction used to perform the operations
* @throws ConnectionException
* @throws NotAListException
*/
private static void performForeignKeyActionDelete(ObjectProvider> op, Transaction t)
throws ConnectionException, NotAListException {
AbstractClassMetaData cmd = op.getClassMetaData();
String objClassName = cmd.getFullClassName();
String objectStringIdentity = getPersistableIdentity(op);
ExecutionContext ec = op.getExecutionContext();
StoreManager storeMgr = ec.getStoreManager();
String fkaKey = ScalarisSchemaHandler.getForeignKeyActionKey(objClassName, objectStringIdentity);
List attachedActions;
try {
attachedActions = t.read(fkaKey).listValue();
} catch (NotFoundException e) {
// there is no FKA key for this object --> there are no actions to perform
return;
}
// now search in every found action entries with op's id and start a delete as sub transaction
for (ErlangValue action : attachedActions) {
try {
List actionAsList = action.stringListValue();
String objId = actionAsList.get(0);
String toDeleteClassName = actionAsList.get(1);
String memberToDelete = actionAsList.get(2);
AbstractClassMetaData obCmd = storeMgr.getMetaDataManager()
.getMetaDataForClass(toDeleteClassName, ec.getClassLoaderResolver());
Object obj = IdentityUtils.getObjectFromPersistableIdentity(objId, obCmd, ec);
if (FKA_DELETE_OBJ.equals(memberToDelete)) {
// delete the complete object
ec.deleteObject(obj);
} else {
// remove the object reference of the deleted object from the collection
ObjectProvider> toDelOp = ec.findObjectProvider(obj);
int memberId = toDelOp.getClassMetaData().getAbsolutePositionOfMember(memberToDelete);
if (toDelOp.isFieldLoaded(memberId)) {
// the field is loaded which means that the object could be used by the overlying
// application
Object objColl = toDelOp.provideField(memberId);
if (objColl instanceof Collection) {
Collection> collection = (Collection>) objColl;
ArrayList toRemove = new ArrayList();
Iterator> iter = collection.iterator();
while (iter.hasNext()) {
Object item = iter.next();
ObjectProvider> itemOp = ec.findObjectProvider(item);
String itemId = getPersistableIdentity(itemOp);
if (itemId.equals(objectStringIdentity)) {
toRemove.add(item);
}
}
for (Object o : toRemove) {
collection.remove(o);
}
storeMgr.getPersistenceHandler().updateObject(toDelOp, new int[]{memberId});
// updated field must be marked as dirty to ensure that instances of this object used
// somewhere else will fetch the updated value
toDelOp.makeDirty(memberId);
}
} else {
// if the member is not loaded it is way faster to directly alter the
// stored JSON object
String objKey = ScalarisSchemaHandler.getObjectStorageKey(toDeleteClassName, objId);
JSONObject objAsJson = new JSONObject(t.read(objKey).stringValue());
if (isDeletedRecord(objAsJson)) {
continue;
}
JSONArray memberArr = objAsJson.getJSONArray(memberToDelete);
JSONArray newMemberArr = new JSONArray();
for (int j = 0; j < memberArr.length(); j++) {
if (!memberArr.get(j).equals(objectStringIdentity)) {
newMemberArr.put(memberArr.get(j));
}
}
// only write new value if something changed
if (newMemberArr.length() != memberArr.length()) {
objAsJson.put(memberToDelete, newMemberArr);
t.write(objId, objAsJson.toString());
// if the object is not removed from cache after this update
// it is possible that the cached value returned is out dated
ec.removeObjectFromLevel1Cache(toDelOp.getInternalObjectId());
ec.removeObjectFromLevel2Cache(toDelOp.getInternalObjectId());
}
}
}
} catch (NucleusObjectNotFoundException e) {
// the object we want to delete is already deleted
// nothing must be done
} catch (NotFoundException e) {
throw new NucleusObjectNotFoundException(e.getMessage(), e);
} catch (JSONException e) {
throw new NucleusDataStoreException(e.getMessage(), e);
// the member containing the current object does not exist any more
// that means we don't have to remove it any more
}
}
// all objects are gone
t.write(fkaKey, DELETED_RECORD_VALUE);
}
/* **********************************************************************
* MISC
* **********************************************************************/
/**
* Scalaris does not support deletion (in a usable way). Therefore, deletion
* is simulated by overwriting an object with a "deleted" value.
*
* This method returns true if record is a JSON of a deleted record.
*
* @param record
* The JSON to check.
* @return true if record is JSON of a deleted record, false otherwise.
*/
public static boolean isDeletedRecord(final JSONObject record) {
return record == null || isDeletedRecord(record.toString());
}
public static boolean isDeletedRecord(final String record) {
return record == null || record.isEmpty() || record.equals(DELETED_RECORD_VALUE);
}
}
================================================
FILE: contrib/datanucleus/scalaris-datanucleus-store/src/java/org/datanucleus/store/scalaris/fieldmanager/FetchFieldManager.java
================================================
/**********************************************************************
Copyright (c) 2008 Erik Bengtson and others. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Contributors:
2013 Orange - port to Scalaris key/value store
...
**********************************************************************/
package org.datanucleus.store.scalaris.fieldmanager;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import org.datanucleus.ClassLoaderResolver;
import org.datanucleus.ExecutionContext;
import org.datanucleus.exceptions.NucleusDataStoreException;
import org.datanucleus.exceptions.NucleusException;
import org.datanucleus.exceptions.NucleusObjectNotFoundException;
import org.datanucleus.identity.IdentityUtils;
import org.datanucleus.metadata.AbstractClassMetaData;
import org.datanucleus.metadata.AbstractMemberMetaData;
import org.datanucleus.metadata.ColumnMetaData;
import org.datanucleus.metadata.JdbcType;
import org.datanucleus.metadata.RelationType;
import org.datanucleus.state.ObjectProvider;
import org.datanucleus.store.StoreManager;
import org.datanucleus.store.fieldmanager.AbstractFieldManager;
import org.datanucleus.store.schema.naming.ColumnType;
import org.datanucleus.store.types.SCOUtils;
import org.datanucleus.store.types.converters.TypeConverter;
import org.datanucleus.store.types.converters.TypeConverterHelper;
import org.datanucleus.util.TypeConversionHelper;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* FieldManager for fetching from JSON.
*/
public class FetchFieldManager extends AbstractFieldManager {
protected final ObjectProvider> op;
protected final AbstractClassMetaData acmd;
protected final ExecutionContext ec;
protected final JSONObject result;
protected StoreManager storeMgr;
public FetchFieldManager(ExecutionContext ec, AbstractClassMetaData acmd,
JSONObject result) {
this.acmd = acmd;
this.ec = ec;
this.result = result;
this.op = null;
this.storeMgr = ec.getStoreManager();
}
public FetchFieldManager(ObjectProvider> op, JSONObject result) {
this.acmd = op.getClassMetaData();
this.ec = op.getExecutionContext();
this.result = result;
this.op = op;
this.storeMgr = ec.getStoreManager();
}
public boolean fetchBooleanField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return false;
}
try {
return result.getBoolean(memberName);
} catch (JSONException e) {
// ignore
return false;
}
}
public byte fetchByteField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return 0;
}
try {
String str = result.getString(memberName);
return Byte.valueOf(str).byteValue();
} catch (JSONException e) {
// ignore
return 0;
}
}
public char fetchCharField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return 0;
}
try {
return result.getString(memberName).charAt(0);
} catch (JSONException e) {
// ignore
return 0;
}
}
public double fetchDoubleField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return 0;
}
try {
return result.getDouble(memberName);
} catch (JSONException e) {
// ignore
return 0;
}
}
public float fetchFloatField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return 0;
}
try {
return (float) result.getDouble(memberName);
} catch (JSONException e) {
// ignore
return 0;
}
}
public int fetchIntField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return 0;
}
try {
return result.getInt(memberName);
} catch (JSONException e) {
// ignore
return 0;
}
}
public long fetchLongField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return 0;
}
try {
return result.getLong(memberName);
} catch (JSONException e) {
// ignore
return 0;
}
}
public short fetchShortField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return 0;
}
try {
return (short) result.getInt(memberName);
} catch (JSONException e) {
// ignore
return 0;
}
}
public String fetchStringField(int fieldNumber) {
String memberName = storeMgr
.getNamingFactory()
.getColumnName(
acmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber),
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return null;
}
try {
return result.getString(memberName);
} catch (JSONException e) {
// ignore
return null;
}
}
public Object fetchObjectField(int fieldNumber) {
AbstractMemberMetaData mmd = acmd
.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber);
String memberName = storeMgr.getNamingFactory().getColumnName(mmd,
ColumnType.COLUMN);
if (result.isNull(memberName)) {
return null;
}
// Special cases
ClassLoaderResolver clr = ec.getClassLoaderResolver();
RelationType relationType = mmd.getRelationType(clr);
if (RelationType.isRelationSingleValued(relationType)
&& mmd.isEmbedded()) {
throw new NucleusException(
"Don't currently support embedded fields");
}
try {
return fetchObjectFieldInternal(mmd, memberName, clr);
} catch (JSONException e) {
throw new NucleusException(e.getMessage(), e);
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
protected Object fetchObjectFieldInternal_RelationTypeNone(
AbstractMemberMetaData mmd, String memberName,
ClassLoaderResolver clr) throws JSONException {
final Object returnValue;
if (mmd.getTypeConverterName() != null) {
// User-defined converter
TypeConverter conv = ec.getNucleusContext().getTypeManager()
.getTypeConverterForName(mmd.getTypeConverterName());
Class> datastoreType = TypeConverterHelper
.getDatastoreTypeForTypeConverter(conv, mmd.getType());
if (datastoreType == String.class) {
returnValue = (Object)conv.toMemberType(result.getString(memberName));
} else if (datastoreType == Boolean.class) {
returnValue = conv.toMemberType(result.getBoolean(memberName));
} else if (datastoreType == Double.class) {
returnValue = conv.toMemberType(result.getDouble(memberName));
} else if (datastoreType == Float.class) {
returnValue = conv.toMemberType(result.getDouble(memberName));
} else if (datastoreType == Integer.class) {
returnValue = conv.toMemberType(result.getInt(memberName));
} else if (datastoreType == Long.class) {
returnValue = conv.toMemberType(result.getLong(memberName));
} else {
returnValue = null;
}
if (op != null) {
return SCOUtils.wrapSCOField(op, mmd.getAbsoluteFieldNumber(), returnValue, true);
}
} else if (Boolean.class.isAssignableFrom(mmd.getType())) {
return result.getBoolean(memberName);
} else if (Integer.class.isAssignableFrom(mmd.getType())) {
return result.getInt(memberName);
} else if (Long.class.isAssignableFrom(mmd.getType())) {
return result.getLong(memberName);
} else if (Double.class.isAssignableFrom(mmd.getType())) {
return result.getDouble(memberName);
} else if (Date.class.isAssignableFrom(mmd.getType())) {
Long dateValue = result.getLong(memberName);
return new Date(dateValue);
} else if (Enum.class.isAssignableFrom(mmd.getType())) {
if (mmd.getType().getEnumConstants() != null) {
return mmd.getType().getEnumConstants()[result
.getInt(memberName)];
} else {
return Enum.valueOf(mmd.getType(),
(String) result.get(memberName));
}
} else if (BigDecimal.class.isAssignableFrom(mmd.getType())
|| BigInteger.class.isAssignableFrom(mmd.getType())) {
return TypeConversionHelper.convertTo(result.get(memberName),
mmd.getType());
} else if (Collection.class.isAssignableFrom(mmd.getType())) {
// Collection